File: ewk_context_menu_item.cpp

package info (click to toggle)
qtwebkit-opensource-src 5.7.1%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 291,692 kB
  • ctags: 268,122
  • sloc: cpp: 1,360,420; python: 70,286; ansic: 42,986; perl: 35,476; ruby: 12,236; objc: 9,465; xml: 8,396; asm: 3,873; yacc: 2,397; sh: 1,647; makefile: 650; lex: 644; java: 110
file content (322 lines) | stat: -rw-r--r-- 13,476 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
/*
 * Copyright (C) 2012 Samsung Electronics. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

#include "config.h"
#include "ewk_context_menu_item.h"

#include "ewk_context_menu_item_private.h"
#include "ewk_context_menu_private.h"
#include "ewk_private.h"
#include <WebKit2/WKContextMenuItemTypes.h>
#include <wtf/text/CString.h>

using namespace WebKit;

static Ewk_Context_Menu_Item_Action getEwkActionFromWKTag(WKContextMenuItemTag action);

EwkContextMenuItem::EwkContextMenuItem(WKContextMenuItemRef item, EwkContextMenu* parentMenu)
    : m_type(static_cast<Ewk_Context_Menu_Item_Type>(WKContextMenuItemGetType(item)))
    , m_action(getEwkActionFromWKTag((WKContextMenuItemGetTag(item))))
    , m_title(WKEinaSharedString(AdoptWK, WKContextMenuItemCopyTitle(item)))
    , m_isChecked(WKContextMenuItemGetChecked(item))
    , m_isEnabled(WKContextMenuItemGetEnabled(item))
    , m_parentMenu(parentMenu)
{
    if (WKContextMenuItemGetType(item) == kWKContextMenuItemTypeSubmenu) {
        WKRetainPtr<WKArrayRef> menuItems = adoptWK(WKContextMenuCopySubmenuItems(item));
        m_subMenu = EwkContextMenu::create(m_parentMenu->ewkView(), menuItems.get());
    }
}

EwkContextMenuItem::EwkContextMenuItem(Ewk_Context_Menu_Item_Type type, Ewk_Context_Menu_Item_Action action, const char* title, Eina_Bool checked, Eina_Bool enabled, PassRefPtr<EwkContextMenu> subMenu, EwkContextMenu* parentMenu)
    : m_type(type)
    , m_action(action)
    , m_title(title)
    , m_isChecked(checked)
    , m_isEnabled(enabled)
    , m_parentMenu(parentMenu)
    , m_subMenu(subMenu)
{
}

Ewk_Context_Menu_Item* ewk_context_menu_item_new(Ewk_Context_Menu_Item_Type type, Ewk_Context_Menu_Item_Action action, const char* title, Eina_Bool checked, Eina_Bool enabled)
{
    return Ewk_Context_Menu_Item::create(type, action, title, checked, enabled).leakPtr();
}

Ewk_Context_Menu_Item* ewk_context_menu_item_new_with_submenu(Ewk_Context_Menu_Item_Action action, const char* title, Eina_Bool enabled, Ewk_Context_Menu* subMenu)
{
    EWK_OBJ_GET_IMPL_OR_RETURN(EwkContextMenu, subMenu, subMenuImpl, 0);

    return Ewk_Context_Menu_Item::create(EWK_SUBMENU_TYPE, action, title, false, enabled, subMenuImpl).leakPtr();
}

Ewk_Context_Menu_Item_Type ewk_context_menu_item_type_get(const Ewk_Context_Menu_Item* item)
{
    EINA_SAFETY_ON_NULL_RETURN_VAL(item, EWK_ACTION_TYPE);

    return item->type();
}

Eina_Bool ewk_context_menu_item_type_set(Ewk_Context_Menu_Item* item, Ewk_Context_Menu_Item_Type type)
{
    EINA_SAFETY_ON_NULL_RETURN_VAL(item, false);

    item->setType(type);

    return true;
}

Ewk_Context_Menu_Item_Action ewk_context_menu_item_action_get(const Ewk_Context_Menu_Item* item)
{
    EINA_SAFETY_ON_NULL_RETURN_VAL(item, EWK_CONTEXT_MENU_ITEM_TAG_NO_ACTION);

    return item->action();
}

Eina_Bool ewk_context_menu_item_action_set(Ewk_Context_Menu_Item* item, Ewk_Context_Menu_Item_Action action)
{
    EINA_SAFETY_ON_NULL_RETURN_VAL(item, false);

    item->setAction(action);

    return true;
}

const char* ewk_context_menu_item_title_get(const Ewk_Context_Menu_Item* item)
{
    EINA_SAFETY_ON_NULL_RETURN_VAL(item, 0);

    return item->title();
}

Eina_Bool ewk_context_menu_item_title_set(Ewk_Context_Menu_Item* item, const char* title)
{
    EINA_SAFETY_ON_NULL_RETURN_VAL(item, false);

    item->setTitle(title);

    return true;
}

Eina_Bool ewk_context_menu_item_checked_get(const Ewk_Context_Menu_Item* item)
{
    EINA_SAFETY_ON_NULL_RETURN_VAL(item, false);

    return item->checked();
}

Eina_Bool ewk_context_menu_item_checked_set(Ewk_Context_Menu_Item* item, Eina_Bool checked)
{
    EINA_SAFETY_ON_NULL_RETURN_VAL(item, false);

    item->setChecked(checked);

    return true;
}

Eina_Bool ewk_context_menu_item_enabled_get(const Ewk_Context_Menu_Item* item)
{
    EINA_SAFETY_ON_NULL_RETURN_VAL(item, false);
    
    return item->enabled();
}

Eina_Bool ewk_context_menu_item_enabled_set(Ewk_Context_Menu_Item* item, Eina_Bool enabled)
{
    EINA_SAFETY_ON_NULL_RETURN_VAL(item, false);

    item->setEnabled(enabled);

    return true;
}

Ewk_Context_Menu* ewk_context_menu_item_parent_menu_get(const Ewk_Context_Menu_Item* item)
{
    EINA_SAFETY_ON_NULL_RETURN_VAL(item, 0);

    return item->parentMenu();
}

Ewk_Context_Menu* ewk_context_menu_item_submenu_get(const Ewk_Context_Menu_Item* item)
{
    EINA_SAFETY_ON_NULL_RETURN_VAL(item, 0);

    return item->subMenu();
}

static Ewk_Context_Menu_Item_Action getEwkActionFromWKTag(WKContextMenuItemTag action)
{
    switch (action) {
    case kWKContextMenuItemTagNoAction:
        return EWK_CONTEXT_MENU_ITEM_TAG_NO_ACTION;
    case kWKContextMenuItemTagOpenLinkInNewWindow:
        return EWK_CONTEXT_MENU_ITEM_TAG_OPEN_LINK_IN_NEW_WINDOW;
    case kWKContextMenuItemTagDownloadLinkToDisk:
        return EWK_CONTEXT_MENU_ITEM_TAG_DOWNLOAD_LINK_TO_DISK;
    case kWKContextMenuItemTagCopyLinkToClipboard:
        return EWK_CONTEXT_MENU_ITEM_TAG_COPY_LINK_TO_CLIPBOARD;
    case kWKContextMenuItemTagOpenImageInNewWindow:
        return EWK_CONTEXT_MENU_ITEM_TAG_OPEN_IMAGE_IN_NEW_WINDOW;
    case kWKContextMenuItemTagDownloadImageToDisk:
        return EWK_CONTEXT_MENU_ITEM_TAG_DOWNLOAD_IMAGE_TO_DISK;
    case kWKContextMenuItemTagCopyImageToClipboard:
        return EWK_CONTEXT_MENU_ITEM_TAG_COPY_IMAGE_TO_CLIPBOARD;
    case kWKContextMenuItemTagCopyImageUrlToClipboard:
        return EWK_CONTEXT_MENU_ITEM_TAG_COPY_IMAGE_URL_TO_CLIPBOARD;
    case kWKContextMenuItemTagOpenFrameInNewWindow:
        return EWK_CONTEXT_MENU_ITEM_TAG_OPEN_FRAME_IN_NEW_WINDOW;
    case kWKContextMenuItemTagCopy:
        return EWK_CONTEXT_MENU_ITEM_TAG_COPY;
    case kWKContextMenuItemTagGoBack:
        return EWK_CONTEXT_MENU_ITEM_TAG_GO_BACK;
    case kWKContextMenuItemTagGoForward:
        return EWK_CONTEXT_MENU_ITEM_TAG_GO_FORWARD;
    case kWKContextMenuItemTagStop:
        return EWK_CONTEXT_MENU_ITEM_TAG_STOP;
    case kWKContextMenuItemTagReload:
        return EWK_CONTEXT_MENU_ITEM_TAG_RELOAD;
    case kWKContextMenuItemTagCut:
        return EWK_CONTEXT_MENU_ITEM_TAG_CUT;
    case kWKContextMenuItemTagPaste:
        return EWK_CONTEXT_MENU_ITEM_TAG_PASTE;
    case kWKContextMenuItemTagSelectAll:
        return EWK_CONTEXT_MENU_ITEM_TAG_SELECT_ALL;
    case kWKContextMenuItemTagSpellingGuess:
        return EWK_CONTEXT_MENU_ITEM_TAG_SPELLING_GUESS;
    case kWKContextMenuItemTagNoGuessesFound:
        return EWK_CONTEXT_MENU_ITEM_TAG_NO_GUESSES_FOUND;
    case kWKContextMenuItemTagIgnoreSpelling:
        return EWK_CONTEXT_MENU_ITEM_TAG_IGNORE_SPELLING;
    case kWKContextMenuItemTagLearnSpelling:
        return EWK_CONTEXT_MENU_ITEM_TAG_LEARN_SPELLING;
    case kWKContextMenuItemTagOther:
        return EWK_CONTEXT_MENU_ITEM_TAG_OTHER;
    case kWKContextMenuItemTagSearchInSpotlight:
        return EWK_CONTEXT_MENU_ITEM_TAG_SEARCH_IN_SPOTLIGHT;
    case kWKContextMenuItemTagSearchWeb:
        return EWK_CONTEXT_MENU_ITEM_TAG_SEARCH_WEB;
    case kWKContextMenuItemTagLookUpInDictionary:
        return EWK_CONTEXT_MENU_ITEM_TAG_LOOK_UP_IN_DICTIONARY;
    case kWKContextMenuItemTagOpenWithDefaultApplication:
        return EWK_CONTEXT_MENU_ITEM_TAG_OPEN_WITH_DEFAULT_APPLICATION;
    case kWKContextMenuItemTagPDFActualSize:
        return EWK_CONTEXT_MENU_ITEM_PDFACTUAL_SIZE;
    case kWKContextMenuItemTagPDFZoomIn:
        return EWK_CONTEXT_MENU_ITEM_PDFZOOM_IN;
    case kWKContextMenuItemTagPDFZoomOut:
        return EWK_CONTEXT_MENU_ITEM_PDFZOOM_OUT;
    case kWKContextMenuItemTagPDFAutoSize:
        return EWK_CONTEXT_MENU_ITEM_PDFAUTO_SIZE;
    case kWKContextMenuItemTagPDFSinglePage:
        return EWK_CONTEXT_MENU_ITEM_PDFSINGLE_PAGE;
    case kWKContextMenuItemTagPDFFacingPages:
        return EWK_CONTEXT_MENU_ITEM_PDFFACING_PAGES;
    case kWKContextMenuItemTagPDFContinuous:
        return EWK_CONTEXT_MENU_ITEM_PDFCONTINUOUS;
    case kWKContextMenuItemTagPDFNextPage:
        return EWK_CONTEXT_MENU_ITEM_PDFNEXT_PAGE;
    case kWKContextMenuItemTagPDFPreviousPage:
        return EWK_CONTEXT_MENU_ITEM_PDFPREVIOUS_PAGE;
    case kWKContextMenuItemTagOpenLink:
        return EWK_CONTEXT_MENU_ITEM_TAG_OPEN_LINK;
    case kWKContextMenuItemTagIgnoreGrammar:
        return EWK_CONTEXT_MENU_ITEM_TAG_IGNORE_GRAMMAR;
    case kWKContextMenuItemTagSpellingMenu:
        return EWK_CONTEXT_MENU_ITEM_TAG_SPELLING_MENU;
    case kWKContextMenuItemTagShowSpellingPanel:
        return EWK_CONTEXT_MENU_ITEM_TAG_SHOW_SPELLING_PANEL;
    case kWKContextMenuItemTagCheckSpelling:
        return EWK_CONTEXT_MENU_ITEM_TAG_CHECK_SPELLING;
    case kWKContextMenuItemTagCheckSpellingWhileTyping:
        return EWK_CONTEXT_MENU_ITEM_TAG_CHECK_SPELLING_WHILE_TYPING;
    case kWKContextMenuItemTagCheckGrammarWithSpelling:
        return EWK_CONTEXT_MENU_ITEM_TAG_CHECK_GRAMMAR_WITH_SPELLING;
    case kWKContextMenuItemTagFontMenu:
        return EWK_CONTEXT_MENU_ITEM_TAG_FONT_MENU;
    case kWKContextMenuItemTagShowFonts:
        return EWK_CONTEXT_MENU_ITEM_TAG_SHOW_FONTS;
    case kWKContextMenuItemTagBold:
        return EWK_CONTEXT_MENU_ITEM_TAG_BOLD;
    case kWKContextMenuItemTagItalic:
        return EWK_CONTEXT_MENU_ITEM_TAG_ITALIC;
    case kWKContextMenuItemTagUnderline:
        return EWK_CONTEXT_MENU_ITEM_TAG_UNDERLINE;
    case kWKContextMenuItemTagOutline:
        return EWK_CONTEXT_MENU_ITEM_TAG_OUTLINE;
    case kWKContextMenuItemTagStyles:
        return EWK_CONTEXT_MENU_ITEM_TAG_STYLES;
    case kWKContextMenuItemTagShowColors:
        return EWK_CONTEXT_MENU_ITEM_TAG_SHOW_COLORS;
    case kWKContextMenuItemTagSpeechMenu:
        return EWK_CONTEXT_MENU_ITEM_TAG_SPEECH_MENU;
    case kWKContextMenuItemTagStartSpeaking:
        return EWK_CONTEXT_MENU_ITEM_TAG_START_SPEAKING;
    case kWKContextMenuItemTagStopSpeaking:
        return EWK_CONTEXT_MENU_ITEM_TAG_STOP_SPEAKING;
    case kWKContextMenuItemTagWritingDirectionMenu:
        return EWK_CONTEXT_MENU_ITEM_TAG_WRITING_DIRECTION_MENU;
    case kWKContextMenuItemTagDefaultDirection:
        return EWK_CONTEXT_MENU_ITEM_TAG_DEFAULT_DIRECTION;
    case kWKContextMenuItemTagLeftToRight:
        return EWK_CONTEXT_MENU_ITEM_TAG_LEFT_TO_RIGHT;
    case kWKContextMenuItemTagRightToLeft:
        return EWK_CONTEXT_MENU_ITEM_TAG_RIGHT_TO_LEFT;
    case kWKContextMenuItemTagPDFSinglePageScrolling:
        return EWK_CONTEXT_MENU_ITEM_TAG_PDFSINGLE_PAGE_SCROLLING;
    case kWKContextMenuItemTagPDFFacingPagesScrolling:
        return EWK_CONTEXT_MENU_ITEM_TAG_PDFFACING_PAGES_SCROLLING;
    case kWKContextMenuItemTagInspectElement:
        return EWK_CONTEXT_MENU_ITEM_TAG_INSPECT_ELEMENT;
    case kWKContextMenuItemTagTextDirectionMenu:
        return EWK_CONTEXT_MENU_ITEM_TAG_TEXT_DIRECTION_MENU;
    case kWKContextMenuItemTagTextDirectionDefault:
        return EWK_CONTEXT_MENU_ITEM_TAG_TEXT_DIRECTION_DEFAULT;
    case kWKContextMenuItemTagTextDirectionLeftToRight:
        return EWK_CONTEXT_MENU_ITEM_TAG_TEXT_DIRECTION_LEFT_TO_RIGHT;
    case kWKContextMenuItemTagTextDirectionRightToLeft:
        return EWK_CONTEXT_MENU_ITEM_TAG_TEXT_DIRECTION_RIGHT_TO_LEFT;
    case kWKContextMenuItemTagOpenMediaInNewWindow:
        return EWK_CONTEXT_MENU_ITEM_OPEN_MEDIA_IN_NEW_WINDOW;
    case kWKContextMenuItemTagDownloadMediaToDisk:
        return EWK_CONTEXT_MENU_ITEM_TAG_DOWNLOAD_MEDIA_TO_DISK;
    case kWKContextMenuItemTagCopyMediaLinkToClipboard:
        return EWK_CONTEXT_MENU_ITEM_TAG_COPY_MEDIA_LINK_TO_CLIPBOARD;
    case kWKContextMenuItemTagToggleMediaControls:
        return EWK_CONTEXT_MENU_ITEM_TAG_TOGGLE_MEDIA_CONTROLS;
    case kWKContextMenuItemTagToggleMediaLoop:
        return EWK_CONTEXT_MENU_ITEM_TAG_TOGGLE_MEDIA_LOOP;
    case kWKContextMenuItemTagEnterVideoFullscreen:
        return EWK_CONTEXT_MENU_ITEM_TAG_ENTER_VIDEO_FULLSCREEN;
    case kWKContextMenuItemTagMediaPlayPause:
        return EWK_CONTEXT_MENU_ITEM_TAG_MEDIA_PLAY_PAUSE;
    case kWKContextMenuItemTagMediaMute:
        return EWK_CONTEXT_MENU_ITEM_TAG_MEDIA_MUTE;
    case kWKContextMenuItemBaseApplicationTag:
        return EWK_CONTEXT_MENU_ITEM_BASE_APPLICATION_TAG;
    default:
        return static_cast<Ewk_Context_Menu_Item_Action>(action);
    }
}