1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: MDI (Multiple Document Interface) classes.
4 // Author: Julian Smart
8 // Copyright: (c) Julian Smart
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
15 #if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
16 #pragma interface "mdi.h"
20 New MDI scheme using tabs. We can use a wxNotebook to implement the client
21 window. wxMDIChildFrame can be implemented as an XmMainWindow widget
22 as before, and is a child of the notebook _and_ of the parent frame...
23 but wxMDIChildFrame::GetParent should return the parent frame.
28 #include "wx/notebook.h"
30 class WXDLLEXPORT wxMDIClientWindow
;
31 class WXDLLEXPORT wxMDIChildFrame
;
33 class WXDLLEXPORT wxMDIParentFrame
: public wxFrame
35 DECLARE_DYNAMIC_CLASS(wxMDIParentFrame
)
37 friend class WXDLLEXPORT wxMDIChildFrame
;
41 inline wxMDIParentFrame(wxWindow
*parent
,
43 const wxString
& title
,
44 const wxPoint
& pos
= wxDefaultPosition
,
45 const wxSize
& size
= wxDefaultSize
,
46 long style
= wxDEFAULT_FRAME_STYLE
| wxVSCROLL
| wxHSCROLL
, // Scrolling refers to client window
47 const wxString
& name
= wxFrameNameStr
)
49 Create(parent
, id
, title
, pos
, size
, style
, name
);
54 bool Create(wxWindow
*parent
,
56 const wxString
& title
,
57 const wxPoint
& pos
= wxDefaultPosition
,
58 const wxSize
& size
= wxDefaultSize
,
59 long style
= wxDEFAULT_FRAME_STYLE
| wxVSCROLL
| wxHSCROLL
,
60 const wxString
& name
= wxFrameNameStr
);
62 void OnSize(wxSizeEvent
& event
);
63 void OnActivate(wxActivateEvent
& event
);
64 void OnSysColourChanged(wxSysColourChangedEvent
& event
);
65 void OnMenuHighlight(wxMenuEvent
& event
);
67 void SetMenuBar(wxMenuBar
*menu_bar
);
69 // Get the active MDI child window
70 wxMDIChildFrame
*GetActiveChild() const ;
72 // Get the client window
73 wxMDIClientWindow
*GetClientWindow() const { return m_clientWindow
; };
75 // Create the client window class (don't Create the window,
76 // just return a new class)
77 virtual wxMDIClientWindow
*OnCreateClient() ;
80 virtual void Cascade();
81 virtual void Tile(wxOrientation
WXUNUSED(orient
) = wxHORIZONTAL
);
82 virtual void ArrangeIcons();
83 virtual void ActivateNext();
84 virtual void ActivatePrevious();
88 // Set the active child
89 inline void SetActiveChild(wxMDIChildFrame
* child
) { m_activeChild
= child
; }
91 // Set the child's menubar into the parent frame
92 void SetChildMenuBar(wxMDIChildFrame
* frame
);
94 inline wxMenuBar
* GetActiveMenuBar() const { return m_activeMenuBar
; }
96 // Redirect events to active child first
97 virtual bool ProcessEvent(wxEvent
& event
);
100 virtual void DoSetSize(int x
, int y
,
101 int width
, int height
,
102 int sizeFlags
= wxSIZE_AUTO
);
103 virtual void DoSetClientSize(int width
, int height
);
105 // Gets the size available for subwindows after menu size, toolbar size
106 // and status bar size have been subtracted. If you want to manage your own
107 // toolbar(s), don't call SetToolBar.
108 void DoGetClientSize(int *width
, int *height
) const;
112 wxMDIClientWindow
* m_clientWindow
;
113 wxMDIChildFrame
* m_activeChild
;
114 wxMenuBar
* m_activeMenuBar
;
116 DECLARE_EVENT_TABLE()
119 class WXDLLEXPORT wxMDIChildFrame
: public wxFrame
121 DECLARE_DYNAMIC_CLASS(wxMDIChildFrame
)
125 wxMDIChildFrame(wxMDIParentFrame
*parent
,
127 const wxString
& title
,
128 const wxPoint
& pos
= wxDefaultPosition
,
129 const wxSize
& size
= wxDefaultSize
,
130 long style
= wxDEFAULT_FRAME_STYLE
,
131 const wxString
& name
= wxFrameNameStr
)
133 Create(parent
, id
, title
, pos
, size
, style
, name
);
138 bool Create(wxMDIParentFrame
*parent
,
140 const wxString
& title
,
141 const wxPoint
& pos
= wxDefaultPosition
,
142 const wxSize
& size
= wxDefaultSize
,
143 long style
= wxDEFAULT_FRAME_STYLE
,
144 const wxString
& name
= wxFrameNameStr
);
147 void SetMenuBar(wxMenuBar
*menu_bar
);
148 void SetTitle(const wxString
& title
);
151 virtual void SetIcon(const wxIcon
& icon
);
152 virtual void SetIcons(const wxIconBundle
& icons
);
154 // Override wxFrame operations
159 void DoSetSizeHints(int minW
= -1, int minH
= -1, int maxW
= -1, int maxH
= -1, int incW
= -1, int incH
= -1);
162 virtual void Maximize();
163 virtual void Maximize(bool WXUNUSED(maximize
)) { };
164 inline void Minimize() { Iconize(true); };
165 virtual void Iconize(bool iconize
);
166 virtual void Restore();
167 virtual void Activate();
168 virtual bool IsIconized() const ;
170 virtual bool IsTopLevel() const { return false; }
172 // Is the frame maximized? Returns true for
173 // wxMDIChildFrame due to the tabbed implementation.
174 virtual bool IsMaximized(void) const ;
176 bool Show(bool show
);
178 WXWidget
GetMainWidget() const { return m_mainWidget
; };
179 WXWidget
GetTopWidget() const { return m_mainWidget
; };
180 WXWidget
GetClientWidget() const { return m_mainWidget
; };
183 virtual void OnRaise();
184 virtual void OnLower();
187 void SetMDIParentFrame(wxMDIParentFrame
* parentFrame
) { m_mdiParentFrame
= parentFrame
; }
188 wxMDIParentFrame
* GetMDIParentFrame() const { return m_mdiParentFrame
; }
191 wxMDIParentFrame
* m_mdiParentFrame
;
193 virtual void DoSetSize(int x
, int y
,
194 int width
, int height
,
195 int sizeFlags
= wxSIZE_AUTO
);
196 virtual void DoSetClientSize(int width
, int height
);
198 void DoGetClientSize(int *width
, int *height
) const;
199 void DoGetSize(int *width
, int *height
) const;
200 void DoGetPosition(int *x
, int *y
) const ;
203 /* The client window is a child of the parent MDI frame, and itself
204 * contains the child MDI frames.
205 * However, you create the MDI children as children of the MDI parent:
206 * only in the implementation does the client window become the parent
207 * of the children. Phew! So the children are sort of 'adopted'...
210 class WXDLLEXPORT wxMDIClientWindow
: public wxNotebook
212 DECLARE_DYNAMIC_CLASS(wxMDIClientWindow
)
215 wxMDIClientWindow() ;
216 wxMDIClientWindow(wxMDIParentFrame
*parent
, long style
= 0)
218 CreateClient(parent
, style
);
221 ~wxMDIClientWindow();
223 // Note: this is virtual, to allow overridden behaviour.
224 virtual bool CreateClient(wxMDIParentFrame
*parent
, long style
= wxVSCROLL
| wxHSCROLL
);
226 // Explicitly call default scroll behaviour
227 void OnScroll(wxScrollEvent
& event
);
230 void OnPageChanged(wxNotebookEvent
& event
);
232 int FindPage(const wxNotebookPage
* page
);
235 virtual void DoSetSize(int x
, int y
,
236 int width
, int height
,
237 int sizeFlags
= wxSIZE_AUTO
);
238 virtual void DoSetClientSize(int width
, int height
);
240 void DoGetClientSize(int *width
, int *height
) const;
241 void DoGetSize(int *width
, int *height
) const ;
242 void DoGetPosition(int *x
, int *y
) const ;
245 DECLARE_EVENT_TABLE()