Reviewed by Adele.
[WebKit-https.git] / WebCore / platform / PopupMenu.h
1 /*
2  * Copyright (C) 2006 Apple Computer, Inc.
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Library General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Library General Public License for more details.
13  *
14  * You should have received a copy of the GNU Library General Public License
15  * along with this library; see the file COPYING.LIB.  If not, write to
16  * the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17  * Boston, MA 02111-1307, USA.
18  *
19  */
20
21 #ifndef POPUPMENU_H
22 #define POPUPMENU_H
23
24 #include "Shared.h"
25 #include <wtf/PassRefPtr.h>
26
27 #if PLATFORM(MAC)
28 #ifdef __OBJC__
29 @class NSPopUpButtonCell;
30 #else
31 class NSPopUpButtonCell;
32 #endif
33 #elif PLATFORM(WIN)
34 typedef struct HWND__* HWND;
35 #endif
36
37 namespace WebCore {
38
39 class FrameView;
40 class IntRect;
41 class HTMLOptionElement;
42 class HTMLOptGroupElement;
43 class RenderMenuList;
44
45 class PopupMenu : public Shared<PopupMenu> {
46 public:
47     static PassRefPtr<PopupMenu> create(RenderMenuList* menuList);
48     ~PopupMenu();
49     
50     void clear();
51     void populate();
52     void show(const IntRect&, FrameView*, int index);
53     void hide();
54     
55     bool up();
56     bool down();
57     
58     bool wasClicked() const { return m_wasClicked; }
59     void setWasClicked(bool b) { m_wasClicked = b; }
60
61     int focusedIndex() const;
62     
63     RenderMenuList* menuList() { return m_menuList; }
64
65 #if PLATFORM(WIN)
66     HWND popupHandle() const { return m_popup; }
67 #endif
68
69 protected:
70     void addItems();
71     void addSeparator();
72     void addGroupLabel(HTMLOptGroupElement*);
73     void addOption(HTMLOptionElement*);
74
75     void setPositionAndSize(const IntRect&, FrameView*);
76     
77  private:
78     PopupMenu(RenderMenuList* menuList);
79     
80     RenderMenuList* m_menuList;
81     bool m_wasClicked;
82     
83 #if PLATFORM(MAC)
84     NSPopUpButtonCell* popup;
85 #elif PLATFORM(WIN)
86     HWND m_popup;
87     HWND m_container;
88 #endif
89 };
90
91 }
92
93 #endif