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