]> git.saurik.com Git - wxWidgets.git/blame_incremental - include/wx/generic/mdig.h
implement click events in wxHeaderCtrl
[wxWidgets.git] / include / wx / generic / mdig.h
... / ...
CommitLineData
1/////////////////////////////////////////////////////////////////////////////
2// Name: wx/generic/mdig.h
3// Purpose: Generic MDI (Multiple Document Interface) classes
4// Author: Hans Van Leemputten
5// Modified by: 2008-10-31 Vadim Zeitlin: derive from the base classes
6// Created: 29/07/2002
7// RCS-ID: $Id$
8// Copyright: (c) 2002 Hans Van Leemputten
9// (c) 2008 Vadim Zeitlin
10// Licence: wxWindows licence
11/////////////////////////////////////////////////////////////////////////////
12
13#ifndef _WX_GENERIC_MDIG_H_
14#define _WX_GENERIC_MDIG_H_
15
16// ----------------------------------------------------------------------------
17// headers
18// ----------------------------------------------------------------------------
19
20#include "wx/panel.h"
21
22class WXDLLIMPEXP_FWD_CORE wxBookCtrlBase;
23class WXDLLIMPEXP_FWD_CORE wxBookCtrlEvent;
24class WXDLLIMPEXP_FWD_CORE wxIcon;
25class WXDLLIMPEXP_FWD_CORE wxIconBundle;
26class WXDLLIMPEXP_FWD_CORE wxNotebook;
27
28#if wxUSE_GENERIC_MDI_AS_NATIVE
29 #define wxGenericMDIParentFrame wxMDIParentFrame
30 #define wxGenericMDIChildFrame wxMDIChildFrame
31 #define wxGenericMDIClientWindow wxMDIClientWindow
32#else // !wxUSE_GENERIC_MDI_AS_NATIVE
33 class WXDLLIMPEXP_FWD_CORE wxGenericMDIParentFrame;
34 class WXDLLIMPEXP_FWD_CORE wxGenericMDIChildFrame;
35 class WXDLLIMPEXP_FWD_CORE wxGenericMDIClientWindow;
36#endif // wxUSE_GENERIC_MDI_AS_NATIVE/!wxUSE_GENERIC_MDI_AS_NATIVE
37
38// ----------------------------------------------------------------------------
39// wxGenericMDIParentFrame
40// ----------------------------------------------------------------------------
41
42class WXDLLIMPEXP_CORE wxGenericMDIParentFrame : public wxMDIParentFrameBase
43{
44public:
45 wxGenericMDIParentFrame() { Init(); }
46 wxGenericMDIParentFrame(wxWindow *parent,
47 wxWindowID winid,
48 const wxString& title,
49 const wxPoint& pos = wxDefaultPosition,
50 const wxSize& size = wxDefaultSize,
51 long style = wxDEFAULT_FRAME_STYLE | wxVSCROLL | wxHSCROLL,
52 const wxString& name = wxFrameNameStr)
53 {
54 Init();
55
56 Create(parent, winid, title, pos, size, style, name);
57 }
58
59 bool Create(wxWindow *parent,
60 wxWindowID winid,
61 const wxString& title,
62 const wxPoint& pos = wxDefaultPosition,
63 const wxSize& size = wxDefaultSize,
64 long style = wxDEFAULT_FRAME_STYLE | wxVSCROLL | wxHSCROLL,
65 const wxString& name = wxFrameNameStr);
66
67 virtual ~wxGenericMDIParentFrame();
68
69 // implement base class pure virtuals
70 static bool IsTDI() { return true; }
71
72 virtual void ActivateNext() { AdvanceActive(true); }
73 virtual void ActivatePrevious() { AdvanceActive(false); }
74
75#if wxUSE_MENUS
76 virtual void SetWindowMenu(wxMenu* pMenu);
77
78 virtual void SetMenuBar(wxMenuBar *pMenuBar);
79#endif // wxUSE_MENUS
80
81 virtual bool ProcessEvent(wxEvent& event);
82
83 virtual wxGenericMDIClientWindow *OnCreateGenericClient();
84
85
86 // implementation only from now on
87 void WXSetChildMenuBar(wxGenericMDIChildFrame *child);
88 void WXUpdateChildTitle(wxGenericMDIChildFrame *child);
89 void WXActivateChild(wxGenericMDIChildFrame *child);
90 void WXRemoveChild(wxGenericMDIChildFrame *child);
91 bool WXIsActiveChild(wxGenericMDIChildFrame *child) const;
92 bool WXIsInsideChildHandler(wxGenericMDIChildFrame *child) const;
93
94 // return the book control used by the client window to manage the pages
95 wxBookCtrlBase *GetBookCtrl() const;
96
97protected:
98#if wxUSE_MENUS
99 wxMenuBar *m_pMyMenuBar;
100#endif // wxUSE_MENUS
101
102 // advance the activation forward or backwards
103 void AdvanceActive(bool forward);
104
105private:
106 void Init();
107
108#if wxUSE_MENUS
109 void RemoveWindowMenu(wxMenuBar *pMenuBar);
110 void AddWindowMenu(wxMenuBar *pMenuBar);
111
112 void OnWindowMenu(wxCommandEvent& event);
113#endif // wxUSE_MENUS
114
115 void OnClose(wxCloseEvent& event);
116
117 // return the client window, may be NULL if we hadn't been created yet
118 wxGenericMDIClientWindow *GetGenericClientWindow() const;
119
120 // close all children, return false if any of them vetoed it
121 bool CloseAll();
122
123
124 // this pointer is non-NULL if we're currently inside our ProcessEvent()
125 // and we forwarded the event to this child (as we do with menu events)
126 wxMDIChildFrameBase *m_childHandler;
127
128 DECLARE_EVENT_TABLE()
129 DECLARE_DYNAMIC_CLASS(wxGenericMDIParentFrame)
130};
131
132// ----------------------------------------------------------------------------
133// wxGenericMDIChildFrame
134// ----------------------------------------------------------------------------
135
136class WXDLLIMPEXP_CORE wxGenericMDIChildFrame : public wxTDIChildFrame
137{
138public:
139 wxGenericMDIChildFrame() { Init(); }
140 wxGenericMDIChildFrame(wxGenericMDIParentFrame *parent,
141 wxWindowID winid,
142 const wxString& title,
143 const wxPoint& pos = wxDefaultPosition,
144 const wxSize& size = wxDefaultSize,
145 long style = wxDEFAULT_FRAME_STYLE,
146 const wxString& name = wxFrameNameStr)
147 {
148 Init();
149
150 Create(parent, winid, title, pos, size, style, name);
151 }
152
153 bool Create(wxGenericMDIParentFrame *parent,
154 wxWindowID winid,
155 const wxString& title,
156 const wxPoint& pos = wxDefaultPosition,
157 const wxSize& size = wxDefaultSize,
158 long style = wxDEFAULT_FRAME_STYLE,
159 const wxString& name = wxFrameNameStr);
160
161 virtual ~wxGenericMDIChildFrame();
162
163 // implement MDI operations
164 virtual void Activate();
165
166
167#if wxUSE_MENUS
168 virtual void SetMenuBar( wxMenuBar *menu_bar );
169 virtual wxMenuBar *GetMenuBar() const;
170#endif // wxUSE_MENUS
171
172 virtual wxString GetTitle() const { return m_title; }
173 virtual void SetTitle(const wxString& title);
174
175 virtual bool TryParent(wxEvent& event);
176
177 // implementation only from now on
178
179 wxGenericMDIParentFrame* GetGenericMDIParent() const
180 {
181#if wxUSE_GENERIC_MDI_AS_NATIVE
182 return GetMDIParent();
183#else // generic != native
184 return m_mdiParentGeneric;
185#endif
186 }
187
188protected:
189 wxString m_title;
190
191#if wxUSE_MENUS
192 wxMenuBar *m_pMenuBar;
193#endif // wxUSE_MENUS
194
195#if !wxUSE_GENERIC_MDI_AS_NATIVE
196 wxGenericMDIParentFrame *m_mdiParentGeneric;
197#endif
198
199protected:
200 void Init();
201
202private:
203 void OnMenuHighlight(wxMenuEvent& event);
204 void OnClose(wxCloseEvent& event);
205
206 DECLARE_DYNAMIC_CLASS(wxGenericMDIChildFrame)
207 DECLARE_EVENT_TABLE()
208
209 friend class wxGenericMDIClientWindow;
210};
211
212// ----------------------------------------------------------------------------
213// wxGenericMDIClientWindow
214// ----------------------------------------------------------------------------
215
216class WXDLLIMPEXP_CORE wxGenericMDIClientWindow : public wxMDIClientWindowBase
217{
218public:
219 wxGenericMDIClientWindow() { }
220
221 // unfortunately we need to provide our own version of CreateClient()
222 // because of the difference in the type of the first parameter and
223 // implement the base class pure virtual method in terms of it
224 // (CreateGenericClient() is virtual itself to allow customizing the client
225 // window creation by overriding it in the derived classes)
226 virtual bool CreateGenericClient(wxWindow *parent);
227 virtual bool CreateClient(wxMDIParentFrame *parent,
228 long WXUNUSED(style) = wxVSCROLL | wxHSCROLL)
229 {
230 return CreateGenericClient(parent);
231 }
232
233 // implementation only
234 wxBookCtrlBase *GetBookCtrl() const;
235 wxGenericMDIChildFrame *GetChild(size_t pos) const;
236 int FindChild(wxGenericMDIChildFrame *child) const;
237
238private:
239 void PageChanged(int OldSelection, int newSelection);
240
241 void OnPageChanged(wxBookCtrlEvent& event);
242 void OnSize(wxSizeEvent& event);
243
244 // the notebook containing all MDI children as its pages
245 wxNotebook *m_notebook;
246
247 DECLARE_DYNAMIC_CLASS(wxGenericMDIClientWindow)
248};
249
250// ----------------------------------------------------------------------------
251// inline functions implementation
252// ----------------------------------------------------------------------------
253
254inline bool
255wxGenericMDIParentFrame::
256WXIsInsideChildHandler(wxGenericMDIChildFrame *child) const
257{
258 return child == m_childHandler;
259}
260
261#endif // _WX_GENERIC_MDIG_H_