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