]> git.saurik.com Git - wxWidgets.git/blame - include/wx/motif/mdi.h
Moved the cleanup code to an EVT_WINDOW_DESTROY handler.
[wxWidgets.git] / include / wx / motif / mdi.h
CommitLineData
9b6dbb09
JS
1/////////////////////////////////////////////////////////////////////////////
2// Name: mdi.h
3// Purpose: MDI (Multiple Document Interface) classes.
9b6dbb09
JS
4// Author: Julian Smart
5// Modified by:
6// Created: 17/09/98
7// RCS-ID: $Id$
8// Copyright: (c) Julian Smart
9// Licence: wxWindows licence
10/////////////////////////////////////////////////////////////////////////////
11
12#ifndef _WX_MDI_H_
13#define _WX_MDI_H_
14
15#ifdef __GNUG__
16#pragma interface "mdi.h"
17#endif
18
621793f4
JS
19/*
20New MDI scheme using tabs. We can use a wxNotebook to implement the client
21window. wxMDIChildFrame can be implemented as an XmMainWindow widget
22as before, and is a child of the notebook _and_ of the parent frame...
23but wxMDIChildFrame::GetParent should return the parent frame.
24
25*/
26
9b6dbb09 27#include "wx/frame.h"
621793f4 28#include "wx/notebook.h"
9b6dbb09
JS
29
30WXDLLEXPORT_DATA(extern const char*) wxFrameNameStr;
31WXDLLEXPORT_DATA(extern const char*) wxStatusLineNameStr;
32
33class WXDLLEXPORT wxMDIClientWindow;
34class WXDLLEXPORT wxMDIChildFrame;
35
36class WXDLLEXPORT wxMDIParentFrame: public wxFrame
37{
83df96d6
JS
38 DECLARE_DYNAMIC_CLASS(wxMDIParentFrame)
39
40 friend class WXDLLEXPORT wxMDIChildFrame;
9b6dbb09 41public:
83df96d6
JS
42
43 wxMDIParentFrame();
44 inline wxMDIParentFrame(wxWindow *parent,
45 wxWindowID id,
46 const wxString& title,
47 const wxPoint& pos = wxDefaultPosition,
48 const wxSize& size = wxDefaultSize,
49 long style = wxDEFAULT_FRAME_STYLE | wxVSCROLL | wxHSCROLL, // Scrolling refers to client window
50 const wxString& name = wxFrameNameStr)
51 {
52 Create(parent, id, title, pos, size, style, name);
53 }
54
55 ~wxMDIParentFrame();
56
57 bool Create(wxWindow *parent,
58 wxWindowID id,
59 const wxString& title,
60 const wxPoint& pos = wxDefaultPosition,
61 const wxSize& size = wxDefaultSize,
62 long style = wxDEFAULT_FRAME_STYLE | wxVSCROLL | wxHSCROLL,
63 const wxString& name = wxFrameNameStr);
64
65 void OnSize(wxSizeEvent& event);
66 void OnActivate(wxActivateEvent& event);
67 void OnSysColourChanged(wxSysColourChangedEvent& event);
68 void OnMenuHighlight(wxMenuEvent& event);
69
70 void SetMenuBar(wxMenuBar *menu_bar);
71
72 // Get the active MDI child window
73 wxMDIChildFrame *GetActiveChild() const ;
74
75 // Get the client window
76 wxMDIClientWindow *GetClientWindow() const { return m_clientWindow; };
77
78 // Create the client window class (don't Create the window,
79 // just return a new class)
80 virtual wxMDIClientWindow *OnCreateClient() ;
81
82 // MDI operations
83 virtual void Cascade();
84 virtual void Tile();
85 virtual void ArrangeIcons();
86 virtual void ActivateNext();
87 virtual void ActivatePrevious();
88
89 // Implementation
90
91 // Set the active child
92 inline void SetActiveChild(wxMDIChildFrame* child) { m_activeChild = child; }
93
94 // Set the child's menubar into the parent frame
95 void SetChildMenuBar(wxMDIChildFrame* frame);
96
97 inline wxMenuBar* GetActiveMenuBar() const { return m_activeMenuBar; }
98
99 // Redirect events to active child first
100 virtual bool ProcessEvent(wxEvent& event);
101
b23386b2 102protected:
83df96d6
JS
103 virtual void DoSetSize(int x, int y,
104 int width, int height,
105 int sizeFlags = wxSIZE_AUTO);
106 virtual void DoSetClientSize(int width, int height);
107
108 // Gets the size available for subwindows after menu size, toolbar size
109 // and status bar size have been subtracted. If you want to manage your own
110 // toolbar(s), don't call SetToolBar.
111 void DoGetClientSize(int *width, int *height) const;
112
9b6dbb09 113protected:
83df96d6
JS
114
115 wxMDIClientWindow* m_clientWindow;
116 wxMDIChildFrame* m_activeChild;
117 wxMenuBar* m_activeMenuBar;
118
119 DECLARE_EVENT_TABLE()
9b6dbb09
JS
120};
121
122class WXDLLEXPORT wxMDIChildFrame: public wxFrame
123{
83df96d6
JS
124 DECLARE_DYNAMIC_CLASS(wxMDIChildFrame)
125
bfc6fde4
VZ
126public:
127 wxMDIChildFrame();
128 wxMDIChildFrame(wxMDIParentFrame *parent,
83df96d6
JS
129 wxWindowID id,
130 const wxString& title,
131 const wxPoint& pos = wxDefaultPosition,
132 const wxSize& size = wxDefaultSize,
133 long style = wxDEFAULT_FRAME_STYLE,
134 const wxString& name = wxFrameNameStr)
bfc6fde4
VZ
135 {
136 Create(parent, id, title, pos, size, style, name);
137 }
83df96d6 138
bfc6fde4 139 ~wxMDIChildFrame();
83df96d6 140
bfc6fde4 141 bool Create(wxMDIParentFrame *parent,
83df96d6
JS
142 wxWindowID id,
143 const wxString& title,
144 const wxPoint& pos = wxDefaultPosition,
145 const wxSize& size = wxDefaultSize,
146 long style = wxDEFAULT_FRAME_STYLE,
147 const wxString& name = wxFrameNameStr);
148
bfc6fde4
VZ
149 // Set menu bar
150 void SetMenuBar(wxMenuBar *menu_bar);
151 void SetTitle(const wxString& title);
83df96d6 152
bfc6fde4
VZ
153 // Set icon
154 virtual void SetIcon(const wxIcon& icon);
f618020a
MB
155 virtual void SetIcons(const wxIconBundle& icons );
156
bfc6fde4
VZ
157 // Override wxFrame operations
158 void CaptureMouse();
159 void ReleaseMouse();
160 void Raise();
161 void Lower(void);
162 void SetSizeHints(int minW = -1, int minH = -1, int maxW = -1, int maxH = -1, int incW = -1, int incH = -1);
83df96d6 163
bfc6fde4
VZ
164 // MDI operations
165 virtual void Maximize();
166 virtual void Maximize(bool WXUNUSED(maximize)) { };
167 inline void Minimize() { Iconize(TRUE); };
168 virtual void Iconize(bool iconize);
169 virtual void Restore();
170 virtual void Activate();
171 virtual bool IsIconized() const ;
83df96d6 172
8487f887
RR
173 virtual bool IsTopLevel() const { return FALSE; }
174
bfc6fde4
VZ
175 // Is the frame maximized? Returns TRUE for
176 // wxMDIChildFrame due to the tabbed implementation.
177 virtual bool IsMaximized(void) const ;
83df96d6 178
bfc6fde4 179 bool Show(bool show);
83df96d6 180
bfc6fde4
VZ
181 WXWidget GetMainWidget() const { return m_mainWidget; };
182 WXWidget GetTopWidget() const { return m_mainWidget; };
183 WXWidget GetClientWidget() const { return m_mainWidget; };
83df96d6 184
bfc6fde4 185 /*
83df96d6
JS
186 virtual void OnRaise();
187 virtual void OnLower();
188 */
189
bfc6fde4
VZ
190 void SetMDIParentFrame(wxMDIParentFrame* parentFrame) { m_mdiParentFrame = parentFrame; }
191 wxMDIParentFrame* GetMDIParentFrame() const { return m_mdiParentFrame; }
83df96d6 192
8704bf74 193protected:
bfc6fde4 194 wxMDIParentFrame* m_mdiParentFrame;
83df96d6 195
bfc6fde4 196 virtual void DoSetSize(int x, int y,
83df96d6
JS
197 int width, int height,
198 int sizeFlags = wxSIZE_AUTO);
bfc6fde4 199 virtual void DoSetClientSize(int width, int height);
83df96d6 200
449f38b5
JS
201 void DoGetClientSize(int *width, int *height) const;
202 void DoGetSize(int *width, int *height) const;
203 void DoGetPosition(int *x, int *y) const ;
9b6dbb09
JS
204};
205
206/* The client window is a child of the parent MDI frame, and itself
83df96d6
JS
207* contains the child MDI frames.
208* However, you create the MDI children as children of the MDI parent:
209* only in the implementation does the client window become the parent
210* of the children. Phew! So the children are sort of 'adopted'...
211*/
9b6dbb09 212
621793f4 213class WXDLLEXPORT wxMDIClientWindow: public wxNotebook
9b6dbb09 214{
83df96d6
JS
215 DECLARE_DYNAMIC_CLASS(wxMDIClientWindow)
216
bfc6fde4
VZ
217public:
218 wxMDIClientWindow() ;
219 wxMDIClientWindow(wxMDIParentFrame *parent, long style = 0)
220 {
221 CreateClient(parent, style);
222 }
83df96d6 223
bfc6fde4 224 ~wxMDIClientWindow();
83df96d6 225
bfc6fde4
VZ
226 // Note: this is virtual, to allow overridden behaviour.
227 virtual bool CreateClient(wxMDIParentFrame *parent, long style = wxVSCROLL | wxHSCROLL);
83df96d6 228
bfc6fde4
VZ
229 // Explicitly call default scroll behaviour
230 void OnScroll(wxScrollEvent& event);
83df96d6 231
bfc6fde4
VZ
232 // Implementation
233 void OnPageChanged(wxNotebookEvent& event);
83df96d6 234
9b6dbb09 235protected:
bfc6fde4 236 virtual void DoSetSize(int x, int y,
83df96d6
JS
237 int width, int height,
238 int sizeFlags = wxSIZE_AUTO);
bfc6fde4 239 virtual void DoSetClientSize(int width, int height);
83df96d6 240
449f38b5
JS
241 void DoGetClientSize(int *width, int *height) const;
242 void DoGetSize(int *width, int *height) const ;
243 void DoGetPosition(int *x, int *y) const ;
83df96d6
JS
244
245
bfc6fde4
VZ
246private:
247 DECLARE_EVENT_TABLE()
9b6dbb09
JS
248};
249
250#endif
83df96d6 251// _WX_MDI_H_