]> git.saurik.com Git - wxWidgets.git/blob - include/wx/frame.h
Account for largest item in wxGenericListCtrl::GetBestSize().
[wxWidgets.git] / include / wx / frame.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: wx/frame.h
3 // Purpose: wxFrame class interface
4 // Author: Vadim Zeitlin
5 // Modified by:
6 // Created: 15.11.99
7 // RCS-ID: $Id$
8 // Copyright: (c) wxWidgets team
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
11
12 #ifndef _WX_FRAME_H_BASE_
13 #define _WX_FRAME_H_BASE_
14
15 // ----------------------------------------------------------------------------
16 // headers
17 // ----------------------------------------------------------------------------
18
19 #include "wx/toplevel.h" // the base class
20 #include "wx/statusbr.h"
21
22 // the default names for various classs
23 extern WXDLLIMPEXP_DATA_CORE(const char) wxStatusLineNameStr[];
24 extern WXDLLIMPEXP_DATA_CORE(const char) wxToolBarNameStr[];
25
26 class WXDLLIMPEXP_FWD_CORE wxFrame;
27 class WXDLLIMPEXP_FWD_CORE wxMenuBar;
28 class WXDLLIMPEXP_FWD_CORE wxMenuItem;
29 class WXDLLIMPEXP_FWD_CORE wxStatusBar;
30 class WXDLLIMPEXP_FWD_CORE wxToolBar;
31
32 // ----------------------------------------------------------------------------
33 // constants
34 // ----------------------------------------------------------------------------
35
36 // wxFrame-specific (i.e. not for wxDialog) styles
37 //
38 // Also see the bit summary table in wx/toplevel.h.
39 #define wxFRAME_NO_TASKBAR 0x0002 // No taskbar button (MSW only)
40 #define wxFRAME_TOOL_WINDOW 0x0004 // No taskbar button, no system menu
41 #define wxFRAME_FLOAT_ON_PARENT 0x0008 // Always above its parent
42 #define wxFRAME_SHAPED 0x0010 // Create a window that is able to be shaped
43
44 // ----------------------------------------------------------------------------
45 // wxFrame is a top-level window with optional menubar, statusbar and toolbar
46 //
47 // For each of *bars, a frame may have several of them, but only one is
48 // managed by the frame, i.e. resized/moved when the frame is and whose size
49 // is accounted for in client size calculations - all others should be taken
50 // care of manually. The CreateXXXBar() functions create this, main, XXXBar,
51 // but the actual creation is done in OnCreateXXXBar() functions which may be
52 // overridden to create custom objects instead of standard ones when
53 // CreateXXXBar() is called.
54 // ----------------------------------------------------------------------------
55
56 class WXDLLIMPEXP_CORE wxFrameBase : public wxTopLevelWindow
57 {
58 public:
59 // construction
60 wxFrameBase();
61 virtual ~wxFrameBase();
62
63 wxFrame *New(wxWindow *parent,
64 wxWindowID winid,
65 const wxString& title,
66 const wxPoint& pos = wxDefaultPosition,
67 const wxSize& size = wxDefaultSize,
68 long style = wxDEFAULT_FRAME_STYLE,
69 const wxString& name = wxFrameNameStr);
70
71 // frame state
72 // -----------
73
74 // get the origin of the client area (which may be different from (0, 0)
75 // if the frame has a toolbar) in client coordinates
76 virtual wxPoint GetClientAreaOrigin() const;
77
78
79 // menu bar functions
80 // ------------------
81
82 #if wxUSE_MENUS
83 virtual void SetMenuBar(wxMenuBar *menubar);
84 virtual wxMenuBar *GetMenuBar() const { return m_frameMenuBar; }
85
86 // find the item by id in the frame menu bar: this is an internal function
87 // and exists mainly in order to be overridden in the MDI parent frame
88 // which also looks at its active child menu bar
89 virtual wxMenuItem *FindItemInMenuBar(int menuId) const;
90
91 // generate menu command corresponding to the given menu item
92 //
93 // returns true if processed
94 bool ProcessCommand(wxMenuItem *item);
95
96 // generate menu command corresponding to the given menu command id
97 //
98 // returns true if processed
99 bool ProcessCommand(int winid);
100 #else
101 bool ProcessCommand(int WXUNUSED(winid)) { return false; }
102 #endif // wxUSE_MENUS
103
104 // status bar functions
105 // --------------------
106 #if wxUSE_STATUSBAR
107 // create the main status bar by calling OnCreateStatusBar()
108 virtual wxStatusBar* CreateStatusBar(int number = 1,
109 long style = wxSTB_DEFAULT_STYLE,
110 wxWindowID winid = 0,
111 const wxString& name = wxStatusLineNameStr);
112 // return a new status bar
113 virtual wxStatusBar *OnCreateStatusBar(int number,
114 long style,
115 wxWindowID winid,
116 const wxString& name);
117 // get the main status bar
118 virtual wxStatusBar *GetStatusBar() const { return m_frameStatusBar; }
119
120 // sets the main status bar
121 virtual void SetStatusBar(wxStatusBar *statBar);
122
123 // forward these to status bar
124 virtual void SetStatusText(const wxString &text, int number = 0);
125 virtual void SetStatusWidths(int n, const int widths_field[]);
126 void PushStatusText(const wxString &text, int number = 0);
127 void PopStatusText(int number = 0);
128
129 // set the status bar pane the help will be shown in
130 void SetStatusBarPane(int n) { m_statusBarPane = n; }
131 int GetStatusBarPane() const { return m_statusBarPane; }
132 #endif // wxUSE_STATUSBAR
133
134 // toolbar functions
135 // -----------------
136
137 #if wxUSE_TOOLBAR
138 // create main toolbar bycalling OnCreateToolBar()
139 virtual wxToolBar* CreateToolBar(long style = -1,
140 wxWindowID winid = wxID_ANY,
141 const wxString& name = wxToolBarNameStr);
142 // return a new toolbar
143 virtual wxToolBar *OnCreateToolBar(long style,
144 wxWindowID winid,
145 const wxString& name );
146
147 // get/set the main toolbar
148 virtual wxToolBar *GetToolBar() const { return m_frameToolBar; }
149 virtual void SetToolBar(wxToolBar *toolbar);
150 #endif // wxUSE_TOOLBAR
151
152 // implementation only from now on
153 // -------------------------------
154
155 // event handlers
156 #if wxUSE_MENUS
157 #if wxUSE_STATUSBAR
158 void OnMenuOpen(wxMenuEvent& event);
159 void OnMenuClose(wxMenuEvent& event);
160 void OnMenuHighlight(wxMenuEvent& event);
161 #endif // wxUSE_STATUSBAR
162
163 // send wxUpdateUIEvents for all menu items in the menubar,
164 // or just for menu if non-NULL
165 virtual void DoMenuUpdates(wxMenu* menu = NULL);
166 #endif // wxUSE_MENUS
167
168 // do the UI update processing for this window
169 virtual void UpdateWindowUI(long flags = wxUPDATE_UI_NONE);
170
171 // Implement internal behaviour (menu updating on some platforms)
172 virtual void OnInternalIdle();
173
174 #if wxUSE_MENUS || wxUSE_TOOLBAR
175 // show help text for the currently selected menu or toolbar item
176 // (typically in the status bar) or hide it and restore the status bar text
177 // originally shown before the menu was opened if show == false
178 virtual void DoGiveHelp(const wxString& text, bool show);
179 #endif
180
181 virtual bool IsClientAreaChild(const wxWindow *child) const
182 {
183 return !IsOneOfBars(child) && wxTopLevelWindow::IsClientAreaChild(child);
184 }
185
186 protected:
187 // the frame main menu/status/tool bars
188 // ------------------------------------
189
190 // this (non virtual!) function should be called from dtor to delete the
191 // main menubar, statusbar and toolbar (if any)
192 void DeleteAllBars();
193
194 // test whether this window makes part of the frame
195 virtual bool IsOneOfBars(const wxWindow *win) const;
196
197 #if wxUSE_MENUS
198 // override to update menu bar position when the frame size changes
199 virtual void PositionMenuBar() { }
200
201 // override to do something special when the menu bar is being removed
202 // from the frame
203 virtual void DetachMenuBar();
204
205 // override to do something special when the menu bar is attached to the
206 // frame
207 virtual void AttachMenuBar(wxMenuBar *menubar);
208
209 wxMenuBar *m_frameMenuBar;
210 #endif // wxUSE_MENUS
211
212 #if wxUSE_STATUSBAR && (wxUSE_MENUS || wxUSE_TOOLBAR)
213 // the saved status bar text overwritten by DoGiveHelp()
214 wxString m_oldStatusText;
215
216 // the last help string we have shown in the status bar
217 wxString m_lastHelpShown;
218 #endif
219
220 #if wxUSE_STATUSBAR
221 // override to update status bar position (or anything else) when
222 // something changes
223 virtual void PositionStatusBar() { }
224
225 // show the help string for the given menu item using DoGiveHelp() if the
226 // given item does have a help string (as determined by FindInMenuBar()),
227 // return false if there is no help for such item
228 bool ShowMenuHelp(int helpid);
229
230 wxStatusBar *m_frameStatusBar;
231 #endif // wxUSE_STATUSBAR
232
233
234 int m_statusBarPane;
235
236 #if wxUSE_TOOLBAR
237 // override to update status bar position (or anything else) when
238 // something changes
239 virtual void PositionToolBar() { }
240
241 wxToolBar *m_frameToolBar;
242 #endif // wxUSE_TOOLBAR
243
244 #if wxUSE_MENUS && wxUSE_STATUSBAR
245 DECLARE_EVENT_TABLE()
246 #endif // wxUSE_MENUS && wxUSE_STATUSBAR
247
248 wxDECLARE_NO_COPY_CLASS(wxFrameBase);
249 };
250
251 // include the real class declaration
252 #if defined(__WXUNIVERSAL__) // && !defined(__WXMICROWIN__)
253 #include "wx/univ/frame.h"
254 #else // !__WXUNIVERSAL__
255 #if defined(__WXPALMOS__)
256 #include "wx/palmos/frame.h"
257 #elif defined(__WXMSW__)
258 #include "wx/msw/frame.h"
259 #elif defined(__WXGTK20__)
260 #include "wx/gtk/frame.h"
261 #elif defined(__WXGTK__)
262 #include "wx/gtk1/frame.h"
263 #elif defined(__WXMOTIF__)
264 #include "wx/motif/frame.h"
265 #elif defined(__WXMAC__)
266 #include "wx/osx/frame.h"
267 #elif defined(__WXCOCOA__)
268 #include "wx/cocoa/frame.h"
269 #elif defined(__WXPM__)
270 #include "wx/os2/frame.h"
271 #endif
272 #endif
273
274 #endif
275 // _WX_FRAME_H_BASE_