7fe02869487569c08f5a11cc131f4bf04aa9903b
[WebKit-https.git] / WebCore / platform / ContextMenuItem.h
1 /*
2  * Copyright (C) 2006 Apple Computer, Inc.  All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
24  */
25
26 #ifndef ContextMenuItem_h
27 #define ContextMenuItem_h
28
29 #include <wtf/Noncopyable.h>
30
31 #include "PlatformString.h"
32
33 #if PLATFORM(MAC)
34 #ifdef __OBJC__
35 @class NSMenuItem;
36 #else
37 class NSMenuItem;
38 #endif
39 #elif PLATFORM(WIN)
40 typedef struct tagMENUITEMINFOW* LPMENUITEMINFO;
41 #elif PLATFORM(QT)
42 #endif
43
44 namespace WebCore {
45
46     class ContextMenu;
47
48 #if PLATFORM(MAC)
49     typedef NSMenuItem* PlatformMenuItemDescription;
50 #elif PLATFORM(WIN)
51     typedef LPMENUITEMINFO PlatformMenuItemDescription;
52 #elif PLATFORM(QT)
53     typedef void* PlatformMenuItemDescription;
54 #endif
55
56     // This enum needs to be in sync with WebMenuItemTag, which is defined in WebUIDelegate.h
57     enum ContextMenuAction {
58         ContextMenuItemTagNoAction=0, // This item is not actually in WebUIDelegate.h
59         ContextMenuItemTagOpenLinkInNewWindow=1,
60         ContextMenuItemTagDownloadLinkToDisk,
61         ContextMenuItemTagCopyLinkToClipboard,
62         ContextMenuItemTagOpenImageInNewWindow,
63         ContextMenuItemTagDownloadImageToDisk,
64         ContextMenuItemTagCopyImageToClipboard,
65         ContextMenuItemTagOpenFrameInNewWindow,
66         ContextMenuItemTagCopy,
67         ContextMenuItemTagGoBack,
68         ContextMenuItemTagGoForward,
69         ContextMenuItemTagStop,
70         ContextMenuItemTagReload,
71         ContextMenuItemTagCut,
72         ContextMenuItemTagPaste,
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         ContextMenuItemBaseApplicationTag = 1000
92     };
93
94     enum ContextMenuItemType {
95         ActionType,
96         SeparatorType,
97         SubmenuType
98     };
99
100     class ContextMenuItem : Noncopyable {
101     public:
102         ContextMenuItem(PlatformMenuItemDescription, ContextMenu*);
103
104         ContextMenuItem(ContextMenu* menu = 0)
105             : m_menu(menu)
106             , m_platformDescription(0)
107             , m_type(SeparatorType)
108             , m_action(ContextMenuItemTagNoAction)
109             , m_title(String())
110         {
111         }
112
113         ContextMenuItem(ContextMenuItemType type, ContextMenuAction action, const String& title, ContextMenu* menu = 0)
114             : m_menu(menu)
115             , m_platformDescription(0)
116             , m_type(type)
117             , m_action(action)
118             , m_title(title)
119         {
120         }
121
122         ~ContextMenuItem();
123
124         ContextMenu* menu() const { return m_menu; }
125         const PlatformMenuItemDescription platformDescription() const { return m_platformDescription; }
126         ContextMenuItemType type() const { return m_type; }
127         ContextMenuAction action() const { return m_action; }
128         String title() const { return m_title; }
129
130         // FIXME: Need to support submenus (perhaps a Vector<ContextMenuItem>*?)
131         // FIXME: Do we need a keyboard accelerator here?
132
133     private:
134         ContextMenu* m_menu;
135         PlatformMenuItemDescription m_platformDescription;
136         ContextMenuItemType m_type;
137         ContextMenuAction m_action;
138         String m_title;
139     };
140
141 }
142
143 #endif // ContextMenuItem_h