1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: MDI classes
8 // Copyright: (c) AUTHOR
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
13 #pragma implementation "mdi.h"
18 #include "wx/settings.h"
20 extern wxList wxModelessWindows
;
22 IMPLEMENT_DYNAMIC_CLASS(wxMDIParentFrame
, wxFrame
)
23 IMPLEMENT_DYNAMIC_CLASS(wxMDIChildFrame
, wxFrame
)
24 IMPLEMENT_DYNAMIC_CLASS(wxMDIClientWindow
, wxWindow
)
26 BEGIN_EVENT_TABLE(wxMDIParentFrame
, wxFrame
)
27 EVT_SIZE(wxMDIParentFrame
::OnSize
)
28 EVT_ACTIVATE(wxMDIParentFrame
::OnActivate
)
29 EVT_SYS_COLOUR_CHANGED(wxMDIParentFrame
::OnSysColourChanged
)
32 BEGIN_EVENT_TABLE(wxMDIClientWindow
, wxWindow
)
33 EVT_SCROLL(wxMDIClientWindow
::OnScroll
)
39 wxMDIParentFrame
::wxMDIParentFrame()
43 bool wxMDIParentFrame
::Create(wxWindow
*parent
,
45 const wxString
& title
,
52 wxTopLevelWindows
.Append(this);
55 m_windowStyle
= style
;
57 if (parent
) parent
->AddChild(this);
62 m_windowId
= (int)NewControlId();
64 // TODO: create MDI parent frame
66 wxModelessWindows
.Append(this);
71 wxMDIParentFrame
::~wxMDIParentFrame()
75 // Get size *available for subwindows* i.e. excluding menu bar.
76 void wxMDIParentFrame
::DoGetClientSize(int *x
, int *y
) const
78 wxFrame
::DoGetClientSize( x
, y
) ;
81 void wxMDIParentFrame
::SetMenuBar(wxMenuBar
*menu_bar
)
83 wxFrame
::SetMenuBar( menu_bar
) ;
86 void wxMDIParentFrame
::OnSize(wxSizeEvent
& event
)
95 GetClientSize(&width
, &height
);
97 if ( GetClientWindow() )
98 GetClientWindow()->SetSize(x
, y
, width
, height
);
101 void wxMDIParentFrame
::OnActivate(wxActivateEvent
& event
)
106 // Returns the active MDI child window
107 wxMDIChildFrame
*wxMDIParentFrame
::GetActiveChild() const
113 // Create the client window class (don't Create the window,
114 // just return a new class)
115 wxMDIClientWindow
*wxMDIParentFrame
::OnCreateClient()
117 return new wxMDIClientWindow
;
120 // Responds to colour changes, and passes event on to children.
121 void wxMDIParentFrame
::OnSysColourChanged(wxSysColourChangedEvent
& event
)
125 // Propagate the event to the non-top-level children
126 wxFrame
::OnSysColourChanged(event
);
130 void wxMDIParentFrame
::Cascade()
135 void wxMDIParentFrame
::Tile()
140 void wxMDIParentFrame
::ArrangeIcons()
145 void wxMDIParentFrame
::ActivateNext()
150 void wxMDIParentFrame
::ActivatePrevious()
157 wxMDIChildFrame
::wxMDIChildFrame()
161 bool wxMDIChildFrame
::Create(wxMDIParentFrame
*parent
,
163 const wxString
& title
,
167 const wxString
& name
)
174 m_windowId
= (int)NewControlId();
176 if (parent
) parent
->AddChild(this);
178 // TODO: create child frame
180 wxModelessWindows
.Append(this);
184 wxMDIChildFrame
::~wxMDIChildFrame()
188 // Set the client size (i.e. leave the calculation of borders etc.
190 void wxMDIChildFrame
::SetClientSize(int width
, int height
)
195 void wxMDIChildFrame
::GetPosition(int *x
, int *y
) const
200 void wxMDIChildFrame
::SetMenuBar(wxMenuBar
*menu_bar
)
202 return wxFrame
::SetMenuBar( menu_bar
) ;
206 void wxMDIChildFrame
::Maximize()
211 void wxMDIChildFrame
::Restore()
216 void wxMDIChildFrame
::Activate()
223 wxMDIClientWindow
::wxMDIClientWindow()
227 wxMDIClientWindow
::~wxMDIClientWindow()
231 bool wxMDIClientWindow
::CreateClient(wxMDIParentFrame
*parent
, long style
)
233 // TODO create client window
234 m_backgroundColour
= wxSystemSettings
::GetSystemColour(wxSYS_COLOUR_APPWORKSPACE
);
239 // Explicitly call default scroll behaviour
240 void wxMDIClientWindow
::OnScroll(wxScrollEvent
& event
)