1/*
2 * Copyright (C) 2006 Apple Inc. All rights reserved.
3 * Copyright (C) 2010 Igalia S.L
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 *
14 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
15 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
18 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 */
26
27#ifndef ContextMenuItem_h
28#define ContextMenuItem_h
29
30#include <wtf/text/WTFString.h>
31
32namespace WebCore {
33
34class ContextMenu;
35class Image;
36
37enum ContextMenuAction {
38 ContextMenuItemTagNoAction,
39 ContextMenuItemTagOpenLinkInNewWindow,
40 ContextMenuItemTagDownloadLinkToDisk,
41 ContextMenuItemTagCopyLinkToClipboard,
42 ContextMenuItemTagOpenImageInNewWindow,
43 ContextMenuItemTagDownloadImageToDisk,
44 ContextMenuItemTagCopyImageToClipboard,
45#if PLATFORM(GTK)
46 ContextMenuItemTagCopyImageUrlToClipboard,
47#endif
48 ContextMenuItemTagOpenFrameInNewWindow,
49 ContextMenuItemTagCopy,
50 ContextMenuItemTagGoBack,
51 ContextMenuItemTagGoForward,
52 ContextMenuItemTagStop,
53 ContextMenuItemTagReload,
54 ContextMenuItemTagCut,
55 ContextMenuItemTagPaste,
56#if PLATFORM(GTK)
57 ContextMenuItemTagDelete,
58 ContextMenuItemTagSelectAll,
59 ContextMenuItemTagInputMethods,
60 ContextMenuItemTagUnicode,
61 ContextMenuItemTagUnicodeInsertLRMMark,
62 ContextMenuItemTagUnicodeInsertRLMMark,
63 ContextMenuItemTagUnicodeInsertLREMark,
64 ContextMenuItemTagUnicodeInsertRLEMark,
65 ContextMenuItemTagUnicodeInsertLROMark,
66 ContextMenuItemTagUnicodeInsertRLOMark,
67 ContextMenuItemTagUnicodeInsertPDFMark,
68 ContextMenuItemTagUnicodeInsertZWSMark,
69 ContextMenuItemTagUnicodeInsertZWJMark,
70 ContextMenuItemTagUnicodeInsertZWNJMark,
71 ContextMenuItemTagInsertEmoji,
72#endif
73 ContextMenuItemTagSpellingGuess,
74 ContextMenuItemTagNoGuessesFound,
75 ContextMenuItemTagIgnoreSpelling,
76 ContextMenuItemTagLearnSpelling,
77 ContextMenuItemTagOther,
78 ContextMenuItemTagSearchInSpotlight,
79 ContextMenuItemTagSearchWeb,
80 ContextMenuItemTagLookUpInDictionary,
81 ContextMenuItemTagOpenWithDefaultApplication,
82 ContextMenuItemPDFActualSize,
83 ContextMenuItemPDFZoomIn,
84 ContextMenuItemPDFZoomOut,
85 ContextMenuItemPDFAutoSize,
86 ContextMenuItemPDFSinglePage,
87 ContextMenuItemPDFFacingPages,
88 ContextMenuItemPDFContinuous,
89 ContextMenuItemPDFNextPage,
90 ContextMenuItemPDFPreviousPage,
91 ContextMenuItemTagOpenLink,
92 ContextMenuItemTagIgnoreGrammar,
93 ContextMenuItemTagSpellingMenu, // Spelling or Spelling/Grammar sub-menu
94 ContextMenuItemTagShowSpellingPanel,
95 ContextMenuItemTagCheckSpelling,
96 ContextMenuItemTagCheckSpellingWhileTyping,
97 ContextMenuItemTagCheckGrammarWithSpelling,
98 ContextMenuItemTagFontMenu, // Font sub-menu
99 ContextMenuItemTagShowFonts,
100 ContextMenuItemTagBold,
101 ContextMenuItemTagItalic,
102 ContextMenuItemTagUnderline,
103 ContextMenuItemTagOutline,
104 ContextMenuItemTagStyles,
105 ContextMenuItemTagShowColors,
106 ContextMenuItemTagSpeechMenu, // Speech sub-menu
107 ContextMenuItemTagStartSpeaking,
108 ContextMenuItemTagStopSpeaking,
109 ContextMenuItemTagWritingDirectionMenu, // Writing Direction sub-menu
110 ContextMenuItemTagDefaultDirection,
111 ContextMenuItemTagLeftToRight,
112 ContextMenuItemTagRightToLeft,
113 ContextMenuItemTagPDFSinglePageScrolling,
114 ContextMenuItemTagPDFFacingPagesScrolling,
115 ContextMenuItemTagInspectElement,
116 ContextMenuItemTagTextDirectionMenu, // Text Direction sub-menu
117 ContextMenuItemTagTextDirectionDefault,
118 ContextMenuItemTagTextDirectionLeftToRight,
119 ContextMenuItemTagTextDirectionRightToLeft,
120#if PLATFORM(COCOA)
121 ContextMenuItemTagCorrectSpellingAutomatically,
122 ContextMenuItemTagSubstitutionsMenu,
123 ContextMenuItemTagShowSubstitutions,
124 ContextMenuItemTagSmartCopyPaste,
125 ContextMenuItemTagSmartQuotes,
126 ContextMenuItemTagSmartDashes,
127 ContextMenuItemTagSmartLinks,
128 ContextMenuItemTagTextReplacement,
129 ContextMenuItemTagTransformationsMenu,
130 ContextMenuItemTagMakeUpperCase,
131 ContextMenuItemTagMakeLowerCase,
132 ContextMenuItemTagCapitalize,
133 ContextMenuItemTagChangeBack,
134#endif
135 ContextMenuItemTagOpenMediaInNewWindow,
136 ContextMenuItemTagDownloadMediaToDisk,
137 ContextMenuItemTagCopyMediaLinkToClipboard,
138 ContextMenuItemTagToggleMediaControls,
139 ContextMenuItemTagToggleMediaLoop,
140 ContextMenuItemTagEnterVideoFullscreen,
141 ContextMenuItemTagMediaPlayPause,
142 ContextMenuItemTagMediaMute,
143 ContextMenuItemTagDictationAlternative,
144 ContextMenuItemTagToggleVideoFullscreen,
145 ContextMenuItemTagShareMenu,
146 ContextMenuItemTagToggleVideoEnhancedFullscreen,
147 ContextMenuItemBaseCustomTag = 5000,
148 ContextMenuItemLastCustomTag = 5999,
149 ContextMenuItemBaseApplicationTag = 10000
150};
151
152enum ContextMenuItemType {
153 ActionType,
154 CheckableActionType,
155 SeparatorType,
156 SubmenuType
157};
158
159class ContextMenuItem {
160 WTF_MAKE_FAST_ALLOCATED;
161public:
162 WEBCORE_EXPORT ContextMenuItem(ContextMenuItemType, ContextMenuAction, const String&, ContextMenu* subMenu = 0);
163 WEBCORE_EXPORT ContextMenuItem(ContextMenuItemType, ContextMenuAction, const String&, bool enabled, bool checked);
164
165 WEBCORE_EXPORT ~ContextMenuItem();
166
167 void setType(ContextMenuItemType);
168 WEBCORE_EXPORT ContextMenuItemType type() const;
169
170 void setAction(ContextMenuAction);
171 WEBCORE_EXPORT ContextMenuAction action() const;
172
173 void setChecked(bool = true);
174 WEBCORE_EXPORT bool checked() const;
175
176 void setEnabled(bool = true);
177 WEBCORE_EXPORT bool enabled() const;
178
179 void setSubMenu(ContextMenu*);
180
181 WEBCORE_EXPORT ContextMenuItem(ContextMenuAction, const String&, bool enabled, bool checked, const Vector<ContextMenuItem>& subMenuItems);
182 ContextMenuItem();
183
184 bool isNull() const;
185
186 void setTitle(const String& title) { m_title = title; }
187 const String& title() const { return m_title; }
188
189 const Vector<ContextMenuItem>& subMenuItems() const { return m_subMenuItems; }
190private:
191 ContextMenuItemType m_type;
192 ContextMenuAction m_action;
193 String m_title;
194 bool m_enabled;
195 bool m_checked;
196 Vector<ContextMenuItem> m_subMenuItems;
197};
198
199}
200
201#endif // ContextMenuItem_h
202