RS by Geoff.
[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 disconnectMenuList() { m_menuList = 0; }
51
52     void clear();
53     void populate();
54     void show(const IntRect&, FrameView*, int index);
55     void hide();
56     
57     bool up();
58     bool down();
59     
60     bool wasClicked() const { return m_wasClicked; }
61     void setWasClicked(bool b) { m_wasClicked = b; }
62
63     int focusedIndex() const;
64     
65     RenderMenuList* menuList() { return m_menuList; }
66
67 #if PLATFORM(WIN)
68     HWND popupHandle() const { return m_popup; }
69 #endif
70
71 protected:
72     void addItems();
73     void addSeparator();
74     void addGroupLabel(HTMLOptGroupElement*);
75     void addOption(HTMLOptionElement*);
76
77     void setPositionAndSize(const IntRect&, FrameView*);
78     
79  private:
80     PopupMenu(RenderMenuList* menuList);
81     
82     RenderMenuList* m_menuList;
83     bool m_wasClicked;
84     
85 #if PLATFORM(MAC)
86     NSPopUpButtonCell* popup;
87 #elif PLATFORM(WIN)
88     HWND m_popup;
89     HWND m_container;
90 #endif
91 };
92
93 }
94
95 #endif