]> git.saurik.com Git - wxWidgets.git/blame_incremental - src/univ/framuniv.cpp
Move wx/msw/gccpriv.h inclusion back to wx/platform.h from wx/compiler.h.
[wxWidgets.git] / src / univ / framuniv.cpp
... / ...
CommitLineData
1///////////////////////////////////////////////////////////////////////////////
2// Name: src/univ/framuniv.cpp
3// Purpose: wxFrame class for wxUniversal
4// Author: Vadim Zeitlin
5// Modified by:
6// Created: 19.05.01
7// RCS-ID: $Id$
8// Copyright: (c) 2001 SciTech Software, Inc. (www.scitechsoft.com)
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#include "wx/frame.h"
28
29#ifndef WX_PRECOMP
30 #include "wx/menu.h"
31 #include "wx/statusbr.h"
32 #include "wx/settings.h"
33 #include "wx/toolbar.h"
34#endif // WX_PRECOMP
35
36// ============================================================================
37// implementation
38// ============================================================================
39
40BEGIN_EVENT_TABLE(wxFrame, wxFrameBase)
41 EVT_SIZE(wxFrame::OnSize)
42 EVT_SYS_COLOUR_CHANGED(wxFrame::OnSysColourChanged)
43END_EVENT_TABLE()
44
45// ----------------------------------------------------------------------------
46// ctors
47// ----------------------------------------------------------------------------
48
49bool wxFrame::Create(wxWindow *parent,
50 wxWindowID id,
51 const wxString& title,
52 const wxPoint& pos,
53 const wxSize& size,
54 long style,
55 const wxString& name)
56{
57 if ( !wxTopLevelWindow::Create(parent, id, title, pos, size, style, name) )
58 return false;
59
60 SetOwnBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_APPWORKSPACE));
61
62 return true;
63}
64
65// Responds to colour changes, and passes event on to children.
66void wxFrame::OnSysColourChanged(wxSysColourChangedEvent& event)
67{
68 SetOwnBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_APPWORKSPACE));
69 Refresh();
70
71 event.Skip();
72}
73
74// ----------------------------------------------------------------------------
75// menu support
76// ----------------------------------------------------------------------------
77
78void wxFrame::OnSize(wxSizeEvent& event)
79{
80#if wxUSE_MENUS
81 PositionMenuBar();
82#endif // wxUSE_MENUS
83#if wxUSE_STATUSBAR
84 PositionStatusBar();
85#endif // wxUSE_STATUSBAR
86#if wxUSE_TOOLBAR
87 PositionToolBar();
88#endif // wxUSE_TOOLBAR
89
90 event.Skip();
91}
92
93#if wxUSE_MENUS
94
95void wxFrame::PositionMenuBar()
96{
97 if ( m_frameMenuBar )
98 {
99 // the menubar is positioned above the client size, hence the negative
100 // y coord
101 wxCoord heightMbar = m_frameMenuBar->GetSize().y;
102
103 wxCoord heightTbar = 0;
104
105#if wxUSE_TOOLBAR
106 if ( m_frameToolBar )
107 heightTbar = m_frameToolBar->GetSize().y;
108#endif // wxUSE_TOOLBAR
109
110 m_frameMenuBar->SetSize(0,
111#ifdef __WXPM__ // FIXME -- remove this, make wxOS2/Univ behave as
112 // the rest of the world!!!
113 GetClientSize().y - heightMbar - heightTbar,
114#else
115 - (heightMbar + heightTbar),
116#endif
117 GetClientSize().x, heightMbar);
118 }
119}
120
121void wxFrame::DetachMenuBar()
122{
123 wxFrameBase::DetachMenuBar();
124 SendSizeEvent();
125}
126
127void wxFrame::AttachMenuBar(wxMenuBar *menubar)
128{
129 wxFrameBase::AttachMenuBar(menubar);
130 SendSizeEvent();
131}
132
133#endif // wxUSE_MENUS
134
135#if wxUSE_STATUSBAR
136
137void wxFrame::PositionStatusBar()
138{
139 if ( m_frameStatusBar )
140 {
141 wxSize size = GetClientSize();
142 m_frameStatusBar->SetSize(0, size.y, size.x, wxDefaultCoord);
143 }
144}
145
146wxStatusBar* wxFrame::CreateStatusBar(int number, long style,
147 wxWindowID id, const wxString& name)
148{
149 wxStatusBar *bar = wxFrameBase::CreateStatusBar(number, style, id, name);
150 SendSizeEvent();
151 return bar;
152}
153
154#endif // wxUSE_STATUSBAR
155
156#if wxUSE_TOOLBAR
157
158wxToolBar* wxFrame::CreateToolBar(long style, wxWindowID id, const wxString& name)
159{
160 if ( wxFrameBase::CreateToolBar(style, id, name) )
161 {
162 PositionToolBar();
163 }
164
165 return m_frameToolBar;
166}
167
168void wxFrame::PositionToolBar()
169{
170 if ( m_frameToolBar )
171 {
172 wxSize size = GetClientSize();
173 int tw, th, tx, ty;
174
175 tx = ty = 0;
176 m_frameToolBar->GetSize(&tw, &th);
177 if ( m_frameToolBar->GetWindowStyleFlag() & wxTB_VERTICAL )
178 {
179 tx = -tw;
180 th = size.y;
181 }
182 else
183 {
184 ty = -th;
185 tw = size.x;
186 }
187
188 m_frameToolBar->SetSize(tx, ty, tw, th);
189 }
190}
191#endif // wxUSE_TOOLBAR
192
193wxPoint wxFrame::GetClientAreaOrigin() const
194{
195 wxPoint pt = wxFrameBase::GetClientAreaOrigin();
196
197#if wxUSE_MENUS && !defined(__WXPM__)
198 if ( m_frameMenuBar )
199 {
200 pt.y += m_frameMenuBar->GetSize().y;
201 }
202#endif // wxUSE_MENUS
203
204#if wxUSE_TOOLBAR
205 if ( m_frameToolBar )
206 {
207 if ( m_frameToolBar->GetWindowStyleFlag() & wxTB_VERTICAL )
208 pt.x += m_frameToolBar->GetSize().x;
209 else
210 pt.y += m_frameToolBar->GetSize().y;
211 }
212#endif // wxUSE_TOOLBAR
213
214 return pt;
215}
216
217void wxFrame::DoGetClientSize(int *width, int *height) const
218{
219 wxFrameBase::DoGetClientSize(width, height);
220
221#if wxUSE_MENUS
222 if ( m_frameMenuBar && height )
223 {
224 (*height) -= m_frameMenuBar->GetSize().y;
225 }
226#endif // wxUSE_MENUS
227
228#if wxUSE_STATUSBAR
229 if ( m_frameStatusBar && height )
230 {
231 (*height) -= m_frameStatusBar->GetSize().y;
232 }
233#endif // wxUSE_STATUSBAR
234
235#if wxUSE_TOOLBAR
236 if ( m_frameToolBar )
237 {
238 if ( width && (m_frameToolBar->GetWindowStyleFlag() & wxTB_VERTICAL) )
239 (*width) -= m_frameToolBar->GetSize().x;
240 else if ( height )
241 (*height) -= m_frameToolBar->GetSize().y;
242 }
243#endif // wxUSE_TOOLBAR
244}
245
246void wxFrame::DoSetClientSize(int width, int height)
247{
248#if wxUSE_MENUS
249 if ( m_frameMenuBar )
250 {
251 height += m_frameMenuBar->GetSize().y;
252 }
253#endif // wxUSE_MENUS
254
255#if wxUSE_STATUSBAR
256 if ( m_frameStatusBar )
257 {
258 height += m_frameStatusBar->GetSize().y;
259 }
260#endif // wxUSE_STATUSBAR
261
262#if wxUSE_TOOLBAR
263 if ( m_frameToolBar )
264 {
265 if ( m_frameToolBar->GetWindowStyleFlag() & wxTB_VERTICAL )
266 width += m_frameToolBar->GetSize().x;
267 else
268 height += m_frameToolBar->GetSize().y;
269 }
270#endif // wxUSE_TOOLBAR
271
272 wxFrameBase::DoSetClientSize(width, height);
273}
274
275wxSize wxFrame::GetMinSize() const
276{
277 wxSize size = wxFrameBase::GetMinSize();
278
279#if wxUSE_MENUS
280 if ( m_frameMenuBar )
281 {
282 const wxSize sizeMenu = m_frameMenuBar->GetBestSize();
283 if ( sizeMenu.x > size.x )
284 size.x = sizeMenu.x;
285 size.y += sizeMenu.y;
286 }
287#endif // wxUSE_MENUS
288
289#if wxUSE_TOOLBAR
290 if ( m_frameToolBar )
291 {
292 size.y += m_frameToolBar->GetSize().y;
293 }
294#endif // wxUSE_TOOLBAR
295
296#if wxUSE_STATUSBAR
297 if ( m_frameStatusBar )
298 {
299 size.y += m_frameStatusBar->GetSize().y;
300 }
301#endif // wxUSE_STATUSBAR
302
303 return size;
304}
305
306bool wxFrame::Enable(bool enable)
307{
308 if (!wxFrameBase::Enable(enable))
309 return false;
310#ifdef __WXMICROWIN__
311 if (m_frameMenuBar)
312 m_frameMenuBar->Enable(enable);
313#endif
314 return true;
315}