]> git.saurik.com Git - wxWidgets.git/blob - include/wx/generic/mdig.h
The standalone PyShell and PyCrust apps need to set the focus to the
[wxWidgets.git] / include / wx / generic / mdig.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: wx/generic/mdig.h
3 // Purpose: Generic MDI (Multiple Document Interface) classes
4 // Author: Hans Van Leemputten
5 // Modified by:
6 // Created: 29/07/2002
7 // RCS-ID: $Id$
8 // Copyright: (c) Hans Van Leemputten
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
11
12 #ifndef _WX_MDIG_H_
13 #define _WX_MDIG_H_
14
15 #if defined(__GNUG__) && !defined(__APPLE__)
16 #pragma interface "mdig.h"
17 #endif
18
19 // ----------------------------------------------------------------------------
20 // headers
21 // ----------------------------------------------------------------------------
22
23 #include "wx/frame.h"
24 #include "wx/panel.h"
25 #include "wx/notebook.h"
26
27 WXDLLEXPORT_DATA(extern const wxChar*) wxFrameNameStr;
28 WXDLLEXPORT_DATA(extern const wxChar*) wxStatusLineNameStr;
29
30
31 //-----------------------------------------------------------------------------
32 // classes
33 //-----------------------------------------------------------------------------
34
35 class WXDLLEXPORT wxGenericMDIParentFrame;
36 class WXDLLEXPORT wxGenericMDIClientWindow;
37 class WXDLLEXPORT wxGenericMDIChildFrame;
38
39 //-----------------------------------------------------------------------------
40 // wxGenericMDIParentFrame
41 //-----------------------------------------------------------------------------
42
43 class WXDLLEXPORT wxGenericMDIParentFrame: public wxFrame
44 {
45 public:
46 wxGenericMDIParentFrame();
47 wxGenericMDIParentFrame(wxWindow *parent,
48 wxWindowID id,
49 const wxString& title,
50 const wxPoint& pos = wxDefaultPosition,
51 const wxSize& size = wxDefaultSize,
52 long style = wxDEFAULT_FRAME_STYLE | wxVSCROLL | wxHSCROLL,
53 const wxString& name = wxFrameNameStr);
54
55 ~wxGenericMDIParentFrame();
56 bool Create( wxWindow *parent,
57 wxWindowID id,
58 const wxString& title,
59 const wxPoint& pos = wxDefaultPosition,
60 const wxSize& size = wxDefaultSize,
61 long style = wxDEFAULT_FRAME_STYLE | wxVSCROLL | wxHSCROLL,
62 const wxString& name = wxFrameNameStr );
63
64 #if wxUSE_MENUS
65 wxMenu* GetWindowMenu() const { return m_pWindowMenu; };
66 void SetWindowMenu(wxMenu* pMenu);
67
68 virtual void SetMenuBar(wxMenuBar *pMenuBar);
69 #endif // wxUSE_MENUS
70
71 void SetChildMenuBar(wxGenericMDIChildFrame *pChild);
72
73 virtual bool ProcessEvent(wxEvent& event);
74
75 wxGenericMDIChildFrame *GetActiveChild() const;
76 inline void SetActiveChild(wxGenericMDIChildFrame* pChildFrame);
77
78 wxGenericMDIClientWindow *GetClientWindow() const;
79 virtual wxGenericMDIClientWindow *OnCreateClient();
80
81 virtual void Cascade() { /* Has no effect */ }
82 virtual void Tile() { /* Has no effect */ }
83 virtual void ArrangeIcons() { /* Has no effect */ }
84 virtual void ActivateNext();
85 virtual void ActivatePrevious();
86
87 protected:
88 wxGenericMDIClientWindow *m_pClientWindow;
89 wxGenericMDIChildFrame *m_pActiveChild;
90 #if wxUSE_MENUS
91 wxMenu *m_pWindowMenu;
92 wxMenuBar *m_pMyMenuBar;
93 #endif // wxUSE_MENUS
94
95 protected:
96 void Init();
97
98 #if wxUSE_MENUS
99 void RemoveWindowMenu(wxMenuBar *pMenuBar);
100 void AddWindowMenu(wxMenuBar *pMenuBar);
101
102 void DoHandleMenu(wxCommandEvent &event);
103 #endif // wxUSE_MENUS
104
105 virtual void DoGetClientSize(int *width, int *height) const;
106
107 private:
108 DECLARE_EVENT_TABLE()
109 DECLARE_DYNAMIC_CLASS(wxGenericMDIParentFrame)
110 };
111
112 //-----------------------------------------------------------------------------
113 // wxGenericMDIChildFrame
114 //-----------------------------------------------------------------------------
115
116 class WXDLLEXPORT wxGenericMDIChildFrame: public wxPanel
117 {
118 public:
119 wxGenericMDIChildFrame();
120 wxGenericMDIChildFrame( wxGenericMDIParentFrame *parent,
121 wxWindowID id,
122 const wxString& title,
123 const wxPoint& pos = wxDefaultPosition,
124 const wxSize& size = wxDefaultSize,
125 long style = wxDEFAULT_FRAME_STYLE,
126 const wxString& name = wxFrameNameStr );
127
128 virtual ~wxGenericMDIChildFrame();
129 bool Create( wxGenericMDIParentFrame *parent,
130 wxWindowID id,
131 const wxString& title,
132 const wxPoint& pos = wxDefaultPosition,
133 const wxSize& size = wxDefaultSize,
134 long style = wxDEFAULT_FRAME_STYLE,
135 const wxString& name = wxFrameNameStr );
136
137 #if wxUSE_MENUS
138 virtual void SetMenuBar( wxMenuBar *menu_bar );
139 virtual wxMenuBar *GetMenuBar() const;
140 #endif // wxUSE_MENUS
141
142 virtual void SetTitle(const wxString& title);
143 virtual wxString GetTitle();
144
145 virtual void Activate();
146
147 #if wxUSE_STATUSBAR
148 // no status bars
149 virtual wxStatusBar* CreateStatusBar( int WXUNUSED(number) = 1,
150 long WXUNUSED(style) = 1,
151 wxWindowID WXUNUSED(id) = 1,
152 const wxString& WXUNUSED(name) = wxEmptyString)
153 { return (wxStatusBar*)NULL; }
154
155 virtual wxStatusBar *GetStatusBar() const { return (wxStatusBar*)NULL; }
156 virtual void SetStatusText( const wxString &WXUNUSED(text), int WXUNUSED(number)=0 ) {}
157 virtual void SetStatusWidths( int WXUNUSED(n), const int WXUNUSED(widths_field)[] ) {}
158 #endif
159
160 // no size hints
161 virtual void SetSizeHints( int WXUNUSED(minW),
162 int WXUNUSED(minH),
163 int WXUNUSED(maxW) = -1,
164 int WXUNUSED(maxH) = -1,
165 int WXUNUSED(incW) = -1,
166 int WXUNUSED(incH) = -1) {}
167
168 #if wxUSE_TOOLBAR
169 // no toolbar bars
170 virtual wxToolBar* CreateToolBar( long WXUNUSED(style),
171 wxWindowID WXUNUSED(id),
172 const wxString& WXUNUSED(name) )
173 { return (wxToolBar*)NULL; }
174 virtual wxToolBar *GetToolBar() const { return (wxToolBar*)NULL; }
175 #endif
176
177 // no icon
178 void SetIcon( const wxIcon &icon ) { /*m_icons = wxIconBundle( icon );*/}
179 void SetIcons( const wxIconBundle &icons ) { /*m_icons = icons;*/ }
180
181 // no maximize etc
182 virtual void Maximize( bool WXUNUSED(maximize) = TRUE) { /* Has no effect */ }
183 virtual void Restore() { /* Has no effect */ }
184 virtual void Iconize(bool WXUNUSED(iconize) = TRUE) { /* Has no effect */ }
185 virtual bool IsMaximized() const { return TRUE; }
186 virtual bool IsIconized() const { return FALSE; }
187 virtual bool ShowFullScreen(bool WXUNUSED(show), long WXUNUSED(style)) { return FALSE; }
188 virtual bool IsFullScreen() const { return FALSE; }
189
190 virtual bool IsTopLevel() const { return FALSE; }
191
192 void OnMenuHighlight(wxMenuEvent& event);
193 void OnActivate(wxActivateEvent& event);
194
195 // The next 2 are copied from top level...
196 void OnCloseWindow(wxCloseEvent& event);
197 void OnSize(wxSizeEvent& event);
198
199 void SetMDIParentFrame(wxGenericMDIParentFrame* parentFrame);
200 wxGenericMDIParentFrame* GetMDIParentFrame() const;
201
202 protected:
203 wxGenericMDIParentFrame *m_pMDIParentFrame;
204 wxRect m_MDIRect;
205 wxString m_Title;
206
207 #if wxUSE_MENUS
208 wxMenuBar *m_pMenuBar;
209 #endif // wxUSE_MENUS
210
211 protected:
212 void Init();
213
214 virtual void DoMoveWindow(int x, int y, int width, int height);
215
216 // This function needs to be called when a size change is confirmed,
217 // we needed this function to prevent any body from the outside
218 // changing the panel... it messes the UI layout when we would allow it.
219 void ApplyMDIChildFrameRect();
220
221 private:
222 DECLARE_DYNAMIC_CLASS(wxGenericMDIChildFrame)
223 DECLARE_EVENT_TABLE()
224
225 friend class wxGenericMDIClientWindow;
226 };
227
228 //-----------------------------------------------------------------------------
229 // wxGenericMDIClientWindow
230 //-----------------------------------------------------------------------------
231
232 class WXDLLEXPORT wxGenericMDIClientWindow: public wxNotebook
233 {
234 public:
235 wxGenericMDIClientWindow();
236 wxGenericMDIClientWindow( wxGenericMDIParentFrame *parent, long style = 0 );
237 ~wxGenericMDIClientWindow();
238 virtual bool CreateClient( wxGenericMDIParentFrame *parent, long style = wxVSCROLL | wxHSCROLL );
239
240 virtual int SetSelection(int nPage);
241
242 protected:
243 void PageChanged(int OldSelection, int newSelection);
244
245 void OnPageChanged(wxNotebookEvent& event);
246 void OnSize(wxSizeEvent& event);
247
248 private:
249 DECLARE_DYNAMIC_CLASS(wxGenericMDIClientWindow)
250 DECLARE_EVENT_TABLE()
251 };
252
253
254 /*
255 * Define normal wxMDI classes based on wxGenericMDI
256 */
257
258 #ifndef wxUSE_GENERIC_MDI_AS_NATIVE
259 #if defined(__WXUNIVERSAL__)
260 #define wxUSE_GENERIC_MDI_AS_NATIVE 1
261 #else
262 #define wxUSE_GENERIC_MDI_AS_NATIVE 0
263 #endif
264 #endif // wxUSE_GENERIC_MDI_AS_NATIVE
265
266 #if wxUSE_GENERIC_MDI_AS_NATIVE
267
268 //-----------------------------------------------------------------------------
269 // wxMDIParentFrame
270 //-----------------------------------------------------------------------------
271
272 class WXDLLEXPORT wxMDIParentFrame: public wxGenericMDIParentFrame
273 {
274 public:
275 wxMDIParentFrame() {}
276 wxMDIParentFrame(wxWindow *parent,
277 wxWindowID id,
278 const wxString& title,
279 const wxPoint& pos = wxDefaultPosition,
280 const wxSize& size = wxDefaultSize,
281 long style = wxDEFAULT_FRAME_STYLE | wxVSCROLL | wxHSCROLL,
282 const wxString& name = wxFrameNameStr)
283 :wxGenericMDIParentFrame(parent, id, title, pos, size, style, name)
284 {
285 }
286
287 private:
288 DECLARE_DYNAMIC_CLASS(wxMDIParentFrame)
289 };
290
291 //-----------------------------------------------------------------------------
292 // wxMDIChildFrame
293 //-----------------------------------------------------------------------------
294
295 class WXDLLEXPORT wxMDIChildFrame: public wxGenericMDIChildFrame
296 {
297 public:
298 wxMDIChildFrame() {}
299
300 wxMDIChildFrame( wxGenericMDIParentFrame *parent,
301 wxWindowID id,
302 const wxString& title,
303 const wxPoint& pos = wxDefaultPosition,
304 const wxSize& size = wxDefaultSize,
305 long style = wxDEFAULT_FRAME_STYLE,
306 const wxString& name = wxFrameNameStr )
307 :wxGenericMDIChildFrame(parent, id, title, pos, size, style, name)
308 {
309 }
310
311 private:
312 DECLARE_DYNAMIC_CLASS(wxMDIChildFrame)
313 };
314
315 //-----------------------------------------------------------------------------
316 // wxMDIClientWindow
317 //-----------------------------------------------------------------------------
318
319 class WXDLLEXPORT wxMDIClientWindow: public wxGenericMDIClientWindow
320 {
321 public:
322 wxMDIClientWindow() {}
323
324 wxMDIClientWindow( wxGenericMDIParentFrame *parent, long style = 0 )
325 :wxGenericMDIClientWindow(parent, style)
326 {
327 }
328
329 private:
330 DECLARE_DYNAMIC_CLASS(wxMDIClientWindow)
331 };
332
333 #endif
334
335 #endif
336 // _WX_MDIG_H_