]>
Commit | Line | Data |
---|---|---|
98d5b42b | 1 | ///////////////////////////////////////////////////////////////////////////// |
5d4cca7f | 2 | // Name: popup.cpp |
98d5b42b | 3 | // Purpose: Popup wxWidgets sample |
43f813d1 | 4 | // Author: Robert Roebling |
98d5b42b | 5 | // Modified by: |
43f813d1 | 6 | // Created: 2005-02-04 |
98d5b42b | 7 | // RCS-ID: $Id$ |
43f813d1 | 8 | // Copyright: (c) 2005 Robert Roebling |
98d5b42b RR |
9 | // Licence: wxWindows licence |
10 | ///////////////////////////////////////////////////////////////////////////// | |
11 | ||
12 | // ============================================================================ | |
13 | // declarations | |
14 | // ============================================================================ | |
15 | ||
16 | // ---------------------------------------------------------------------------- | |
17 | // headers | |
18 | // ---------------------------------------------------------------------------- | |
19 | ||
20 | // For compilers that support precompilation, includes "wx/wx.h". | |
21 | #include "wx/wxprec.h" | |
22 | ||
23 | #ifdef __BORLANDC__ | |
24 | #pragma hdrstop | |
25 | #endif | |
26 | ||
27 | // for all others, include the necessary headers (this file is usually all you | |
28 | // need because it includes almost all "standard" wxWidgets headers) | |
29 | #ifndef WX_PRECOMP | |
30 | #include "wx/wx.h" | |
31 | #endif | |
32 | ||
33 | #include "wx/popupwin.h" | |
b6de8445 | 34 | #include "wx/spinctrl.h" |
98d5b42b RR |
35 | |
36 | // ---------------------------------------------------------------------------- | |
37 | // resources | |
38 | // ---------------------------------------------------------------------------- | |
39 | ||
40 | // the application icon (under Windows and OS/2 it is in resources and even | |
41 | // though we could still include the XPM here it would be unused) | |
42 | #if !defined(__WXMSW__) && !defined(__WXPM__) | |
43 | #include "../sample.xpm" | |
44 | #endif | |
45 | ||
b6de8445 RR |
46 | // ---------------------------------------------------------------------------- |
47 | // constants | |
48 | // ---------------------------------------------------------------------------- | |
49 | ||
50 | // IDs for the controls and the menu commands | |
51 | enum | |
52 | { | |
53 | Minimal_Quit = wxID_EXIT, | |
54 | Minimal_About = wxID_ABOUT, | |
55 | Minimal_TestDialog, | |
56 | Minimal_StartSimplePopup, | |
57 | Minimal_StartScrolledPopup, | |
58 | Minimal_LogWindow, | |
59 | Minimal_PopupButton, | |
60 | Minimal_PopupSpinctrl | |
61 | }; | |
62 | ||
34786588 VZ |
63 | //---------------------------------------------------------------------------- |
64 | // SimpleTransientPopup | |
65 | //---------------------------------------------------------------------------- | |
98d5b42b RR |
66 | class SimpleTransientPopup: public wxPopupTransientWindow |
67 | { | |
68 | public: | |
69 | SimpleTransientPopup( wxWindow *parent ); | |
70 | virtual ~SimpleTransientPopup(); | |
34786588 VZ |
71 | |
72 | // wxPopupTransientWindow virtual methods are all overridden to log them | |
73 | virtual void Popup(wxWindow *focus = NULL); | |
74 | virtual void OnDismiss(); | |
75 | virtual bool ProcessLeftDown(wxMouseEvent& event); | |
76 | virtual bool Show( bool show = true ); | |
dd6a7fb4 | 77 | |
34786588 | 78 | wxScrolledWindow* GetChild() { return m_panel; } |
dd6a7fb4 | 79 | |
98d5b42b | 80 | private: |
34786588 | 81 | wxScrolledWindow *m_panel; |
b6de8445 RR |
82 | wxButton *m_button; |
83 | wxSpinCtrl *m_spinCtrl; | |
414f2513 | 84 | wxStaticText *m_mouseText; |
dd6a7fb4 | 85 | |
98d5b42b RR |
86 | private: |
87 | void OnMouse( wxMouseEvent &event ); | |
88 | void OnSize( wxSizeEvent &event ); | |
89 | void OnSetFocus( wxFocusEvent &event ); | |
90 | void OnKillFocus( wxFocusEvent &event ); | |
b6de8445 RR |
91 | void OnButton( wxCommandEvent& event ); |
92 | void OnSpinCtrl( wxSpinEvent& event ); | |
98d5b42b RR |
93 | |
94 | private: | |
95 | DECLARE_CLASS(SimpleTransientPopup) | |
96 | DECLARE_EVENT_TABLE() | |
97 | }; | |
98 | ||
98d5b42b RR |
99 | //---------------------------------------------------------------------------- |
100 | // SimpleTransientPopup | |
101 | //---------------------------------------------------------------------------- | |
98d5b42b RR |
102 | IMPLEMENT_CLASS(SimpleTransientPopup,wxPopupTransientWindow) |
103 | ||
104 | BEGIN_EVENT_TABLE(SimpleTransientPopup,wxPopupTransientWindow) | |
105 | EVT_MOUSE_EVENTS( SimpleTransientPopup::OnMouse ) | |
106 | EVT_SIZE( SimpleTransientPopup::OnSize ) | |
107 | EVT_SET_FOCUS( SimpleTransientPopup::OnSetFocus ) | |
108 | EVT_KILL_FOCUS( SimpleTransientPopup::OnKillFocus ) | |
b6de8445 RR |
109 | EVT_BUTTON( Minimal_PopupButton, SimpleTransientPopup::OnButton ) |
110 | EVT_SPINCTRL( Minimal_PopupSpinctrl, SimpleTransientPopup::OnSpinCtrl ) | |
98d5b42b RR |
111 | END_EVENT_TABLE() |
112 | ||
82ceade7 RD |
113 | SimpleTransientPopup::SimpleTransientPopup( wxWindow *parent ) |
114 | :wxPopupTransientWindow( parent ) | |
98d5b42b | 115 | { |
dd6a7fb4 | 116 | m_panel = new wxScrolledWindow( this, wxID_ANY ); |
98d5b42b | 117 | m_panel->SetBackgroundColour( *wxLIGHT_GREY ); |
82ceade7 | 118 | |
57b2bba4 | 119 | // Keep this code to verify if mouse events work, they're required if |
82ceade7 RD |
120 | // you're making a control like a combobox where the items are highlighted |
121 | // under the cursor, the m_panel is set focus in the Popup() function | |
414f2513 RD |
122 | m_panel->Connect(wxEVT_MOTION, |
123 | wxMouseEventHandler(SimpleTransientPopup::OnMouse), | |
124 | NULL, this); | |
82ceade7 | 125 | |
dd6a7fb4 | 126 | wxStaticText *text = new wxStaticText( m_panel, wxID_ANY, |
befc36f8 RD |
127 | wxT("wxPopupTransientWindow is a\n") |
128 | wxT("wxPopupWindow which disappears\n") | |
98d5b42b RR |
129 | wxT("automatically when the user\n") |
130 | wxT("clicks the mouse outside it or if it\n") | |
131 | wxT("(or its first child) loses focus in \n") | |
414f2513 | 132 | wxT("any other way.") ); |
b6de8445 | 133 | |
414f2513 RD |
134 | m_button = new wxButton(m_panel, Minimal_PopupButton, wxT("Press Me")); |
135 | m_spinCtrl = new wxSpinCtrl(m_panel, Minimal_PopupSpinctrl, wxT("Hello")); | |
57b2bba4 | 136 | m_mouseText = new wxStaticText(m_panel, wxID_ANY, |
414f2513 | 137 | wxT("<- Test Mouse ->")); |
21fe01e2 | 138 | |
414f2513 RD |
139 | wxBoxSizer *topSizer = new wxBoxSizer( wxVERTICAL ); |
140 | topSizer->Add( text, 0, wxALL, 5 ); | |
141 | topSizer->Add( m_button, 0, wxALL, 5 ); | |
142 | topSizer->Add( m_spinCtrl, 0, wxALL, 5 ); | |
143 | topSizer->Add( m_mouseText, 0, wxCENTRE|wxALL, 5 ); | |
144 | ||
414f2513 RD |
145 | m_panel->SetSizer( topSizer ); |
146 | topSizer->Fit(m_panel); | |
147 | topSizer->Fit(this); | |
98d5b42b RR |
148 | } |
149 | ||
150 | SimpleTransientPopup::~SimpleTransientPopup() | |
151 | { | |
152 | } | |
153 | ||
34786588 VZ |
154 | void SimpleTransientPopup::Popup(wxWindow *focus) |
155 | { | |
5c95f4b2 | 156 | wxLogMessage( wxT("0x%lx SimpleTransientPopup::Popup"), long(this) ); |
82ceade7 | 157 | wxPopupTransientWindow::Popup(focus ? focus : m_panel); |
34786588 VZ |
158 | } |
159 | ||
98d5b42b RR |
160 | void SimpleTransientPopup::OnDismiss() |
161 | { | |
5c95f4b2 | 162 | wxLogMessage( wxT("0x%lx SimpleTransientPopup::OnDismiss"), long(this) ); |
34786588 VZ |
163 | wxPopupTransientWindow::OnDismiss(); |
164 | } | |
165 | ||
166 | bool SimpleTransientPopup::ProcessLeftDown(wxMouseEvent& event) | |
167 | { | |
5c95f4b2 | 168 | wxLogMessage( wxT("0x%lx SimpleTransientPopup::ProcessLeftDown pos(%d, %d)"), long(this), event.GetX(), event.GetY()); |
34786588 VZ |
169 | return wxPopupTransientWindow::ProcessLeftDown(event); |
170 | } | |
171 | bool SimpleTransientPopup::Show( bool show ) | |
172 | { | |
5c95f4b2 | 173 | wxLogMessage( wxT("0x%lx SimpleTransientPopup::Show %d"), long(this), int(show)); |
34786588 | 174 | return wxPopupTransientWindow::Show(show); |
98d5b42b RR |
175 | } |
176 | ||
177 | void SimpleTransientPopup::OnSize(wxSizeEvent &event) | |
178 | { | |
5c95f4b2 | 179 | wxLogMessage( wxT("0x%lx SimpleTransientPopup::OnSize"), long(this) ); |
98d5b42b RR |
180 | event.Skip(); |
181 | } | |
182 | ||
183 | void SimpleTransientPopup::OnSetFocus(wxFocusEvent &event) | |
184 | { | |
5c95f4b2 | 185 | wxLogMessage( wxT("0x%lx SimpleTransientPopup::OnSetFocus"), long(this) ); |
43f813d1 | 186 | event.Skip(); |
98d5b42b RR |
187 | } |
188 | ||
189 | void SimpleTransientPopup::OnKillFocus(wxFocusEvent &event) | |
190 | { | |
5c95f4b2 | 191 | wxLogMessage( wxT("0x%lx SimpleTransientPopup::OnKillFocus"), long(this) ); |
43f813d1 | 192 | event.Skip(); |
98d5b42b RR |
193 | } |
194 | ||
195 | void SimpleTransientPopup::OnMouse(wxMouseEvent &event) | |
196 | { | |
414f2513 RD |
197 | wxRect rect(m_mouseText->GetRect()); |
198 | rect.SetX(-100000); | |
199 | rect.SetWidth(1000000); | |
200 | wxColour colour(*wxLIGHT_GREY); | |
201 | ||
50dd4ca9 | 202 | if (rect.Contains(event.GetPosition())) |
57b2bba4 | 203 | { |
414f2513 | 204 | colour = wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHT); |
57b2bba4 BP |
205 | wxLogMessage( wxT("0x%lx SimpleTransientPopup::OnMouse pos(%d, %d)"), |
206 | long(event.GetEventObject()), event.GetX(), event.GetY()); | |
414f2513 RD |
207 | } |
208 | ||
209 | if (colour != m_mouseText->GetBackgroundColour()) | |
210 | { | |
211 | m_mouseText->SetBackgroundColour(colour); | |
212 | m_mouseText->Refresh(); | |
213 | } | |
34786588 VZ |
214 | event.Skip(); |
215 | } | |
216 | ||
b6de8445 | 217 | void SimpleTransientPopup::OnButton(wxCommandEvent& event) |
34786588 | 218 | { |
5c95f4b2 | 219 | wxLogMessage( wxT("0x%lx SimpleTransientPopup::OnButton ID %d"), long(this), event.GetId()); |
dd6a7fb4 | 220 | |
b6de8445 RR |
221 | wxButton *button = wxDynamicCast(event.GetEventObject(), wxButton); |
222 | if (button->GetLabel() == wxT("Press Me")) | |
223 | button->SetLabel(wxT("Pressed")); | |
dd6a7fb4 | 224 | else |
b6de8445 | 225 | button->SetLabel(wxT("Press Me")); |
34786588 | 226 | |
34786588 VZ |
227 | event.Skip(); |
228 | } | |
34786588 | 229 | |
b6de8445 | 230 | void SimpleTransientPopup::OnSpinCtrl(wxSpinEvent& event) |
34786588 | 231 | { |
57b2bba4 BP |
232 | wxLogMessage( wxT("0x%lx SimpleTransientPopup::OnSpinCtrl ID %d Value %d"), |
233 | long(this), event.GetId(), event.GetInt()); | |
98d5b42b RR |
234 | event.Skip(); |
235 | } | |
236 | ||
237 | // ---------------------------------------------------------------------------- | |
238 | // private classes | |
239 | // ---------------------------------------------------------------------------- | |
240 | ||
98d5b42b RR |
241 | class MyDialog : public wxDialog |
242 | { | |
243 | public: | |
244 | MyDialog(const wxString& title); | |
245 | ||
246 | void OnStartSimplePopup(wxCommandEvent& event); | |
34786588 | 247 | void OnStartScrolledPopup(wxCommandEvent& event); |
98d5b42b RR |
248 | |
249 | private: | |
82ceade7 RD |
250 | SimpleTransientPopup *m_simplePopup; |
251 | SimpleTransientPopup *m_scrolledPopup; | |
98d5b42b RR |
252 | DECLARE_EVENT_TABLE() |
253 | }; | |
254 | ||
255 | class MyFrame : public wxFrame | |
256 | { | |
257 | public: | |
258 | MyFrame(const wxString& title); | |
34786588 VZ |
259 | virtual ~MyFrame(); |
260 | ||
98d5b42b RR |
261 | void OnQuit(wxCommandEvent& event); |
262 | void OnAbout(wxCommandEvent& event); | |
263 | void OnTestDialog(wxCommandEvent& event); | |
264 | void OnStartSimplePopup(wxCommandEvent& event); | |
34786588 | 265 | void OnStartScrolledPopup(wxCommandEvent& event); |
98d5b42b RR |
266 | |
267 | private: | |
82ceade7 RD |
268 | SimpleTransientPopup *m_simplePopup; |
269 | SimpleTransientPopup *m_scrolledPopup; | |
b6de8445 | 270 | wxTextCtrl *m_logWin; |
34786588 | 271 | wxLog *m_logOld; |
98d5b42b RR |
272 | DECLARE_EVENT_TABLE() |
273 | }; | |
274 | ||
b6de8445 | 275 | class MyApp : public wxApp |
98d5b42b | 276 | { |
b6de8445 RR |
277 | public: |
278 | virtual bool OnInit(); | |
279 | ||
280 | MyFrame *m_frame; | |
98d5b42b RR |
281 | }; |
282 | ||
283 | // ---------------------------------------------------------------------------- | |
284 | // event tables and other macros for wxWidgets | |
285 | // ---------------------------------------------------------------------------- | |
286 | ||
287 | ||
288 | IMPLEMENT_APP(MyApp) | |
289 | ||
290 | // 'Main program' equivalent: the program execution "starts" here | |
291 | bool MyApp::OnInit() | |
292 | { | |
45e6e6f8 VZ |
293 | if ( !wxApp::OnInit() ) |
294 | return false; | |
295 | ||
98d5b42b | 296 | // create the main application window |
b6de8445 | 297 | m_frame = new MyFrame(_T("Popup wxWidgets App")); |
98d5b42b RR |
298 | |
299 | // and show it (the frames, unlike simple controls, are not shown when | |
300 | // created initially) | |
b6de8445 | 301 | m_frame->Show(true); |
98d5b42b RR |
302 | |
303 | // success: wxApp::OnRun() will be called which will enter the main message | |
304 | // loop and the application will run. If we returned false here, the | |
305 | // application would exit immediately. | |
306 | return true; | |
307 | } | |
308 | ||
309 | // ---------------------------------------------------------------------------- | |
310 | // main frame | |
311 | // ---------------------------------------------------------------------------- | |
312 | ||
313 | BEGIN_EVENT_TABLE(MyFrame, wxFrame) | |
314 | EVT_MENU(Minimal_Quit, MyFrame::OnQuit) | |
315 | EVT_MENU(Minimal_About, MyFrame::OnAbout) | |
316 | EVT_MENU(Minimal_TestDialog, MyFrame::OnTestDialog) | |
317 | EVT_BUTTON(Minimal_StartSimplePopup, MyFrame::OnStartSimplePopup) | |
34786588 | 318 | EVT_BUTTON(Minimal_StartScrolledPopup, MyFrame::OnStartScrolledPopup) |
98d5b42b RR |
319 | END_EVENT_TABLE() |
320 | ||
321 | MyFrame::MyFrame(const wxString& title) | |
befc36f8 | 322 | : wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(500,300)) |
98d5b42b | 323 | { |
82ceade7 RD |
324 | m_simplePopup = m_scrolledPopup = NULL; |
325 | ||
98d5b42b RR |
326 | SetIcon(wxICON(sample)); |
327 | ||
328 | #if wxUSE_MENUS | |
329 | wxMenu *menuFile = new wxMenu; | |
330 | ||
331 | // the "About" item should be in the help menu | |
332 | wxMenu *helpMenu = new wxMenu; | |
333 | helpMenu->Append(Minimal_About, _T("&About...\tF1"), _T("Show about dialog")); | |
334 | ||
335 | menuFile->Append(Minimal_TestDialog, _T("&Test dialog\tAlt-T"), _T("Test dialog")); | |
336 | menuFile->Append(Minimal_Quit, _T("E&xit\tAlt-X"), _T("Quit this program")); | |
337 | ||
338 | // now append the freshly created menu to the menu bar... | |
339 | wxMenuBar *menuBar = new wxMenuBar(); | |
340 | menuBar->Append(menuFile, _T("&File")); | |
341 | menuBar->Append(helpMenu, _T("&Help")); | |
342 | ||
343 | // ... and attach this menu bar to the frame | |
344 | SetMenuBar(menuBar); | |
345 | #endif // wxUSE_MENUS | |
346 | ||
414f2513 RD |
347 | #if wxUSE_STATUSBAR |
348 | // create a status bar just for fun (by default with 1 pane only) | |
349 | CreateStatusBar(2); | |
350 | SetStatusText(_T("Welcome to wxWidgets!")); | |
351 | #endif // wxUSE_STATUSBAR | |
352 | ||
82ceade7 RD |
353 | wxPanel *panel = new wxPanel(this, -1); |
354 | wxButton *button1 = new wxButton( panel, Minimal_StartSimplePopup, wxT("Show simple popup"), wxPoint(20,20) ); | |
355 | wxButton *button2 = new wxButton( panel, Minimal_StartScrolledPopup, wxT("Show scrolled popup"), wxPoint(20,70) ); | |
34786588 | 356 | |
82ceade7 RD |
357 | m_logWin = new wxTextCtrl( panel, wxID_ANY, wxEmptyString, wxDefaultPosition, |
358 | wxDefaultSize, wxTE_MULTILINE ); | |
b6de8445 RR |
359 | m_logWin->SetEditable(false); |
360 | wxLogTextCtrl* logger = new wxLogTextCtrl( m_logWin ); | |
34786588 | 361 | m_logOld = logger->SetActiveTarget( logger ); |
bd0b594d | 362 | logger->DisableTimestamp(); |
dd6a7fb4 | 363 | |
34786588 | 364 | wxBoxSizer *topSizer = new wxBoxSizer( wxVERTICAL ); |
82ceade7 RD |
365 | topSizer->Add( button1, 0, wxALL, 5 ); |
366 | topSizer->Add( button2, 0, wxALL, 5 ); | |
367 | topSizer->Add( m_logWin, 1, wxEXPAND|wxALL, 5 ); | |
98d5b42b | 368 | |
82ceade7 | 369 | panel->SetSizer( topSizer ); |
98d5b42b | 370 | |
98d5b42b RR |
371 | } |
372 | ||
dd6a7fb4 WS |
373 | MyFrame::~MyFrame() |
374 | { | |
375 | delete wxLog::SetActiveTarget(m_logOld); | |
376 | } | |
34786588 VZ |
377 | |
378 | ||
98d5b42b RR |
379 | // event handlers |
380 | ||
381 | void MyFrame::OnStartSimplePopup(wxCommandEvent& event) | |
382 | { | |
b6de8445 | 383 | wxLogMessage( wxT("================================================") ); |
82ceade7 RD |
384 | delete m_simplePopup; |
385 | m_simplePopup = new SimpleTransientPopup( this ); | |
98d5b42b RR |
386 | wxWindow *btn = (wxWindow*) event.GetEventObject(); |
387 | wxPoint pos = btn->ClientToScreen( wxPoint(0,0) ); | |
388 | wxSize sz = btn->GetSize(); | |
82ceade7 RD |
389 | m_simplePopup->Position( pos, sz ); |
390 | wxLogMessage( wxT("0x%lx Simple Popup Shown pos(%d, %d) size(%d, %d)"), long(m_simplePopup), pos.x, pos.y, sz.x, sz.y ); | |
391 | m_simplePopup->Popup(); | |
98d5b42b RR |
392 | } |
393 | ||
34786588 | 394 | void MyFrame::OnStartScrolledPopup(wxCommandEvent& event) |
98d5b42b | 395 | { |
34786588 | 396 | wxLogMessage( wxT("================================================") ); |
82ceade7 RD |
397 | delete m_scrolledPopup; |
398 | m_scrolledPopup = new SimpleTransientPopup( this ); | |
399 | m_scrolledPopup->GetChild()->SetScrollbars(1, 1, 1000, 1000); | |
34786588 VZ |
400 | wxWindow *btn = (wxWindow*) event.GetEventObject(); |
401 | wxPoint pos = btn->ClientToScreen( wxPoint(0,0) ); | |
402 | wxSize sz = btn->GetSize(); | |
82ceade7 RD |
403 | m_scrolledPopup->Position( pos, sz ); |
404 | wxLogMessage( wxT("0x%lx Scrolled Popup Shown pos(%d, %d) size(%d, %d)"), long(m_scrolledPopup), pos.x, pos.y, sz.x, sz.y ); | |
405 | m_scrolledPopup->Popup(); | |
98d5b42b RR |
406 | } |
407 | ||
408 | void MyFrame::OnTestDialog(wxCommandEvent& WXUNUSED(event)) | |
409 | { | |
410 | MyDialog dialog( wxT("Test") ); | |
411 | dialog.ShowModal(); | |
412 | } | |
413 | ||
414 | void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) | |
415 | { | |
416 | // true is to force the frame to close | |
417 | Close(true); | |
418 | } | |
419 | ||
420 | void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) | |
421 | { | |
422 | wxString msg; | |
423 | msg.Printf( _T("This is the About dialog of the popup sample.\n") | |
424 | _T("Welcome to %s"), wxVERSION_STRING); | |
425 | ||
426 | wxMessageBox(msg, _T("About Popup"), wxOK | wxICON_INFORMATION, this); | |
427 | } | |
428 | ||
429 | // ---------------------------------------------------------------------------- | |
430 | // test dialog | |
431 | // ---------------------------------------------------------------------------- | |
432 | ||
433 | BEGIN_EVENT_TABLE(MyDialog, wxDialog) | |
434 | EVT_BUTTON(Minimal_StartSimplePopup, MyDialog::OnStartSimplePopup) | |
34786588 | 435 | EVT_BUTTON(Minimal_StartScrolledPopup, MyDialog::OnStartScrolledPopup) |
98d5b42b RR |
436 | END_EVENT_TABLE() |
437 | ||
438 | MyDialog::MyDialog(const wxString& title) | |
82ceade7 | 439 | :wxDialog(NULL, wxID_ANY, title, wxPoint(50,50), wxSize(400,300)) |
98d5b42b | 440 | { |
82ceade7 RD |
441 | m_simplePopup = m_scrolledPopup = NULL; |
442 | wxPanel *panel = new wxPanel(this, -1); | |
98d5b42b | 443 | |
82ceade7 RD |
444 | wxButton *button1 = new wxButton( panel, Minimal_StartSimplePopup, wxT("Show simple popup"), wxPoint(20,20) ); |
445 | wxButton *button2 = new wxButton( panel, Minimal_StartScrolledPopup, wxT("Show scrolled popup"), wxPoint(20,60) ); | |
98d5b42b | 446 | |
82ceade7 RD |
447 | wxButton *okButton = new wxButton( panel, wxID_OK, wxT("OK"), wxPoint(20,200) ); |
448 | ||
449 | wxBoxSizer *topSizer = new wxBoxSizer( wxVERTICAL ); | |
450 | topSizer->Add( button1, 0, wxALL, 5 ); | |
451 | topSizer->Add( button2, 0, wxALL, 5 ); | |
452 | topSizer->AddSpacer(40); | |
453 | topSizer->Add( okButton, 0, wxALL, 5 ); | |
454 | ||
92c01615 | 455 | panel->SetSizerAndFit( topSizer ); |
98d5b42b RR |
456 | } |
457 | ||
458 | void MyDialog::OnStartSimplePopup(wxCommandEvent& event) | |
459 | { | |
b6de8445 | 460 | wxLogMessage( wxT("================================================") ); |
82ceade7 RD |
461 | delete m_simplePopup; |
462 | m_simplePopup = new SimpleTransientPopup( this ); | |
98d5b42b RR |
463 | wxWindow *btn = (wxWindow*) event.GetEventObject(); |
464 | wxPoint pos = btn->ClientToScreen( wxPoint(0,0) ); | |
465 | wxSize sz = btn->GetSize(); | |
82ceade7 RD |
466 | m_simplePopup->Position( pos, sz ); |
467 | wxLogMessage( wxT("0x%lx Dialog Simple Popup Shown pos(%d, %d) size(%d, %d)"), long(m_simplePopup), pos.x, pos.y, sz.x, sz.y ); | |
468 | m_simplePopup->Popup(); | |
98d5b42b RR |
469 | } |
470 | ||
34786588 | 471 | void MyDialog::OnStartScrolledPopup(wxCommandEvent& event) |
98d5b42b | 472 | { |
34786588 | 473 | wxLogMessage( wxT("================================================") ); |
82ceade7 RD |
474 | delete m_scrolledPopup; |
475 | m_scrolledPopup = new SimpleTransientPopup( this ); | |
476 | m_scrolledPopup->GetChild()->SetScrollbars(1, 1, 1000, 1000); | |
34786588 VZ |
477 | wxWindow *btn = (wxWindow*) event.GetEventObject(); |
478 | wxPoint pos = btn->ClientToScreen( wxPoint(0,0) ); | |
479 | wxSize sz = btn->GetSize(); | |
82ceade7 RD |
480 | m_scrolledPopup->Position( pos, sz ); |
481 | wxLogMessage( wxT("0x%lx Dialog Scrolled Popup Shown pos(%d, %d) size(%d, %d)"), long(m_scrolledPopup), pos.x, pos.y, sz.x, sz.y ); | |
482 | m_scrolledPopup->Popup(); | |
98d5b42b | 483 | } |