]> git.saurik.com Git - wxWidgets.git/blob - src/palmos/mdi.cpp
WinCE build fixes.
[wxWidgets.git] / src / palmos / mdi.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: src/palmos/mdi.cpp
3 // Purpose: MDI classes for wx
4 // Author: William Osborne - minimal working wxPalmOS port
5 // Modified by:
6 // Created: 10/13/04
7 // RCS-ID: $Id$
8 // Copyright: (c) William Osborne
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
11
12 // ===========================================================================
13 // declarations
14 // ===========================================================================
15
16 // ---------------------------------------------------------------------------
17 // headers
18 // ---------------------------------------------------------------------------
19
20 // For compilers that support precompilation, includes "wx.h".
21 #include "wx/wxprec.h"
22
23 #ifdef __BORLANDC__
24 #pragma hdrstop
25 #endif
26
27 #if wxUSE_MDI && !defined(__WXUNIVERSAL__)
28
29 #ifndef WX_PRECOMP
30 #include "wx/setup.h"
31 #include "wx/frame.h"
32 #include "wx/menu.h"
33 #include "wx/app.h"
34 #include "wx/utils.h"
35 #include "wx/dialog.h"
36 #if wxUSE_STATUSBAR
37 #include "wx/statusbr.h"
38 #endif
39 #include "wx/settings.h"
40 #include "wx/intl.h"
41 #include "wx/log.h"
42 #endif
43
44 #include "wx/mdi.h"
45 #include "wx/palmos/private.h"
46
47 #if wxUSE_STATUSBAR && wxUSE_NATIVE_STATUSBAR
48 #include "wx/palmos/statbr95.h"
49 #endif
50
51 #if wxUSE_TOOLBAR
52 #include "wx/toolbar.h"
53 #endif // wxUSE_TOOLBAR
54
55 #include <string.h>
56
57 // ---------------------------------------------------------------------------
58 // global variables
59 // ---------------------------------------------------------------------------
60
61 extern wxMenu *wxCurrentPopupMenu;
62
63 extern const wxChar *wxMDIFrameClassName; // from app.cpp
64 extern const wxChar *wxMDIChildFrameClassName;
65 extern const wxChar *wxMDIChildFrameClassNameNoRedraw;
66 extern void wxAssociateWinWithHandle(HWND hWnd, wxWindow *win);
67 extern void wxRemoveHandleAssociation(wxWindow *win);
68
69
70 // ---------------------------------------------------------------------------
71 // constants
72 // ---------------------------------------------------------------------------
73
74 static const int IDM_WINDOWTILE = 4001;
75 static const int IDM_WINDOWTILEHOR = 4001;
76 static const int IDM_WINDOWCASCADE = 4002;
77 static const int IDM_WINDOWICONS = 4003;
78 static const int IDM_WINDOWNEXT = 4004;
79 static const int IDM_WINDOWTILEVERT = 4005;
80 static const int IDM_WINDOWPREV = 4006;
81
82 // This range gives a maximum of 500 MDI children. Should be enough :-)
83 static const int wxFIRST_MDI_CHILD = 4100;
84 static const int wxLAST_MDI_CHILD = 4600;
85
86 // Status border dimensions
87 static const int wxTHICK_LINE_BORDER = 3;
88 static const int wxTHICK_LINE_WIDTH = 1;
89
90 // ---------------------------------------------------------------------------
91 // private functions
92 // ---------------------------------------------------------------------------
93
94 // set the MDI menus (by sending the WM_MDISETMENU message) and update the menu
95 // of the parent of win (which is supposed to be the MDI client window)
96 static void MDISetMenu(wxWindow *win, HMENU hmenuFrame, HMENU hmenuWindow);
97
98 // insert the window menu (subMenu) into menu just before "Help" submenu or at
99 // the very end if not found
100 static void InsertWindowMenu(wxWindow *win, WXHMENU menu, HMENU subMenu);
101
102 // Remove the window menu
103 static void RemoveWindowMenu(wxWindow *win, WXHMENU menu);
104
105 // is this an id of an MDI child?
106 inline bool IsMdiCommandId(int id)
107 {
108 return (id >= wxFIRST_MDI_CHILD) && (id <= wxLAST_MDI_CHILD);
109 }
110
111 // unpack the parameters of WM_MDIACTIVATE message
112 static void UnpackMDIActivate(WXWPARAM wParam, WXLPARAM lParam,
113 WXWORD *activate, WXHWND *hwndAct, WXHWND *hwndDeact);
114
115 // return the HMENU of the MDI menu
116 static inline HMENU GetMDIWindowMenu(wxMDIParentFrame *frame)
117 {
118 wxMenu *menu = frame->GetWindowMenu();
119 return menu ? GetHmenuOf(menu) : 0;
120 }
121
122 // ===========================================================================
123 // implementation
124 // ===========================================================================
125
126 // ---------------------------------------------------------------------------
127 // wxWin macros
128 // ---------------------------------------------------------------------------
129
130 IMPLEMENT_DYNAMIC_CLASS(wxMDIParentFrame, wxFrame)
131 IMPLEMENT_DYNAMIC_CLASS(wxMDIChildFrame, wxFrame)
132 IMPLEMENT_DYNAMIC_CLASS(wxMDIClientWindow, wxWindow)
133
134 BEGIN_EVENT_TABLE(wxMDIParentFrame, wxFrame)
135 EVT_SIZE(wxMDIParentFrame::OnSize)
136 END_EVENT_TABLE()
137
138 BEGIN_EVENT_TABLE(wxMDIChildFrame, wxFrame)
139 EVT_IDLE(wxMDIChildFrame::OnIdle)
140 END_EVENT_TABLE()
141
142 BEGIN_EVENT_TABLE(wxMDIClientWindow, wxWindow)
143 EVT_SCROLL(wxMDIClientWindow::OnScroll)
144 END_EVENT_TABLE()
145
146 // ===========================================================================
147 // wxMDIParentFrame: the frame which contains the client window which manages
148 // the children
149 // ===========================================================================
150
151 wxMDIParentFrame::wxMDIParentFrame()
152 {
153 }
154
155 bool wxMDIParentFrame::Create(wxWindow *parent,
156 wxWindowID id,
157 const wxString& title,
158 const wxPoint& pos,
159 const wxSize& size,
160 long style,
161 const wxString& name)
162 {
163 return false;
164 }
165
166 wxMDIParentFrame::~wxMDIParentFrame()
167 {
168 }
169
170 #if wxUSE_MENUS_NATIVE
171
172 void wxMDIParentFrame::InternalSetMenuBar()
173 {
174 }
175
176 #endif // wxUSE_MENUS_NATIVE
177
178 void wxMDIParentFrame::SetWindowMenu(wxMenu* menu)
179 {
180 }
181
182 void wxMDIParentFrame::OnSize(wxSizeEvent&)
183 {
184 }
185
186 // Returns the active MDI child window
187 wxMDIChildFrame *wxMDIParentFrame::GetActiveChild() const
188 {
189 return NULL;
190 }
191
192 // Create the client window class (don't Create the window, just return a new
193 // class)
194 wxMDIClientWindow *wxMDIParentFrame::OnCreateClient()
195 {
196 return new wxMDIClientWindow;
197 }
198
199 WXHICON wxMDIParentFrame::GetDefaultIcon() const
200 {
201 // we don't have any standard icons (any more)
202 return (WXHICON)0;
203 }
204
205 // ---------------------------------------------------------------------------
206 // MDI operations
207 // ---------------------------------------------------------------------------
208
209 void wxMDIParentFrame::Cascade()
210 {
211 }
212
213 void wxMDIParentFrame::Tile()
214 {
215 }
216
217 void wxMDIParentFrame::ArrangeIcons()
218 {
219 }
220
221 void wxMDIParentFrame::ActivateNext()
222 {
223 }
224
225 void wxMDIParentFrame::ActivatePrevious()
226 {
227 }
228
229 // ---------------------------------------------------------------------------
230 // the MDI parent frame window proc
231 // ---------------------------------------------------------------------------
232
233 WXLRESULT wxMDIParentFrame::MSWWindowProc(WXUINT message,
234 WXWPARAM wParam,
235 WXLPARAM lParam)
236 {
237 return 0;
238 }
239
240 WXLRESULT wxMDIParentFrame::MSWDefWindowProc(WXUINT message,
241 WXWPARAM wParam,
242 WXLPARAM lParam)
243 {
244 return 0;
245 }
246
247 bool wxMDIParentFrame::MSWTranslateMessage(WXMSG* msg)
248 {
249 return false;
250 }
251
252 // ===========================================================================
253 // wxMDIChildFrame
254 // ===========================================================================
255
256 void wxMDIChildFrame::Init()
257 {
258 }
259
260 bool wxMDIChildFrame::Create(wxMDIParentFrame *parent,
261 wxWindowID id,
262 const wxString& title,
263 const wxPoint& pos,
264 const wxSize& size,
265 long style,
266 const wxString& name)
267 {
268 return false;
269 }
270
271 wxMDIChildFrame::~wxMDIChildFrame()
272 {
273 }
274
275 // Set the client size (i.e. leave the calculation of borders etc.
276 // to wxWidgets)
277 void wxMDIChildFrame::DoSetClientSize(int width, int height)
278 {
279 }
280
281 void wxMDIChildFrame::DoGetPosition(int *x, int *y) const
282 {
283 }
284
285 void wxMDIChildFrame::InternalSetMenuBar()
286 {
287 }
288
289 WXHICON wxMDIChildFrame::GetDefaultIcon() const
290 {
291 // we don't have any standard icons (any more)
292 return (WXHICON)0;
293 }
294
295 // ---------------------------------------------------------------------------
296 // MDI operations
297 // ---------------------------------------------------------------------------
298
299 void wxMDIChildFrame::Maximize(bool maximize)
300 {
301 }
302
303 void wxMDIChildFrame::Restore()
304 {
305 }
306
307 void wxMDIChildFrame::Activate()
308 {
309 }
310
311 // ---------------------------------------------------------------------------
312 // MDI window proc and message handlers
313 // ---------------------------------------------------------------------------
314
315 WXLRESULT wxMDIChildFrame::MSWWindowProc(WXUINT message,
316 WXWPARAM wParam,
317 WXLPARAM lParam)
318 {
319 return 0;
320 }
321
322 bool wxMDIChildFrame::HandleMDIActivate(long WXUNUSED(activate),
323 WXHWND hwndAct,
324 WXHWND hwndDeact)
325 {
326 return false;
327 }
328
329 bool wxMDIChildFrame::HandleWindowPosChanging(void *pos)
330 {
331 return false;
332 }
333
334 // ---------------------------------------------------------------------------
335 // MDI specific message translation/preprocessing
336 // ---------------------------------------------------------------------------
337
338 WXLRESULT wxMDIChildFrame::MSWDefWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam)
339 {
340 return 0;
341 }
342
343 bool wxMDIChildFrame::MSWTranslateMessage(WXMSG* msg)
344 {
345 return false;
346 }
347
348 // ---------------------------------------------------------------------------
349 // misc
350 // ---------------------------------------------------------------------------
351
352 void wxMDIChildFrame::MSWDestroyWindow()
353 {
354 }
355
356 // Change the client window's extended style so we don't get a client edge
357 // style when a child is maximised (a double border looks silly.)
358 bool wxMDIChildFrame::ResetWindowStyle(void *vrect)
359 {
360 return false;
361 }
362
363 // ===========================================================================
364 // wxMDIClientWindow: the window of predefined (by Windows) class which
365 // contains the child frames
366 // ===========================================================================
367
368 bool wxMDIClientWindow::CreateClient(wxMDIParentFrame *parent, long style)
369 {
370 return false;
371 }
372
373 // Explicitly call default scroll behaviour
374 void wxMDIClientWindow::OnScroll(wxScrollEvent& event)
375 {
376 event.Skip();
377 }
378
379 void wxMDIClientWindow::DoSetSize(int x, int y, int width, int height, int sizeFlags)
380 {
381 }
382
383 void wxMDIChildFrame::OnIdle(wxIdleEvent& event)
384 {
385 event.Skip();
386 }
387
388 // ---------------------------------------------------------------------------
389 // non member functions
390 // ---------------------------------------------------------------------------
391
392 static void MDISetMenu(wxWindow *win, HMENU hmenuFrame, HMENU hmenuWindow)
393 {
394 }
395
396 static void InsertWindowMenu(wxWindow *win, WXHMENU menu, HMENU subMenu)
397 {
398 }
399
400 static void RemoveWindowMenu(wxWindow *win, WXHMENU menu)
401 {
402 }
403
404 static void UnpackMDIActivate(WXWPARAM wParam, WXLPARAM lParam,
405 WXWORD *activate, WXHWND *hwndAct, WXHWND *hwndDeact)
406 {
407 }
408
409 #endif // wxUSE_MDI && !defined(__WXUNIVERSAL__)
410