Build fix.
[WebKit-https.git] / WebCore / platform / ContextMenu.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 ContextMenu_h
27 #define ContextMenu_h
28
29 #include "HitTestResult.h"
30 #include "PlatformString.h"
31
32 #if PLATFORM(MAC)
33 #ifdef __OBJC__
34 @class NSMutableArray;
35 #else
36 class NSMutableArray;
37 #endif
38 #elif PLATFORM(WIN)
39 typedef struct HMENU__* HMENU;
40 #endif
41
42 namespace WebCore {
43
44 // This enum needs to be in sync with WebMenuItemTag, which is defined in WebUIDelegate.h
45 enum ContextMenuAction {
46     ContextMenuItemTagNoAction=0, // This item is not actually in WebUIDelegate.h
47     ContextMenuItemTagOpenLinkInNewWindow=1,
48     ContextMenuItemTagDownloadLinkToDisk,
49     ContextMenuItemTagCopyLinkToClipboard,
50     ContextMenuItemTagOpenImageInNewWindow,
51     ContextMenuItemTagDownloadImageToDisk,
52     ContextMenuItemTagCopyImageToClipboard,
53     ContextMenuItemTagOpenFrameInNewWindow,
54     ContextMenuItemTagCopy,
55     ContextMenuItemTagGoBack,
56     ContextMenuItemTagGoForward,
57     ContextMenuItemTagStop,
58     ContextMenuItemTagReload,
59     ContextMenuItemTagCut,
60     ContextMenuItemTagPaste,
61     ContextMenuItemTagSpellingGuess,
62     ContextMenuItemTagNoGuessesFound,
63     ContextMenuItemTagIgnoreSpelling,
64     ContextMenuItemTagLearnSpelling,
65     ContextMenuItemTagOther,
66     ContextMenuItemTagSearchInSpotlight,
67     ContextMenuItemTagSearchWeb,
68     ContextMenuItemTagLookUpInDictionary,
69     ContextMenuItemTagOpenWithDefaultApplication,
70     ContextMenuItemPDFActualSize,
71     ContextMenuItemPDFZoomIn,
72     ContextMenuItemPDFZoomOut,
73     ContextMenuItemPDFAutoSize,
74     ContextMenuItemPDFSinglePage,
75     ContextMenuItemPDFFacingPages,
76     ContextMenuItemPDFContinuous,
77     ContextMenuItemPDFNextPage,
78     ContextMenuItemPDFPreviousPage,
79 };
80
81 enum ContextMenuItemType {
82     ActionType,
83     SeparatorType,
84     SubmenuType
85 };
86
87 struct ContextMenuItem {
88     ContextMenuItem()
89         : type(SeparatorType)
90         , action(ContextMenuItemTagNoAction)
91         , title(String())
92     {
93     }
94
95     ContextMenuItem(ContextMenuItemType theType, ContextMenuAction theAction, const String& theTitle)
96         : type(theType)
97         , action(theAction)
98         , title(theTitle)
99     {
100     }
101
102     // FIXME: Need to support submenus (perhaps a Vector<ContextMenuItem>*?)
103     // FIXME: Do we need a keyboard accelerator here?
104
105     ContextMenuItemType type;
106     ContextMenuAction action;
107     String title;
108 };
109
110 #if PLATFORM(MAC)
111 typedef NSMutableArray* PlatformMenuDescription;
112 #elif PLATFORM(WIN)
113 typedef HMENU PlatformMenuDescription;
114 #endif
115
116 class ContextMenu : Noncopyable
117 {
118 public:
119     ContextMenu(HitTestResult result)
120         : m_hitTestResult(result)
121         , m_menu(0)
122     {
123     }
124
125     void populate();
126
127     // FIXME: Implement these
128     void show() {}
129     void hide() {}
130
131     void insertItem(unsigned position, ContextMenuItem);
132     void appendItem(ContextMenuItem item);
133
134     unsigned itemCount();
135
136     HitTestResult hitTestResult() const { return m_hitTestResult; }
137
138     PlatformMenuDescription platformMenuDescription() { return m_menu; }
139     void setPlatformMenuDescription(PlatformMenuDescription menu);
140
141 private:
142     HitTestResult m_hitTestResult;
143     PlatformMenuDescription m_menu;
144 };
145
146 }
147
148 #endif // ContextMenu_h