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: frame.h 49804 2007-11-10 01:09:42Z VZ $
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 
21 // the default names for various classs
22 extern WXDLLEXPORT_DATA(const wxChar) wxStatusLineNameStr[];
23 extern WXDLLEXPORT_DATA(const wxChar) wxToolBarNameStr[];
24 
25 class WXDLLIMPEXP_FWD_CORE wxFrame;
26 class WXDLLIMPEXP_FWD_CORE wxMenuBar;
27 class WXDLLIMPEXP_FWD_CORE wxStatusBar;
28 class WXDLLIMPEXP_FWD_CORE wxToolBar;
29 
30 // ----------------------------------------------------------------------------
31 // constants
32 // ----------------------------------------------------------------------------
33 
34 // wxFrame-specific (i.e. not for wxDialog) styles
35 #define wxFRAME_NO_TASKBAR      0x0002  // No taskbar button (MSW only)
36 #define wxFRAME_TOOL_WINDOW     0x0004  // No taskbar button, no system menu
37 #define wxFRAME_FLOAT_ON_PARENT 0x0008  // Always above its parent
38 #define wxFRAME_SHAPED          0x0010  // Create a window that is able to be shaped
39 
40 // ----------------------------------------------------------------------------
41 // wxFrame is a top-level window with optional menubar, statusbar and toolbar
42 //
43 // For each of *bars, a frame may have several of them, but only one is
44 // managed by the frame, i.e. resized/moved when the frame is and whose size
45 // is accounted for in client size calculations - all others should be taken
46 // care of manually. The CreateXXXBar() functions create this, main, XXXBar,
47 // but the actual creation is done in OnCreateXXXBar() functions which may be
48 // overridden to create custom objects instead of standard ones when
49 // CreateXXXBar() is called.
50 // ----------------------------------------------------------------------------
51 
52 class WXDLLEXPORT wxFrameBase : public wxTopLevelWindow
53 {
54 public:
55     // construction
56     wxFrameBase();
57     virtual ~wxFrameBase();
58 
59     wxFrame *New(wxWindow *parent,
60                  wxWindowID winid,
61                  const wxString& title,
62                  const wxPoint& pos = wxDefaultPosition,
63                  const wxSize& size = wxDefaultSize,
64                  long style = wxDEFAULT_FRAME_STYLE,
65                  const wxString& name = wxFrameNameStr);
66 
67     // frame state
68     // -----------
69 
70     // get the origin of the client area (which may be different from (0, 0)
71     // if the frame has a toolbar) in client coordinates
72     virtual wxPoint GetClientAreaOrigin() const;
73 
74     // sends a size event to the window using its current size -- this has an
75     // effect of refreshing the window layout
76     virtual void SendSizeEvent();
77 
78     // menu bar functions
79     // ------------------
80 
81 #if wxUSE_MENUS
82     virtual void SetMenuBar(wxMenuBar *menubar);
GetMenuBar()83     virtual wxMenuBar *GetMenuBar() const { return m_frameMenuBar; }
84 #endif // wxUSE_MENUS
85 
86     // process menu command: returns true if processed
87     bool ProcessCommand(int winid);
88 
89     // status bar functions
90     // --------------------
91 #if wxUSE_STATUSBAR
92     // create the main status bar by calling OnCreateStatusBar()
93     virtual wxStatusBar* CreateStatusBar(int number = 1,
94                                          long style = wxST_SIZEGRIP|wxFULL_REPAINT_ON_RESIZE,
95                                          wxWindowID winid = 0,
96                                          const wxString& name =
97                                             wxStatusLineNameStr);
98     // return a new status bar
99     virtual wxStatusBar *OnCreateStatusBar(int number,
100                                            long style,
101                                            wxWindowID winid,
102                                            const wxString& name);
103     // get the main status bar
GetStatusBar()104     virtual wxStatusBar *GetStatusBar() const { return m_frameStatusBar; }
105 
106     // sets the main status bar
107     virtual void SetStatusBar(wxStatusBar *statBar);
108 
109     // forward these to status bar
110     virtual void SetStatusText(const wxString &text, int number = 0);
111     virtual void SetStatusWidths(int n, const int widths_field[]);
112     void PushStatusText(const wxString &text, int number = 0);
113     void PopStatusText(int number = 0);
114 
115     // set the status bar pane the help will be shown in
SetStatusBarPane(int n)116     void SetStatusBarPane(int n) { m_statusBarPane = n; }
GetStatusBarPane()117     int GetStatusBarPane() const { return m_statusBarPane; }
118 #endif // wxUSE_STATUSBAR
119 
120     // toolbar functions
121     // -----------------
122 
123 #if wxUSE_TOOLBAR
124     // create main toolbar bycalling OnCreateToolBar()
125     virtual wxToolBar* CreateToolBar(long style = -1,
126                                      wxWindowID winid = wxID_ANY,
127                                      const wxString& name = wxToolBarNameStr);
128     // return a new toolbar
129     virtual wxToolBar *OnCreateToolBar(long style,
130                                        wxWindowID winid,
131                                        const wxString& name );
132 
133     // get/set the main toolbar
GetToolBar()134     virtual wxToolBar *GetToolBar() const { return m_frameToolBar; }
135     virtual void SetToolBar(wxToolBar *toolbar);
136 #endif // wxUSE_TOOLBAR
137 
138     // implementation only from now on
139     // -------------------------------
140 
141     // event handlers
142 #if wxUSE_MENUS
143 #if wxUSE_STATUSBAR
144     void OnMenuOpen(wxMenuEvent& event);
145     void OnMenuClose(wxMenuEvent& event);
146     void OnMenuHighlight(wxMenuEvent& event);
147 #endif // wxUSE_STATUSBAR
148 
149     // send wxUpdateUIEvents for all menu items in the menubar,
150     // or just for menu if non-NULL
151     virtual void DoMenuUpdates(wxMenu* menu = NULL);
152 #endif // wxUSE_MENUS
153 
154     // do the UI update processing for this window
155     virtual void UpdateWindowUI(long flags = wxUPDATE_UI_NONE);
156 
157     // Implement internal behaviour (menu updating on some platforms)
158     virtual void OnInternalIdle();
159 
160     // if there is no real wxTopLevelWindow on this platform we have to define
161     // some wxTopLevelWindowBase pure virtual functions here to avoid breaking
162     // old ports (wxMotif) which don't define them in wxFrame
163 #ifndef wxTopLevelWindowNative
WXUNUSED(show)164     virtual bool ShowFullScreen(bool WXUNUSED(show),
165                                 long WXUNUSED(style) = wxFULLSCREEN_ALL)
166         { return false; }
IsFullScreen()167     virtual bool IsFullScreen() const
168         { return false; }
169 #endif // no wxTopLevelWindowNative
170 
171 #if wxUSE_MENUS || wxUSE_TOOLBAR
172     // show help text (typically in the statusbar); show is false
173     // if you are hiding the help, true otherwise
174     virtual void DoGiveHelp(const wxString& text, bool show);
175 #endif
176 
177 protected:
178     // the frame main menu/status/tool bars
179     // ------------------------------------
180 
181     // this (non virtual!) function should be called from dtor to delete the
182     // main menubar, statusbar and toolbar (if any)
183     void DeleteAllBars();
184 
185     // test whether this window makes part of the frame
186     virtual bool IsOneOfBars(const wxWindow *win) const;
187 
188 #if wxUSE_MENUS
189     // override to update menu bar position when the frame size changes
PositionMenuBar()190     virtual void PositionMenuBar() { }
191 
192     // override to do something special when the menu bar is being removed
193     // from the frame
194     virtual void DetachMenuBar();
195 
196     // override to do something special when the menu bar is attached to the
197     // frame
198     virtual void AttachMenuBar(wxMenuBar *menubar);
199 
200     wxMenuBar *m_frameMenuBar;
201 #endif // wxUSE_MENUS
202 
203 #if wxUSE_STATUSBAR && (wxUSE_MENUS || wxUSE_TOOLBAR)
204     // the saved status bar text overwritten by DoGiveHelp()
205     wxString m_oldStatusText;
206 #endif
207 
208 #if wxUSE_STATUSBAR
209     // override to update status bar position (or anything else) when
210     // something changes
PositionStatusBar()211     virtual void PositionStatusBar() { }
212 
213     // show the help string for this menu item in the given status bar: the
214     // status bar pointer can be NULL; return true if help was shown
215     bool ShowMenuHelp(wxStatusBar *statbar, int helpid);
216 
217     wxStatusBar *m_frameStatusBar;
218 #endif // wxUSE_STATUSBAR
219 
220 
221     int m_statusBarPane;
222 
223 #if wxUSE_TOOLBAR
224     // override to update status bar position (or anything else) when
225     // something changes
PositionToolBar()226     virtual void PositionToolBar() { }
227 
228     wxToolBar *m_frameToolBar;
229 #endif // wxUSE_TOOLBAR
230 
231 #if wxUSE_MENUS && wxUSE_STATUSBAR
232     DECLARE_EVENT_TABLE()
233 #endif // wxUSE_MENUS && wxUSE_STATUSBAR
234 
235     DECLARE_NO_COPY_CLASS(wxFrameBase)
236 };
237 
238 // include the real class declaration
239 #if defined(__WXUNIVERSAL__) // && !defined(__WXMICROWIN__)
240     #include "wx/univ/frame.h"
241 #else // !__WXUNIVERSAL__
242     #if defined(__WXPALMOS__)
243         #include "wx/palmos/frame.h"
244     #elif defined(__WXMSW__)
245         #include "wx/msw/frame.h"
246     #elif defined(__WXGTK20__)
247         #include "wx/gtk/frame.h"
248     #elif defined(__WXGTK__)
249         #include "wx/gtk1/frame.h"
250     #elif defined(__WXMOTIF__)
251         #include "wx/motif/frame.h"
252     #elif defined(__WXMAC__)
253         #include "wx/mac/frame.h"
254     #elif defined(__WXCOCOA__)
255         #include "wx/cocoa/frame.h"
256     #elif defined(__WXPM__)
257         #include "wx/os2/frame.h"
258     #endif
259 #endif
260 
261 #endif
262     // _WX_FRAME_H_BASE_
263