]> git.saurik.com Git - wxWidgets.git/blame_incremental - include/wx/aui/tabmdi.h
Support using GetTextExtent() with empty string to get descent in wxOSX.
[wxWidgets.git] / include / wx / aui / tabmdi.h
... / ...
CommitLineData
1/////////////////////////////////////////////////////////////////////////////
2// Name: wx/aui/tabmdi.h
3// Purpose: Generic MDI (Multiple Document Interface) classes
4// Author: Hans Van Leemputten
5// Modified by: Benjamin I. Williams / Kirix Corporation
6// Created: 29/07/2002
7// RCS-ID: $Id$
8// Copyright: (c) Hans Van Leemputten
9// Licence: wxWindows licence
10/////////////////////////////////////////////////////////////////////////////
11
12#ifndef _WX_AUITABMDI_H_
13#define _WX_AUITABMDI_H_
14
15#if wxUSE_AUI
16
17// ----------------------------------------------------------------------------
18// headers
19// ----------------------------------------------------------------------------
20
21#include "wx/frame.h"
22#include "wx/panel.h"
23#include "wx/notebook.h"
24#include "wx/icon.h"
25#include "wx/aui/auibook.h"
26
27//-----------------------------------------------------------------------------
28// classes
29//-----------------------------------------------------------------------------
30
31class WXDLLIMPEXP_FWD_AUI wxAuiMDIParentFrame;
32class WXDLLIMPEXP_FWD_AUI wxAuiMDIClientWindow;
33class WXDLLIMPEXP_FWD_AUI wxAuiMDIChildFrame;
34
35//-----------------------------------------------------------------------------
36// wxAuiMDIParentFrame
37//-----------------------------------------------------------------------------
38
39class WXDLLIMPEXP_AUI wxAuiMDIParentFrame : public wxFrame
40{
41public:
42 wxAuiMDIParentFrame();
43 wxAuiMDIParentFrame(wxWindow *parent,
44 wxWindowID winid,
45 const wxString& title,
46 const wxPoint& pos = wxDefaultPosition,
47 const wxSize& size = wxDefaultSize,
48 long style = wxDEFAULT_FRAME_STYLE | wxVSCROLL | wxHSCROLL,
49 const wxString& name = wxFrameNameStr);
50
51 ~wxAuiMDIParentFrame();
52
53 bool Create(wxWindow *parent,
54 wxWindowID winid,
55 const wxString& title,
56 const wxPoint& pos = wxDefaultPosition,
57 const wxSize& size = wxDefaultSize,
58 long style = wxDEFAULT_FRAME_STYLE | wxVSCROLL | wxHSCROLL,
59 const wxString& name = wxFrameNameStr );
60
61 void SetArtProvider(wxAuiTabArt* provider);
62 wxAuiTabArt* GetArtProvider();
63 wxAuiNotebook* GetNotebook() const;
64
65#if wxUSE_MENUS
66 wxMenu* GetWindowMenu() const { return m_pWindowMenu; }
67 void SetWindowMenu(wxMenu* pMenu);
68
69 virtual void SetMenuBar(wxMenuBar *pMenuBar);
70#endif // wxUSE_MENUS
71
72 void SetChildMenuBar(wxAuiMDIChildFrame *pChild);
73
74 wxAuiMDIChildFrame *GetActiveChild() const;
75 void SetActiveChild(wxAuiMDIChildFrame* pChildFrame);
76
77 wxAuiMDIClientWindow *GetClientWindow() const;
78 virtual wxAuiMDIClientWindow *OnCreateClient();
79
80 virtual void Cascade() { /* Has no effect */ }
81 virtual void Tile(wxOrientation orient = wxHORIZONTAL);
82 virtual void ArrangeIcons() { /* Has no effect */ }
83 virtual void ActivateNext();
84 virtual void ActivatePrevious();
85
86protected:
87 wxAuiMDIClientWindow* m_pClientWindow;
88 wxEvent* m_pLastEvt;
89
90#if wxUSE_MENUS
91 wxMenu *m_pWindowMenu;
92 wxMenuBar *m_pMyMenuBar;
93#endif // wxUSE_MENUS
94
95protected:
96 void Init();
97
98#if wxUSE_MENUS
99 void RemoveWindowMenu(wxMenuBar *pMenuBar);
100 void AddWindowMenu(wxMenuBar *pMenuBar);
101
102 void DoHandleMenu(wxCommandEvent &event);
103 void DoHandleUpdateUI(wxUpdateUIEvent &event);
104#endif // wxUSE_MENUS
105
106 virtual bool ProcessEvent(wxEvent& event);
107
108 virtual void DoGetClientSize(int *width, int *height) const;
109
110private:
111 DECLARE_EVENT_TABLE()
112 DECLARE_DYNAMIC_CLASS(wxAuiMDIParentFrame)
113};
114
115//-----------------------------------------------------------------------------
116// wxAuiMDIChildFrame
117//-----------------------------------------------------------------------------
118
119class WXDLLIMPEXP_AUI wxAuiMDIChildFrame : public wxPanel
120{
121public:
122 wxAuiMDIChildFrame();
123 wxAuiMDIChildFrame(wxAuiMDIParentFrame *parent,
124 wxWindowID winid,
125 const wxString& title,
126 const wxPoint& pos = wxDefaultPosition,
127 const wxSize& size = wxDefaultSize,
128 long style = wxDEFAULT_FRAME_STYLE,
129 const wxString& name = wxFrameNameStr);
130
131 virtual ~wxAuiMDIChildFrame();
132 bool Create(wxAuiMDIParentFrame *parent,
133 wxWindowID winid,
134 const wxString& title,
135 const wxPoint& pos = wxDefaultPosition,
136 const wxSize& size = wxDefaultSize,
137 long style = wxDEFAULT_FRAME_STYLE,
138 const wxString& name = wxFrameNameStr);
139
140#if wxUSE_MENUS
141 virtual void SetMenuBar(wxMenuBar *menuBar);
142 virtual wxMenuBar *GetMenuBar() const;
143#endif // wxUSE_MENUS
144
145 virtual void SetTitle(const wxString& title);
146 virtual wxString GetTitle() const;
147
148 virtual void SetIcons(const wxIconBundle& icons);
149 virtual const wxIconBundle& GetIcons() const;
150
151 virtual void SetIcon(const wxIcon& icon);
152 virtual const wxIcon& GetIcon() const;
153
154 virtual void Activate();
155 virtual bool Destroy();
156
157 virtual bool Show(bool show = true);
158
159#if wxUSE_STATUSBAR
160 // no status bars
161 virtual wxStatusBar* CreateStatusBar(int WXUNUSED(number) = 1,
162 long WXUNUSED(style) = 1,
163 wxWindowID WXUNUSED(winid) = 1,
164 const wxString& WXUNUSED(name) = wxEmptyString)
165 { return NULL; }
166
167 virtual wxStatusBar *GetStatusBar() const { return NULL; }
168 virtual void SetStatusText( const wxString &WXUNUSED(text), int WXUNUSED(number)=0 ) {}
169 virtual void SetStatusWidths( int WXUNUSED(n), const int WXUNUSED(widths_field)[] ) {}
170#endif
171
172#if wxUSE_TOOLBAR
173 // no toolbar bars
174 virtual wxToolBar* CreateToolBar(long WXUNUSED(style),
175 wxWindowID WXUNUSED(winid),
176 const wxString& WXUNUSED(name))
177 { return NULL; }
178 virtual wxToolBar *GetToolBar() const { return NULL; }
179#endif
180
181
182 // no maximize etc
183 virtual void Maximize(bool WXUNUSED(maximize) = true) { /* Has no effect */ }
184 virtual void Restore() { /* Has no effect */ }
185 virtual void Iconize(bool WXUNUSED(iconize) = true) { /* Has no effect */ }
186 virtual bool IsMaximized() const { return true; }
187 virtual bool IsIconized() const { return false; }
188 virtual bool ShowFullScreen(bool WXUNUSED(show), long WXUNUSED(style)) { return false; }
189 virtual bool IsFullScreen() const { return false; }
190
191 virtual bool IsTopLevel() const { return false; }
192
193 void OnMenuHighlight(wxMenuEvent& evt);
194 void OnActivate(wxActivateEvent& evt);
195 void OnCloseWindow(wxCloseEvent& evt);
196
197 void SetMDIParentFrame(wxAuiMDIParentFrame* parent);
198 wxAuiMDIParentFrame* GetMDIParentFrame() const;
199
200protected:
201 void Init();
202 virtual void DoSetSize(int x, int y, int width, int height, int sizeFlags);
203 virtual void DoMoveWindow(int x, int y, int width, int height);
204
205 // no size hints
206 virtual void DoSetSizeHints(int WXUNUSED(minW), int WXUNUSED(minH),
207 int WXUNUSED(maxW), int WXUNUSED(maxH),
208 int WXUNUSED(incW), int WXUNUSED(incH)) {}
209public:
210 // This function needs to be called when a size change is confirmed,
211 // we needed this function to prevent anybody from the outside
212 // changing the panel... it messes the UI layout when we would allow it.
213 void ApplyMDIChildFrameRect();
214 void DoShow(bool show);
215
216protected:
217 wxAuiMDIParentFrame* m_pMDIParentFrame;
218 wxRect m_mdiNewRect;
219 wxRect m_mdiCurRect;
220 wxString m_title;
221 wxIcon m_icon;
222 wxIconBundle m_iconBundle;
223 bool m_activateOnCreate;
224
225#if wxUSE_MENUS
226 wxMenuBar* m_pMenuBar;
227#endif // wxUSE_MENUS
228
229
230
231private:
232 DECLARE_DYNAMIC_CLASS(wxAuiMDIChildFrame)
233 DECLARE_EVENT_TABLE()
234
235 friend class wxAuiMDIClientWindow;
236};
237
238//-----------------------------------------------------------------------------
239// wxAuiMDIClientWindow
240//-----------------------------------------------------------------------------
241
242class WXDLLIMPEXP_AUI wxAuiMDIClientWindow : public wxAuiNotebook
243{
244public:
245 wxAuiMDIClientWindow();
246 wxAuiMDIClientWindow(wxAuiMDIParentFrame *parent, long style = 0);
247
248 virtual bool CreateClient(wxAuiMDIParentFrame *parent,
249 long style = wxVSCROLL | wxHSCROLL);
250
251 virtual int SetSelection(size_t page);
252 virtual wxAuiMDIChildFrame* GetActiveChild();
253 virtual void SetActiveChild(wxAuiMDIChildFrame* pChildFrame)
254 {
255 SetSelection(GetPageIndex(pChildFrame));
256 }
257
258protected:
259
260 void PageChanged(int oldSelection, int newSelection);
261 void OnPageClose(wxAuiNotebookEvent& evt);
262 void OnPageChanged(wxAuiNotebookEvent& evt);
263 void OnSize(wxSizeEvent& evt);
264
265private:
266 DECLARE_DYNAMIC_CLASS(wxAuiMDIClientWindow)
267 DECLARE_EVENT_TABLE()
268};
269#endif // wxUSE_AUI
270
271#endif // _WX_AUITABMDI_H_