Git init
[framework/web/webkit-efl.git] / Source / 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 <wtf/Noncopyable.h>
30
31 #include "ContextMenuItem.h"
32 #include "PlatformMenuDescription.h"
33 #include "PlatformString.h"
34 #if PLATFORM(MAC)
35 #include <wtf/RetainPtr.h>
36 #elif PLATFORM(QT)
37 #include <QMenu>
38 #endif
39
40 #if ENABLE(TIZEN_CONTEXT_MENU)
41 #include "HitTestResult.h"
42 #endif
43
44 namespace WebCore {
45
46     class ContextMenuController;
47 #if PLATFORM(EFL) && ENABLE(TIZEN_CONTEXT_MENU)
48     class ContextMenuClientEfl;
49 #endif
50
51     class ContextMenu {
52         WTF_MAKE_NONCOPYABLE(ContextMenu); WTF_MAKE_FAST_ALLOCATED;
53     public:
54         ContextMenu();
55
56         ContextMenuItem* itemWithAction(unsigned);
57
58 #if USE(CROSS_PLATFORM_CONTEXT_MENUS)
59 #if PLATFORM(WIN)
60         typedef HMENU NativeMenu;
61 #elif PLATFORM(EFL)
62         typedef void* NativeMenu;
63 #endif
64         explicit ContextMenu(NativeMenu);
65
66         NativeMenu nativeMenu() const;
67
68         static NativeMenu createNativeMenuFromItems(const Vector<ContextMenuItem>&);
69         static void getContextMenuItems(NativeMenu, Vector<ContextMenuItem>&);
70
71         // FIXME: When more platforms switch over, this should return const ContextMenuItem*'s.
72         ContextMenuItem* itemAtIndex(unsigned index) { return &m_items[index]; }
73
74         void setItems(const Vector<ContextMenuItem>& items) { m_items = items; }
75         const Vector<ContextMenuItem>& items() const { return m_items; }
76
77         void appendItem(const ContextMenuItem& item) { m_items.append(item); } 
78 #else
79         ContextMenu(const PlatformMenuDescription);
80         ~ContextMenu();
81
82         void insertItem(unsigned position, ContextMenuItem&);
83         void appendItem(ContextMenuItem&);
84
85         ContextMenuItem* itemAtIndex(unsigned, const PlatformMenuDescription);
86
87         unsigned itemCount() const;
88
89         PlatformMenuDescription platformDescription() const;
90         void setPlatformDescription(PlatformMenuDescription);
91
92         PlatformMenuDescription releasePlatformDescription();
93 #if ENABLE(TIZEN_CONTEXT_MENU)
94         ContextMenu(const HitTestResult&);
95         ContextMenu(const HitTestResult&, const PlatformMenuDescription);
96
97         ContextMenuController* controller() const;
98         HitTestResult hitTestResult() const { return m_hitTestResult; }
99 #endif
100 #if PLATFORM(WX)
101         static ContextMenuItem* itemWithId(int);
102 #endif
103
104 #endif // USE(CROSS_PLATFORM_CONTEXT_MENUS)
105
106     private:
107 #if ENABLE(TIZEN_CONTEXT_MENU)
108        HitTestResult m_hitTestResult;
109        ContextMenuClientEfl* m_contextMenuClient;
110 #endif
111
112 #if USE(CROSS_PLATFORM_CONTEXT_MENUS)
113         Vector<ContextMenuItem> m_items;
114 #else
115 #if PLATFORM(MAC)
116         // Keep this in sync with the PlatformMenuDescription typedef
117         RetainPtr<NSMutableArray> m_platformDescription;
118 #elif PLATFORM(QT)
119         QList<ContextMenuItem> m_items;
120 #elif PLATFORM(CHROMIUM)
121         Vector<ContextMenuItem> m_items;
122 #else
123         PlatformMenuDescription m_platformDescription;
124 #if OS(WINCE)
125         unsigned m_itemCount;
126 #endif
127 #endif
128
129 #endif // USE(CROSS_PLATFORM_CONTEXT_MENUS)
130     };
131
132 #if !USE(CROSS_PLATFORM_CONTEXT_MENUS)
133 Vector<ContextMenuItem> contextMenuItemVector(PlatformMenuDescription);
134 PlatformMenuDescription platformMenuDescription(Vector<ContextMenuItem>&);
135 #endif
136
137 }
138
139 #endif // ContextMenu_h