]> git.saurik.com Git - wxWidgets.git/blob - src/palmos/frame.cpp
make it possible to create wxWindowDC for a hidden window
[wxWidgets.git] / src / palmos / frame.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: src/palmos/frame.cpp
3 // Purpose: wxFrame
4 // Author: William Osborne - minimal working wxPalmOS port
5 // Modified by: Wlodzimierz ABX Skiba - more than minimal functionality
6 // Created: 10/13/04
7 // RCS-ID: $Id$
8 // Copyright: (c) William Osborne, Wlodzimierz Skiba
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/app.h"
31 #include "wx/menu.h"
32 #include "wx/utils.h"
33 #include "wx/dialog.h"
34 #include "wx/settings.h"
35 #include "wx/dcclient.h"
36 #include "wx/mdi.h"
37 #include "wx/panel.h"
38 #include "wx/log.h"
39 #include "wx/toolbar.h"
40 #include "wx/statusbr.h"
41 #include "wx/menuitem.h"
42 #endif // WX_PRECOMP
43
44 #include "wx/generic/statusbr.h"
45
46 #ifdef __WXUNIVERSAL__
47 #include "wx/univ/theme.h"
48 #include "wx/univ/colschem.h"
49 #endif // __WXUNIVERSAL__
50
51 #include <Event.h>
52 #include <Form.h>
53
54 // ----------------------------------------------------------------------------
55 // globals
56 // ----------------------------------------------------------------------------
57
58 #if wxUSE_MENUS_NATIVE
59 extern wxMenu *wxCurrentPopupMenu;
60 #endif // wxUSE_MENUS_NATIVE
61
62 // ----------------------------------------------------------------------------
63 // event tables
64 // ----------------------------------------------------------------------------
65
66 BEGIN_EVENT_TABLE(wxFrame, wxFrameBase)
67 EVT_PAINT(wxFrame::OnPaint)
68 END_EVENT_TABLE()
69
70 #if wxUSE_EXTENDED_RTTI
71 WX_DEFINE_FLAGS( wxFrameStyle )
72
73 wxBEGIN_FLAGS( wxFrameStyle )
74 // new style border flags, we put them first to
75 // use them for streaming out
76 wxFLAGS_MEMBER(wxBORDER_SIMPLE)
77 wxFLAGS_MEMBER(wxBORDER_SUNKEN)
78 wxFLAGS_MEMBER(wxBORDER_DOUBLE)
79 wxFLAGS_MEMBER(wxBORDER_RAISED)
80 wxFLAGS_MEMBER(wxBORDER_STATIC)
81 wxFLAGS_MEMBER(wxBORDER_NONE)
82
83 // old style border flags
84 wxFLAGS_MEMBER(wxSIMPLE_BORDER)
85 wxFLAGS_MEMBER(wxSUNKEN_BORDER)
86 wxFLAGS_MEMBER(wxDOUBLE_BORDER)
87 wxFLAGS_MEMBER(wxRAISED_BORDER)
88 wxFLAGS_MEMBER(wxSTATIC_BORDER)
89 wxFLAGS_MEMBER(wxBORDER)
90
91 // standard window styles
92 wxFLAGS_MEMBER(wxTAB_TRAVERSAL)
93 wxFLAGS_MEMBER(wxCLIP_CHILDREN)
94 wxFLAGS_MEMBER(wxTRANSPARENT_WINDOW)
95 wxFLAGS_MEMBER(wxWANTS_CHARS)
96 wxFLAGS_MEMBER(wxFULL_REPAINT_ON_RESIZE)
97 wxFLAGS_MEMBER(wxALWAYS_SHOW_SB )
98 wxFLAGS_MEMBER(wxVSCROLL)
99 wxFLAGS_MEMBER(wxHSCROLL)
100
101 // frame styles
102 wxFLAGS_MEMBER(wxSTAY_ON_TOP)
103 wxFLAGS_MEMBER(wxCAPTION)
104 #if WXWIN_COMPATIBILITY_2_6
105 wxFLAGS_MEMBER(wxTHICK_FRAME)
106 #endif // WXWIN_COMPATIBILITY_2_6
107 wxFLAGS_MEMBER(wxSYSTEM_MENU)
108 wxFLAGS_MEMBER(wxRESIZE_BORDER)
109 #if WXWIN_COMPATIBILITY_2_6
110 wxFLAGS_MEMBER(wxRESIZE_BOX)
111 #endif // WXWIN_COMPATIBILITY_2_6
112 wxFLAGS_MEMBER(wxCLOSE_BOX)
113 wxFLAGS_MEMBER(wxMAXIMIZE_BOX)
114 wxFLAGS_MEMBER(wxMINIMIZE_BOX)
115
116 wxFLAGS_MEMBER(wxFRAME_TOOL_WINDOW)
117 wxFLAGS_MEMBER(wxFRAME_FLOAT_ON_PARENT)
118
119 wxFLAGS_MEMBER(wxFRAME_SHAPED)
120
121 wxEND_FLAGS( wxFrameStyle )
122
123 IMPLEMENT_DYNAMIC_CLASS_XTI(wxFrame, wxTopLevelWindow,"wx/frame.h")
124
125 wxBEGIN_PROPERTIES_TABLE(wxFrame)
126 wxEVENT_PROPERTY( Menu , wxEVT_COMMAND_MENU_SELECTED , wxCommandEvent)
127
128 wxPROPERTY( Title,wxString, SetTitle, GetTitle, wxString() , 0 /*flags*/ , wxT("Helpstring") , wxT("group"))
129 wxPROPERTY_FLAGS( WindowStyle , wxFrameStyle , long , SetWindowStyleFlag , GetWindowStyleFlag , EMPTY_MACROVALUE , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) // style
130 wxPROPERTY( MenuBar , wxMenuBar * , SetMenuBar , GetMenuBar , EMPTY_MACROVALUE , 0 /*flags*/ , wxT("Helpstring") , wxT("group"))
131 wxEND_PROPERTIES_TABLE()
132
133 wxBEGIN_HANDLERS_TABLE(wxFrame)
134 wxEND_HANDLERS_TABLE()
135
136 wxCONSTRUCTOR_6( wxFrame , wxWindow* , Parent , wxWindowID , Id , wxString , Title , wxPoint , Position , wxSize , Size , long , WindowStyle)
137
138 #else
139 IMPLEMENT_DYNAMIC_CLASS(wxFrame, wxTopLevelWindow)
140 #endif
141
142 // ============================================================================
143 // implementation
144 // ============================================================================
145
146 // ----------------------------------------------------------------------------
147 // creation/destruction
148 // ----------------------------------------------------------------------------
149
150 void wxFrame::Init()
151 {
152 }
153
154 bool wxFrame::Create(wxWindow *parent,
155 wxWindowID id,
156 const wxString& title,
157 const wxPoint& pos,
158 const wxSize& size,
159 long style,
160 const wxString& name)
161 {
162 if ( !wxTopLevelWindow::Create(parent, id, title, pos, size, style, name) )
163 return false;
164
165 return true;
166 }
167
168 wxFrame::~wxFrame()
169 {
170 }
171
172 // ----------------------------------------------------------------------------
173 // wxFrame client size calculations
174 // ----------------------------------------------------------------------------
175
176 void wxFrame::DoSetClientSize(int width, int height)
177 {
178 }
179
180 // Get size *available for subwindows* i.e. excluding menu bar, toolbar etc.
181 void wxFrame::DoGetClientSize(int *x, int *y) const
182 {
183 wxSize size = GetSize();
184 wxPoint pos = GetClientAreaOrigin();
185 *x = size.x - pos.x - 1;
186 *y = size.y - pos.y - 1;
187 }
188
189 // ----------------------------------------------------------------------------
190 // wxFrame: various geometry-related functions
191 // ----------------------------------------------------------------------------
192
193 void wxFrame::Raise()
194 {
195 }
196
197 #if wxUSE_MENUS_NATIVE
198
199 void wxFrame::InternalSetMenuBar()
200 {
201 }
202
203 bool wxFrame::HandleMenuOpen()
204 {
205 if(!m_frameMenuBar)
206 return false;
207
208 m_frameMenuBar->LoadMenu();
209 return true;
210 }
211
212 bool wxFrame::HandleMenuSelect(WXEVENTPTR event)
213 {
214 const EventType *palmEvent = (EventType *)event;
215 const int ItemID = palmEvent->data.menu.itemID;
216
217 if (!m_frameMenuBar)
218 return false;
219
220 const int item = m_frameMenuBar->ProcessCommand(ItemID);
221 if (item==-1)
222 return false;
223
224 wxCommandEvent commandEvent(wxEVT_COMMAND_MENU_SELECTED, item);
225 commandEvent.SetEventObject(this);
226
227 GetEventHandler()->ProcessEvent(commandEvent);
228 return true;
229 }
230
231 #endif // wxUSE_MENUS_NATIVE
232
233 void wxFrame::OnPaint(wxPaintEvent& event)
234 {
235 #if wxUSE_STATUSBAR
236 if( m_frameStatusBar )
237 m_frameStatusBar->DrawStatusBar();
238 #endif // wxUSE_STATUSBAR
239 }
240
241 // Pass true to show full screen, false to restore.
242 bool wxFrame::ShowFullScreen(bool show, long style)
243 {
244 return false;
245 }
246
247 // ----------------------------------------------------------------------------
248 // tool/status bar stuff
249 // ----------------------------------------------------------------------------
250
251 #if wxUSE_TOOLBAR
252
253 wxToolBar* wxFrame::CreateToolBar(long style, wxWindowID id, const wxString& name)
254 {
255 return NULL;
256 }
257
258 void wxFrame::PositionToolBar()
259 {
260 }
261
262 #endif // wxUSE_TOOLBAR
263
264 // ----------------------------------------------------------------------------
265 // frame state (iconized/maximized/...)
266 // ----------------------------------------------------------------------------
267
268 // propagate our state change to all child frames: this allows us to emulate X
269 // Windows behaviour where child frames float independently of the parent one
270 // on the desktop, but are iconized/restored with it
271 void wxFrame::IconizeChildFrames(bool bIconize)
272 {
273 }
274
275 // ----------------------------------------------------------------------------
276 // wxFrame size management: we exclude the areas taken by menu/status/toolbars
277 // from the client area, so the client area is what's really available for the
278 // frame contents
279 // ----------------------------------------------------------------------------
280
281 // get the origin of the client area in the client coordinates
282 wxPoint wxFrame::GetClientAreaOrigin() const
283 {
284 // there is no API to get client area but we know
285 // it starts after titlebar and 1 pixel of form border
286 Coord maxY = wxSystemSettings::GetMetric(wxSYS_SCREEN_Y),
287 X = 1,
288 Y = 0;
289 while ( Y < maxY )
290 {
291 if(!FrmPointInTitle((FormType*)GetForm(),X,Y))
292 return wxPoint(X,Y+1);
293 Y++;
294 }
295
296 return wxPoint(X,0);
297 }