2 * Copyright (C) 2006 Apple Computer, Inc. All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
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.
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.
29 #include "HitTestResult.h"
30 #include "PlatformString.h"
34 @class NSMutableArray;
39 typedef struct HMENU__* HMENU;
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,
81 enum ContextMenuItemType {
87 struct ContextMenuItem {
90 , action(ContextMenuItemTagNoAction)
95 ContextMenuItem(ContextMenuItemType theType, ContextMenuAction theAction, const String& theTitle)
102 // FIXME: Need to support submenus (perhaps a Vector<ContextMenuItem>*?)
103 // FIXME: Do we need a keyboard accelerator here?
105 ContextMenuItemType type;
106 ContextMenuAction action;
111 typedef NSMutableArray* PlatformMenuDescription;
113 typedef HMENU PlatformMenuDescription;
116 class ContextMenu : Noncopyable
119 ContextMenu(HitTestResult result)
120 : m_hitTestResult(result)
127 // FIXME: Implement these
131 void insertItem(unsigned position, ContextMenuItem);
132 void appendItem(ContextMenuItem item);
134 unsigned itemCount();
136 HitTestResult hitTestResult() const { return m_hitTestResult; }
138 PlatformMenuDescription platformMenuDescription() { return m_menu; }
139 void setPlatformMenuDescription(PlatformMenuDescription menu);
142 HitTestResult m_hitTestResult;
143 PlatformMenuDescription m_menu;
148 #endif // ContextMenu_h