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 WebMenuItemTagNoAction=0, // This item is not actually in WebUIDelegate.h
47 WebMenuItemTagOpenLinkInNewWindow=1,
48 WebMenuItemTagDownloadLinkToDisk,
49 WebMenuItemTagCopyLinkToClipboard,
50 WebMenuItemTagOpenImageInNewWindow,
51 WebMenuItemTagDownloadImageToDisk,
52 WebMenuItemTagCopyImageToClipboard,
53 WebMenuItemTagOpenFrameInNewWindow,
56 WebMenuItemTagGoForward,
61 WebMenuItemTagSpellingGuess,
62 WebMenuItemTagNoGuessesFound,
63 WebMenuItemTagIgnoreSpelling,
64 WebMenuItemTagLearnSpelling,
66 WebMenuItemTagSearchInSpotlight,
67 WebMenuItemTagSearchWeb,
68 WebMenuItemTagLookUpInDictionary,
69 WebMenuItemTagOpenWithDefaultApplication,
70 WebMenuItemPDFActualSize,
72 WebMenuItemPDFZoomOut,
73 WebMenuItemPDFAutoSize,
74 WebMenuItemPDFSinglePage,
75 WebMenuItemPDFFacingPages,
76 WebMenuItemPDFContinuous,
77 WebMenuItemPDFNextPage,
78 WebMenuItemPDFPreviousPage,
81 enum ContextMenuItemType {
87 struct ContextMenuItem {
90 , action(WebMenuItemTagNoAction)
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