1 /////////////////////////////////////////////////////////////////////////////
2 // Name: wx/generic/mdig.h
3 // Purpose: Generic MDI (Multiple Document Interface) classes
4 // Author: Hans Van Leemputten
8 // Copyright: (c) Hans Van Leemputten
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
15 #if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
16 #pragma interface "mdig.h"
19 // ----------------------------------------------------------------------------
21 // ----------------------------------------------------------------------------
25 #include "wx/notebook.h"
27 WXDLLEXPORT_DATA(extern const wxChar
*) wxFrameNameStr
;
28 WXDLLEXPORT_DATA(extern const wxChar
*) wxStatusLineNameStr
;
31 //-----------------------------------------------------------------------------
33 //-----------------------------------------------------------------------------
35 class WXDLLEXPORT wxGenericMDIParentFrame
;
36 class WXDLLEXPORT wxGenericMDIClientWindow
;
37 class WXDLLEXPORT wxGenericMDIChildFrame
;
39 //-----------------------------------------------------------------------------
40 // wxGenericMDIParentFrame
41 //-----------------------------------------------------------------------------
43 class WXDLLEXPORT wxGenericMDIParentFrame
: public wxFrame
46 wxGenericMDIParentFrame();
47 wxGenericMDIParentFrame(wxWindow
*parent
,
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
);
55 ~wxGenericMDIParentFrame();
56 bool Create( wxWindow
*parent
,
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
);
65 wxMenu
* GetWindowMenu() const { return m_pWindowMenu
; };
66 void SetWindowMenu(wxMenu
* pMenu
);
68 virtual void SetMenuBar(wxMenuBar
*pMenuBar
);
71 void SetChildMenuBar(wxGenericMDIChildFrame
*pChild
);
73 virtual bool ProcessEvent(wxEvent
& event
);
75 wxGenericMDIChildFrame
*GetActiveChild() const;
76 inline void SetActiveChild(wxGenericMDIChildFrame
* pChildFrame
);
78 wxGenericMDIClientWindow
*GetClientWindow() const;
79 virtual wxGenericMDIClientWindow
*OnCreateClient();
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();
88 wxGenericMDIClientWindow
*m_pClientWindow
;
89 wxGenericMDIChildFrame
*m_pActiveChild
;
91 wxMenu
*m_pWindowMenu
;
92 wxMenuBar
*m_pMyMenuBar
;
99 void RemoveWindowMenu(wxMenuBar
*pMenuBar
);
100 void AddWindowMenu(wxMenuBar
*pMenuBar
);
102 void DoHandleMenu(wxCommandEvent
&event
);
103 #endif // wxUSE_MENUS
105 virtual void DoGetClientSize(int *width
, int *height
) const;
108 DECLARE_EVENT_TABLE()
109 DECLARE_DYNAMIC_CLASS(wxGenericMDIParentFrame
)
112 //-----------------------------------------------------------------------------
113 // wxGenericMDIChildFrame
114 //-----------------------------------------------------------------------------
116 class WXDLLEXPORT wxGenericMDIChildFrame
: public wxPanel
119 wxGenericMDIChildFrame();
120 wxGenericMDIChildFrame( wxGenericMDIParentFrame
*parent
,
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
);
128 virtual ~wxGenericMDIChildFrame();
129 bool Create( wxGenericMDIParentFrame
*parent
,
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
);
138 virtual void SetMenuBar( wxMenuBar
*menu_bar
);
139 virtual wxMenuBar
*GetMenuBar() const;
140 #endif // wxUSE_MENUS
142 virtual void SetTitle(const wxString
& title
);
143 virtual wxString
GetTitle() const;
145 virtual void Activate();
149 virtual wxStatusBar
* CreateStatusBar( int WXUNUSED(number
) = 1,
150 long WXUNUSED(style
) = 1,
151 wxWindowID
WXUNUSED(winid
) = 1,
152 const wxString
& WXUNUSED(name
) = wxEmptyString
)
153 { return (wxStatusBar
*)NULL
; }
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
)[] ) {}
161 virtual void SetSizeHints( int WXUNUSED(minW
),
163 int WXUNUSED(maxW
) = wxDefaultCoord
,
164 int WXUNUSED(maxH
) = wxDefaultCoord
,
165 int WXUNUSED(incW
) = wxDefaultCoord
,
166 int WXUNUSED(incH
) = wxDefaultCoord
) {}
170 virtual wxToolBar
* CreateToolBar( long WXUNUSED(style
),
171 wxWindowID
WXUNUSED(winid
),
172 const wxString
& WXUNUSED(name
) )
173 { return (wxToolBar
*)NULL
; }
174 virtual wxToolBar
*GetToolBar() const { return (wxToolBar
*)NULL
; }
178 void SetIcon( const wxIcon
& WXUNUSED(icon
) ) { }
179 void SetIcons( const wxIconBundle
& WXUNUSED(icons
) ) { }
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; }
190 virtual bool IsTopLevel() const { return false; }
192 void OnMenuHighlight(wxMenuEvent
& event
);
193 void OnActivate(wxActivateEvent
& event
);
195 // The next 2 are copied from top level...
196 void OnCloseWindow(wxCloseEvent
& event
);
197 void OnSize(wxSizeEvent
& event
);
199 void SetMDIParentFrame(wxGenericMDIParentFrame
* parentFrame
);
200 wxGenericMDIParentFrame
* GetMDIParentFrame() const;
203 wxGenericMDIParentFrame
*m_pMDIParentFrame
;
208 wxMenuBar
*m_pMenuBar
;
209 #endif // wxUSE_MENUS
214 virtual void DoMoveWindow(int x
, int y
, int width
, int height
);
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();
222 DECLARE_DYNAMIC_CLASS(wxGenericMDIChildFrame
)
223 DECLARE_EVENT_TABLE()
225 friend class wxGenericMDIClientWindow
;
228 //-----------------------------------------------------------------------------
229 // wxGenericMDIClientWindow
230 //-----------------------------------------------------------------------------
232 class WXDLLEXPORT wxGenericMDIClientWindow
: public wxNotebook
235 wxGenericMDIClientWindow();
236 wxGenericMDIClientWindow( wxGenericMDIParentFrame
*parent
, long style
= 0 );
237 ~wxGenericMDIClientWindow();
238 virtual bool CreateClient( wxGenericMDIParentFrame
*parent
, long style
= wxVSCROLL
| wxHSCROLL
);
240 virtual int SetSelection(size_t nPage
);
243 void PageChanged(int OldSelection
, int newSelection
);
245 void OnPageChanged(wxNotebookEvent
& event
);
246 void OnSize(wxSizeEvent
& event
);
249 DECLARE_DYNAMIC_CLASS(wxGenericMDIClientWindow
)
250 DECLARE_EVENT_TABLE()
255 * Define normal wxMDI classes based on wxGenericMDI
258 #ifndef wxUSE_GENERIC_MDI_AS_NATIVE
259 #if defined(__WXUNIVERSAL__) || defined(__WXPM__) || defined(__WXCOCOA__)
260 #define wxUSE_GENERIC_MDI_AS_NATIVE 1
262 #define wxUSE_GENERIC_MDI_AS_NATIVE 0
264 #endif // wxUSE_GENERIC_MDI_AS_NATIVE
266 #if wxUSE_GENERIC_MDI_AS_NATIVE
268 class wxMDIChildFrame
;
270 //-----------------------------------------------------------------------------
272 //-----------------------------------------------------------------------------
274 class WXDLLEXPORT wxMDIParentFrame
: public wxGenericMDIParentFrame
277 wxMDIParentFrame() {}
278 wxMDIParentFrame(wxWindow
*parent
,
280 const wxString
& title
,
281 const wxPoint
& pos
= wxDefaultPosition
,
282 const wxSize
& size
= wxDefaultSize
,
283 long style
= wxDEFAULT_FRAME_STYLE
| wxVSCROLL
| wxHSCROLL
,
284 const wxString
& name
= wxFrameNameStr
)
285 :wxGenericMDIParentFrame(parent
, winid
, title
, pos
, size
, style
, name
)
289 wxMDIChildFrame
* GetActiveChild() const ;
293 DECLARE_DYNAMIC_CLASS(wxMDIParentFrame
)
296 //-----------------------------------------------------------------------------
298 //-----------------------------------------------------------------------------
300 class WXDLLEXPORT wxMDIChildFrame
: public wxGenericMDIChildFrame
305 wxMDIChildFrame( wxGenericMDIParentFrame
*parent
,
307 const wxString
& title
,
308 const wxPoint
& pos
= wxDefaultPosition
,
309 const wxSize
& size
= wxDefaultSize
,
310 long style
= wxDEFAULT_FRAME_STYLE
,
311 const wxString
& name
= wxFrameNameStr
)
312 :wxGenericMDIChildFrame(parent
, winid
, title
, pos
, size
, style
, name
)
316 DECLARE_DYNAMIC_CLASS(wxMDIChildFrame
)
319 //-----------------------------------------------------------------------------
321 //-----------------------------------------------------------------------------
323 class WXDLLEXPORT wxMDIClientWindow
: public wxGenericMDIClientWindow
326 wxMDIClientWindow() {}
328 wxMDIClientWindow( wxGenericMDIParentFrame
*parent
, long style
= 0 )
329 :wxGenericMDIClientWindow(parent
, style
)
334 DECLARE_DYNAMIC_CLASS(wxMDIClientWindow
)