1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: Controls wxWindows sample
4 // Author: Robert Roebling
7 // Copyright: (c) Robert Roebling, Julian Smart
8 // Licence: wxWindows license
9 /////////////////////////////////////////////////////////////////////////////
12 #pragma implementation "controls.h"
15 // For compilers that support precompilation, includes "wx/wx.h".
16 #include "wx/wxprec.h"
26 #include "wx/spinbutt.h"
27 #include "wx/notebook.h"
28 #include "wx/imaglist.h"
29 #include "wx/spinbutt.h"
32 #include "wx/dataobj.h"
33 #include "wx/clipbrd.h"
37 #include "wx/tooltip.h"
40 #if defined(__WXGTK__) || defined(__WXMOTIF__)
45 #include "mondrian.xpm"
46 #include "icons/choice.xpm"
47 #include "icons/combo.xpm"
48 #include "icons/list.xpm"
49 #include "icons/radio.xpm"
50 #include "icons/text.xpm"
51 #include "icons/gauge.xpm"
54 //----------------------------------------------------------------------
56 //----------------------------------------------------------------------
58 class MyApp
: public wxApp
64 // a text ctrl which allows to call different wxTextCtrl functions
65 // interactively by pressing function keys in it
66 class MyTextCtrl
: public wxTextCtrl
69 MyTextCtrl(wxWindow
*parent
, wxWindowID id
, const wxString
&value
,
70 const wxPoint
&pos
, const wxSize
&size
, int style
= 0)
71 : wxTextCtrl(parent
, id
, value
, pos
, size
, style
) { }
73 void OnKeyDown(wxKeyEvent
& event
);
79 class MyPanel
: public wxPanel
82 MyPanel(wxFrame
*frame
, int x
, int y
, int w
, int h
);
85 void OnSize( wxSizeEvent
& event
);
86 void OnListBox( wxCommandEvent
&event
);
87 void OnListBoxDoubleClick( wxCommandEvent
&event
);
88 void OnListBoxButtons( wxCommandEvent
&event
);
89 void OnChoice( wxCommandEvent
&event
);
90 void OnChoiceButtons( wxCommandEvent
&event
);
91 void OnCombo( wxCommandEvent
&event
);
92 void OnComboButtons( wxCommandEvent
&event
);
93 void OnRadio( wxCommandEvent
&event
);
94 void OnRadioButtons( wxCommandEvent
&event
);
95 void OnSetFont( wxCommandEvent
&event
);
96 void OnPageChanged( wxNotebookEvent
&event
);
97 void OnSliderUpdate( wxCommandEvent
&event
);
98 void OnSpinUpdate( wxSpinEvent
&event
);
99 void OnPasteFromClipboard( wxCommandEvent
&event
);
100 void OnCopyToClipboard( wxCommandEvent
&event
);
101 void OnMoveToEndOfText( wxCommandEvent
&event
);
102 void OnMoveToEndOfEntry( wxCommandEvent
&event
);
104 wxListBox
*m_listbox
;
110 wxButton
*m_fontButton
;
111 wxSpinButton
*m_spinbutton
;
112 wxTextCtrl
*m_spintext
;
113 MyTextCtrl
*m_multitext
;
114 MyTextCtrl
*m_textentry
;
115 wxCheckBox
*m_checkbox
;
118 wxNotebook
*m_notebook
;
121 DECLARE_EVENT_TABLE()
124 class MyFrame
: public wxFrame
127 MyFrame(wxFrame
*frame
, char *title
, int x
, int y
, int w
, int h
);
129 void OnQuit(wxCommandEvent
& event
);
130 void OnAbout(wxCommandEvent
& event
);
132 void OnSetTooltipDelay(wxCommandEvent
& event
);
133 void OnToggleTooltips(wxCommandEvent
& event
);
134 #endif // wxUSE_TOOLTIPS
135 void OnIdle( wxIdleEvent
& event
);
136 void OnSize( wxSizeEvent
& event
);
139 DECLARE_EVENT_TABLE()
142 //----------------------------------------------------------------------
144 //----------------------------------------------------------------------
148 //----------------------------------------------------------------------
150 //----------------------------------------------------------------------
159 MINIMAL_SET_TOOLTIP_DELAY
= 200,
160 MINIMAL_ENABLE_TOOLTIPS
165 // Create the main frame window
166 MyFrame
*frame
= new MyFrame((wxFrame
*) NULL
,
167 "Controls wxWindows App",
171 // The wxICON() macros loads an icon from a resource under Windows
172 // and uses an #included XPM image under GTK+ and Motif
174 frame
->SetIcon( wxICON(mondrian
) );
176 wxMenu
*file_menu
= new wxMenu
;
177 file_menu
->Append(MINIMAL_ABOUT
, "&About");
178 file_menu
->Append(MINIMAL_QUIT
, "E&xit");
180 wxMenuBar
*menu_bar
= new wxMenuBar
;
181 menu_bar
->Append(file_menu
, "&File");
184 wxMenu
*tooltip_menu
= new wxMenu
;
185 tooltip_menu
->Append(MINIMAL_SET_TOOLTIP_DELAY
, "Set &delay");
186 tooltip_menu
->AppendSeparator();
187 tooltip_menu
->Append(MINIMAL_ENABLE_TOOLTIPS
, "&Toggle tooltips",
188 "enable/disable tooltips", TRUE
);
189 tooltip_menu
->Check(MINIMAL_ENABLE_TOOLTIPS
, TRUE
);
190 menu_bar
->Append(tooltip_menu
, "&Tooltips");
191 #endif // wxUSE_TOOLTIPS
193 frame
->SetMenuBar(menu_bar
);
196 frame
->SetCursor(wxCursor(wxCURSOR_HAND
));
203 //----------------------------------------------------------------------
205 //----------------------------------------------------------------------
207 BEGIN_EVENT_TABLE(MyTextCtrl
, wxTextCtrl
)
208 EVT_KEY_DOWN(MyTextCtrl::OnKeyDown
)
211 void MyTextCtrl::OnKeyDown(wxKeyEvent
& event
)
213 switch ( event
.KeyCode() )
216 // show current position and text length
218 long line
, column
, pos
= GetInsertionPoint();
219 PositionToXY(pos
, &column
, &line
);
221 wxLogMessage("Current position: %ld\n"
222 "Current line, column: (%ld, %ld)\n"
223 "Number of lines: %ld\n"
224 "Current line length: %ld\n"
225 "Total text length: %ld",
236 SetInsertionPointEnd();
241 SetInsertionPoint(10);
249 //----------------------------------------------------------------------
251 //----------------------------------------------------------------------
253 const int ID_NOTEBOOK
= 1000;
255 const int ID_LISTBOX
= 130;
256 const int ID_LISTBOX_SEL_NUM
= 131;
257 const int ID_LISTBOX_SEL_STR
= 132;
258 const int ID_LISTBOX_CLEAR
= 133;
259 const int ID_LISTBOX_APPEND
= 134;
260 const int ID_LISTBOX_DELETE
= 135;
261 const int ID_LISTBOX_FONT
= 136;
262 const int ID_LISTBOX_ENABLE
= 137;
264 const int ID_CHOICE
= 120;
265 const int ID_CHOICE_SEL_NUM
= 121;
266 const int ID_CHOICE_SEL_STR
= 122;
267 const int ID_CHOICE_CLEAR
= 123;
268 const int ID_CHOICE_APPEND
= 124;
269 const int ID_CHOICE_DELETE
= 125;
270 const int ID_CHOICE_FONT
= 126;
271 const int ID_CHOICE_ENABLE
= 127;
273 const int ID_COMBO
= 140;
274 const int ID_COMBO_SEL_NUM
= 141;
275 const int ID_COMBO_SEL_STR
= 142;
276 const int ID_COMBO_CLEAR
= 143;
277 const int ID_COMBO_APPEND
= 144;
278 const int ID_COMBO_DELETE
= 145;
279 const int ID_COMBO_FONT
= 146;
280 const int ID_COMBO_ENABLE
= 147;
282 const int ID_TEXT
= 150;
283 const int ID_PASTE_TEXT
= 151;
284 const int ID_COPY_TEXT
= 152;
285 const int ID_MOVE_END_ENTRY
= 153;
286 const int ID_MOVE_END_ZONE
= 154;
288 const int ID_RADIOBOX
= 160;
289 const int ID_RADIOBOX_SEL_NUM
= 161;
290 const int ID_RADIOBOX_SEL_STR
= 162;
291 const int ID_RADIOBOX_FONT
= 163;
292 const int ID_RADIOBOX_ENABLE
= 164;
294 const int ID_RADIOBUTTON_1
= 166;
295 const int ID_RADIOBUTTON_2
= 167;
297 const int ID_SET_FONT
= 170;
299 const int ID_GAUGE
= 180;
300 const int ID_SLIDER
= 181;
302 const int ID_SPIN
= 182;
304 BEGIN_EVENT_TABLE(MyPanel
, wxPanel
)
305 EVT_SIZE ( MyPanel::OnSize
)
306 EVT_NOTEBOOK_PAGE_CHANGED(ID_NOTEBOOK
, MyPanel::OnPageChanged
)
307 EVT_LISTBOX (ID_LISTBOX
, MyPanel::OnListBox
)
308 EVT_LISTBOX_DCLICK(ID_LISTBOX
, MyPanel::OnListBoxDoubleClick
)
309 EVT_BUTTON (ID_LISTBOX_SEL_NUM
, MyPanel::OnListBoxButtons
)
310 EVT_BUTTON (ID_LISTBOX_SEL_STR
, MyPanel::OnListBoxButtons
)
311 EVT_BUTTON (ID_LISTBOX_CLEAR
, MyPanel::OnListBoxButtons
)
312 EVT_BUTTON (ID_LISTBOX_APPEND
, MyPanel::OnListBoxButtons
)
313 EVT_BUTTON (ID_LISTBOX_DELETE
, MyPanel::OnListBoxButtons
)
314 EVT_BUTTON (ID_LISTBOX_FONT
, MyPanel::OnListBoxButtons
)
315 EVT_CHECKBOX (ID_LISTBOX_ENABLE
, MyPanel::OnListBoxButtons
)
316 EVT_CHOICE (ID_CHOICE
, MyPanel::OnChoice
)
317 EVT_BUTTON (ID_CHOICE_SEL_NUM
, MyPanel::OnChoiceButtons
)
318 EVT_BUTTON (ID_CHOICE_SEL_STR
, MyPanel::OnChoiceButtons
)
319 EVT_BUTTON (ID_CHOICE_CLEAR
, MyPanel::OnChoiceButtons
)
320 EVT_BUTTON (ID_CHOICE_APPEND
, MyPanel::OnChoiceButtons
)
321 EVT_BUTTON (ID_CHOICE_DELETE
, MyPanel::OnChoiceButtons
)
322 EVT_BUTTON (ID_CHOICE_FONT
, MyPanel::OnChoiceButtons
)
323 EVT_CHECKBOX (ID_CHOICE_ENABLE
, MyPanel::OnChoiceButtons
)
324 EVT_COMBOBOX (ID_COMBO
, MyPanel::OnCombo
)
325 EVT_BUTTON (ID_COMBO_SEL_NUM
, MyPanel::OnComboButtons
)
326 EVT_BUTTON (ID_COMBO_SEL_STR
, MyPanel::OnComboButtons
)
327 EVT_BUTTON (ID_COMBO_CLEAR
, MyPanel::OnComboButtons
)
328 EVT_BUTTON (ID_COMBO_APPEND
, MyPanel::OnComboButtons
)
329 EVT_BUTTON (ID_COMBO_DELETE
, MyPanel::OnComboButtons
)
330 EVT_BUTTON (ID_COMBO_FONT
, MyPanel::OnComboButtons
)
331 EVT_CHECKBOX (ID_COMBO_ENABLE
, MyPanel::OnComboButtons
)
332 EVT_RADIOBOX (ID_RADIOBOX
, MyPanel::OnRadio
)
333 EVT_BUTTON (ID_RADIOBOX_SEL_NUM
, MyPanel::OnRadioButtons
)
334 EVT_BUTTON (ID_RADIOBOX_SEL_STR
, MyPanel::OnRadioButtons
)
335 EVT_BUTTON (ID_RADIOBOX_FONT
, MyPanel::OnRadioButtons
)
336 EVT_CHECKBOX (ID_RADIOBOX_ENABLE
, MyPanel::OnRadioButtons
)
337 EVT_BUTTON (ID_SET_FONT
, MyPanel::OnSetFont
)
338 EVT_SLIDER (ID_SLIDER
, MyPanel::OnSliderUpdate
)
339 EVT_SPIN (ID_SPIN
, MyPanel::OnSpinUpdate
)
340 EVT_BUTTON (ID_PASTE_TEXT
, MyPanel::OnPasteFromClipboard
)
341 EVT_BUTTON (ID_COPY_TEXT
, MyPanel::OnCopyToClipboard
)
342 EVT_BUTTON (ID_MOVE_END_ZONE
, MyPanel::OnMoveToEndOfText
)
343 EVT_BUTTON (ID_MOVE_END_ENTRY
, MyPanel::OnMoveToEndOfEntry
)
346 MyPanel::MyPanel( wxFrame
*frame
, int x
, int y
, int w
, int h
)
347 : wxPanel( frame
, -1, wxPoint(x
, y
), wxSize(w
, h
) ),
348 m_text(NULL
), m_notebook(NULL
)
350 // SetBackgroundColour("cadet blue");
352 m_text
= new wxTextCtrl( this, -1, "This is the log window.\n", wxPoint(0,50), wxSize(100,50), wxTE_MULTILINE
);
353 // m_text->SetBackgroundColour("wheat");
355 m_notebook
= new wxNotebook( this, ID_NOTEBOOK
, wxPoint(0,0), wxSize(200,150) );
370 Image_List
, Image_Choice
, Image_Combo
, Image_Text
, Image_Radio
, Image_Gauge
, Image_Max
373 // fill the image list
374 wxImageList
*imagelist
= new wxImageList(32, 32);
376 imagelist
-> Add( wxBitmap( list_xpm
));
377 imagelist
-> Add( wxBitmap( choice_xpm
));
378 imagelist
-> Add( wxBitmap( combo_xpm
));
379 imagelist
-> Add( wxBitmap( text_xpm
));
380 imagelist
-> Add( wxBitmap( radio_xpm
));
381 imagelist
-> Add( wxBitmap( gauge_xpm
));
382 m_notebook
->SetImageList(imagelist
);
383 #elif defined(__WXMSW__)
384 // load images from resources
387 Image_List
, Image_Choice
, Image_Combo
, Image_Text
, Image_Radio
, Image_Gauge
, Image_Max
389 wxImageList
*imagelist
= new wxImageList(16, 16, FALSE
, Image_Max
);
391 static const char *s_iconNames
[Image_Max
] =
393 "list", "choice", "combo", "text", "radio", "gauge"
396 for ( size_t n
= 0; n
< Image_Max
; n
++ )
398 wxBitmap
bmp(s_iconNames
[n
]);
399 if ( !bmp
.Ok() || (imagelist
->Add(bmp
) == -1) )
401 wxLogWarning("Couldn't load the image '%s' for the notebook page %d.",
406 m_notebook
->SetImageList(imagelist
);
410 #define Image_List -1
411 #define Image_Choice -1
412 #define Image_Combo -1
413 #define Image_Text -1
414 #define Image_Radio -1
415 #define Image_Gauge -1
420 wxButton
*button
= (wxButton
*) NULL
; /* who did this ? */
421 wxPanel
*panel
= (wxPanel
*) NULL
;
423 panel
= new wxPanel(m_notebook
);
424 m_listbox
= new wxListBox( panel
, ID_LISTBOX
, wxPoint(10,10), wxSize(120,70), 5, choices
);
425 m_listbox
->SetCursor(*wxCROSS_CURSOR
);
427 m_listbox
->SetToolTip( "This is a list box" );
428 #endif // wxUSE_TOOLTIPS
430 (void)new wxButton( panel
, ID_LISTBOX_SEL_NUM
, "Select #2", wxPoint(180,30), wxSize(140,30) );
431 (void)new wxButton( panel
, ID_LISTBOX_SEL_STR
, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
432 (void)new wxButton( panel
, ID_LISTBOX_CLEAR
, "Clear", wxPoint(180,80), wxSize(140,30) );
433 (void)new wxButton( panel
, ID_LISTBOX_APPEND
, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
434 (void)new wxButton( panel
, ID_LISTBOX_DELETE
, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
435 button
= new wxButton( panel
, ID_LISTBOX_FONT
, "Set Italic font", wxPoint(340,130), wxSize(140,30) );
437 button
->SetToolTip( "Press here to set italic font" );
438 #endif // wxUSE_TOOLTIPS
440 m_checkbox
= new wxCheckBox( panel
, ID_LISTBOX_ENABLE
, "Disable", wxPoint(20,130), wxSize(140,30) );
441 m_checkbox
->SetValue(FALSE
);
443 m_checkbox
->SetToolTip( "Click here to disable the listbox" );
444 #endif // wxUSE_TOOLTIPS
445 m_notebook
->AddPage(panel
, "wxListBox", TRUE
, Image_List
);
447 panel
= new wxPanel(m_notebook
);
448 m_choice
= new wxChoice( panel
, ID_CHOICE
, wxPoint(10,10), wxSize(120,-1), 5, choices
);
449 (void)new wxButton( panel
, ID_CHOICE_SEL_NUM
, "Select #2", wxPoint(180,30), wxSize(140,30) );
450 (void)new wxButton( panel
, ID_CHOICE_SEL_STR
, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
451 (void)new wxButton( panel
, ID_CHOICE_CLEAR
, "Clear", wxPoint(180,80), wxSize(140,30) );
452 (void)new wxButton( panel
, ID_CHOICE_APPEND
, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
453 (void)new wxButton( panel
, ID_CHOICE_DELETE
, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
454 (void)new wxButton( panel
, ID_CHOICE_FONT
, "Set Italic font", wxPoint(340,130), wxSize(140,30) );
455 (void)new wxCheckBox( panel
, ID_CHOICE_ENABLE
, "Disable", wxPoint(20,130), wxSize(140,30) );
456 m_notebook
->AddPage(panel
, "wxChoice", FALSE
, Image_Choice
);
458 panel
= new wxPanel(m_notebook
);
459 m_combo
= new wxComboBox( panel
, ID_COMBO
, "This", wxPoint(10,10), wxSize(120,-1), 5, choices
);
460 (void)new wxButton( panel
, ID_COMBO_SEL_NUM
, "Select #2", wxPoint(180,30), wxSize(140,30) );
461 (void)new wxButton( panel
, ID_COMBO_SEL_STR
, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
462 (void)new wxButton( panel
, ID_COMBO_CLEAR
, "Clear", wxPoint(180,80), wxSize(140,30) );
463 (void)new wxButton( panel
, ID_COMBO_APPEND
, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
464 (void)new wxButton( panel
, ID_COMBO_DELETE
, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
465 (void)new wxButton( panel
, ID_COMBO_FONT
, "Set Italic font", wxPoint(340,130), wxSize(140,30) );
466 (void)new wxCheckBox( panel
, ID_COMBO_ENABLE
, "Disable", wxPoint(20,130), wxSize(140,30) );
467 m_notebook
->AddPage(panel
, "wxComboBox", FALSE
, Image_Combo
);
469 panel
= new wxPanel(m_notebook
);
470 m_textentry
= new MyTextCtrl( panel
, -1, "Some text.", wxPoint(10,10), wxSize(320,28), //0);
472 (*m_textentry
) << " Appended.";
473 m_textentry
->SetInsertionPoint(0);
474 m_textentry
->WriteText( "Prepended. " );
476 m_multitext
= new MyTextCtrl( panel
, ID_TEXT
, "Some text.", wxPoint(10,50), wxSize(320,70), wxTE_MULTILINE
);
477 (*m_multitext
) << " Appended.";
478 m_multitext
->SetInsertionPoint(0);
479 m_multitext
->WriteText( "Prepended. " );
480 m_multitext
->AppendText( "\nPress function keys to test different wxTextCtrl functions." );
482 (*m_multitext
) << "\nDoes it have cross cursor?";
483 m_multitext
->SetCursor(*wxCROSS_CURSOR
);
485 new MyTextCtrl( panel
, -1, "This one is with wxTE_PROCESS_TAB style.", wxPoint(10,120), wxSize(320,70), wxTE_MULTILINE
| wxTE_PROCESS_TAB
);
487 m_multitext
->AppendText( "\nThis ctrl has a tooltip. " );
488 m_multitext
->SetToolTip("Press F1 here.");
489 #endif // wxUSE_TOOLTIPS
491 (void)new wxStaticBox( panel
, -1, "&Move cursor to the end of:", wxPoint(345, 0), wxSize(160, 100) );
492 (void)new wxButton( panel
, ID_MOVE_END_ENTRY
, "Text &entry", wxPoint(370, 20), wxSize(110, 30) );
493 (void)new wxButton( panel
, ID_MOVE_END_ZONE
, "Text &zone", wxPoint(370, 60), wxSize(110, 30) );
494 (void)new wxStaticBox( panel
, -1, "wx&Clipboard", wxPoint(345,100), wxSize(160,100) );
495 (void)new wxButton( panel
, ID_COPY_TEXT
, "C&opy line 1", wxPoint(370,120), wxSize(110,30) );
496 (void)new wxButton( panel
, ID_PASTE_TEXT
, "&Paste text", wxPoint(370,160), wxSize(110,30) );
497 m_notebook
->AddPage( panel
, "wxTextCtrl" , FALSE
, Image_Text
);
499 wxString choices2
[] =
501 "First", "Second", "Third",
502 "Fourth", "Fifth", //"Sixth",
503 //"Seventh", "Eighth", "Nineth", "Tenth"
506 panel
= new wxPanel(m_notebook
);
507 (void)new wxRadioBox( panel
, ID_RADIOBOX
, "That", wxPoint(10,160), wxSize(-1,-1), WXSIZEOF(choices2
), choices2
, 1, wxRA_SPECIFY_ROWS
);
508 m_radio
= new wxRadioBox( panel
, ID_RADIOBOX
, "This", wxPoint(10,10), wxSize(-1,-1), WXSIZEOF(choices
), choices
, 1, wxRA_SPECIFY_COLS
);
509 (void)new wxButton( panel
, ID_RADIOBOX_SEL_NUM
, "Select #2", wxPoint(180,30), wxSize(140,30) );
510 (void)new wxButton( panel
, ID_RADIOBOX_SEL_STR
, "Select 'This'", wxPoint(180,80), wxSize(140,30) );
511 m_fontButton
= new wxButton( panel
, ID_SET_FONT
, "Set more Italic font", wxPoint(340,30), wxSize(140,30) );
512 (void)new wxButton( panel
, ID_RADIOBOX_FONT
, "Set Italic font", wxPoint(340,80), wxSize(140,30) );
513 (void)new wxCheckBox( panel
, ID_RADIOBOX_ENABLE
, "Disable", wxPoint(340,130), wxSize(140,30) );
514 wxRadioButton
*rb
= new wxRadioButton( panel
, ID_RADIOBUTTON_1
, "Radiobutton1", wxPoint(210,170), wxSize(110,30) );
515 rb
->SetValue( FALSE
);
516 (void)new wxRadioButton( panel
, ID_RADIOBUTTON_2
, "Radiobutton2", wxPoint(340,170), wxSize(110,30) );
517 m_notebook
->AddPage(panel
, "wxRadioBox", FALSE
, Image_Radio
);
519 panel
= new wxPanel(m_notebook
);
520 (void)new wxStaticBox( panel
, -1, "wxGauge and wxSlider", wxPoint(10,10), wxSize(180,130) );
521 m_gauge
= new wxGauge( panel
, -1, 200, wxPoint(18,50), wxSize(155, 30) );
522 m_slider
= new wxSlider( panel
, ID_SLIDER
, 0, 0, 200, wxPoint(18,90), wxSize(155,-1) );
523 (void)new wxStaticBox( panel
, -1, "Explanation", wxPoint(200,10), wxSize(290,130) );
525 // No wrapping text in wxStaticText yet :-(
526 (void)new wxStaticText( panel
, -1,
532 (void)new wxStaticText( panel
, -1,
533 "In order see the gauge (aka progress bar)\n"
534 "control do something you have to drag the\n"
535 "handle of the slider to the right.\n"
537 "This is also supposed to demonstrate how\n"
538 "to use static controls.\n",
543 m_spintext
= new wxTextCtrl( panel
, -1, "0", wxPoint(20,160), wxSize(80,-1) );
544 m_spinbutton
= new wxSpinButton( panel
, ID_SPIN
, wxPoint(103,159), wxSize(-1,-1) );
545 m_spinbutton
->SetRange(0,100);
546 m_notebook
->AddPage(panel
, "wxGauge", FALSE
, Image_Gauge
);
549 void MyPanel::OnPasteFromClipboard( wxCommandEvent
&WXUNUSED(event
) )
551 // We test for wxUSE_DRAG_AND_DROP also, because data objects
552 // may not be implemented for compilers that can't cope with the OLE
553 // parts in wxUSE_DRAG_AND_DROP.
555 #if wxUSE_CLIPBOARD && wxUSE_DRAG_AND_DROP
556 if (!wxTheClipboard
->Open())
558 *m_text
<< "Error opening the clipboard.\n";
564 *m_text
<< "Successfully opened the clipboard.\n";
567 wxTextDataObject data
;
569 if (wxTheClipboard
->IsSupported( data
.GetFormat() ))
571 *m_text
<< "Clipboard supports requested format.\n";
573 if (wxTheClipboard
->GetData( &data
))
575 *m_text
<< "Successfully retrieved data from the clipboard.\n";
576 *m_multitext
<< data
.GetText() << "\n";
580 *m_text
<< "Error getting data from the clipboard.\n";
585 *m_text
<< "Clipboard doesn't support requested format.\n";
588 wxTheClipboard
->Close();
590 *m_text
<< "Closed the clipboard.\n";
592 wxLogError("Your version of wxWindows is compiled without clipboard support.");
596 void MyPanel::OnCopyToClipboard( wxCommandEvent
&WXUNUSED(event
) )
598 #if wxUSE_CLIPBOARD && wxUSE_DRAG_AND_DROP
599 wxString
text( m_multitext
->GetLineText(0) );
603 *m_text
<< "No text to copy.\n";
608 if (!wxTheClipboard
->Open())
610 *m_text
<< "Error opening the clipboard.\n";
616 *m_text
<< "Successfully opened the clipboard.\n";
619 wxTextDataObject
*data
= new wxTextDataObject( text
);
621 if (!wxTheClipboard
->SetData( data
))
623 *m_text
<< "Error while copying to the clipboard.\n";
627 *m_text
<< "Successfully copied data to the clipboard.\n";
630 wxTheClipboard
->Close();
632 *m_text
<< "Closed the clipboard.\n";
634 wxLogError("Your version of wxWindows is compiled without clipboard support.");
638 void MyPanel::OnMoveToEndOfText( wxCommandEvent
&event
)
640 m_multitext
->SetInsertionPointEnd();
641 m_multitext
->SetFocus();
644 void MyPanel::OnMoveToEndOfEntry( wxCommandEvent
&event
)
646 m_textentry
->SetInsertionPointEnd();
647 m_textentry
->SetFocus();
650 void MyPanel::OnSize( wxSizeEvent
& WXUNUSED(event
) )
654 GetClientSize( &x
, &y
);
656 if (m_notebook
) m_notebook
->SetSize( 2, 2, x
-4, y
*2/3-4 );
657 if (m_text
) m_text
->SetSize( 2, y
*2/3+2, x
-4, y
/3-4 );
660 void MyPanel::OnPageChanged( wxNotebookEvent
&event
)
662 *m_text
<< "Notebook selection is " << event
.GetSelection() << "\n";
665 void MyPanel::OnListBox( wxCommandEvent
&event
)
667 m_text
->AppendText( "ListBox selection string is: " );
668 m_text
->AppendText( event
.GetString() );
669 m_text
->AppendText( "\n" );
672 void MyPanel::OnListBoxDoubleClick( wxCommandEvent
&event
)
674 m_text
->AppendText( "ListBox double click string is: " );
675 m_text
->AppendText( event
.GetString() );
676 m_text
->AppendText( "\n" );
679 void MyPanel::OnListBoxButtons( wxCommandEvent
&event
)
681 switch (event
.GetId())
683 case ID_LISTBOX_ENABLE
:
685 m_text
->AppendText("Checkbox clicked.\n");
686 wxCheckBox
*cb
= (wxCheckBox
*)event
.GetEventObject();
689 cb
->SetToolTip( "Click to enable listbox" );
691 cb
->SetToolTip( "Click to disable listbox" );
692 #endif // wxUSE_TOOLTIPS
693 m_listbox
->Enable( event
.GetInt() == 0 );
696 case ID_LISTBOX_SEL_NUM
:
698 m_listbox
->SetSelection( 2 );
701 case ID_LISTBOX_SEL_STR
:
703 m_listbox
->SetStringSelection( "This" );
706 case ID_LISTBOX_CLEAR
:
711 case ID_LISTBOX_APPEND
:
713 m_listbox
->Append( "Hi!" );
716 case ID_LISTBOX_DELETE
:
718 int idx
= m_listbox
->GetSelection();
719 m_listbox
->Delete( idx
);
722 case ID_LISTBOX_FONT
:
724 m_listbox
->SetFont( *wxITALIC_FONT
);
725 m_checkbox
->SetFont( *wxITALIC_FONT
);
731 void MyPanel::OnChoice( wxCommandEvent
&event
)
733 m_text
->AppendText( "Choice selection string is: " );
734 m_text
->AppendText( event
.GetString() );
735 m_text
->AppendText( "\n" );
738 void MyPanel::OnChoiceButtons( wxCommandEvent
&event
)
740 switch (event
.GetId())
742 case ID_CHOICE_ENABLE
:
744 m_choice
->Enable( event
.GetInt() == 0 );
747 case ID_CHOICE_SEL_NUM
:
749 m_choice
->SetSelection( 2 );
752 case ID_CHOICE_SEL_STR
:
754 m_choice
->SetStringSelection( "This" );
757 case ID_CHOICE_CLEAR
:
762 case ID_CHOICE_APPEND
:
764 m_choice
->Append( "Hi!" );
767 case ID_CHOICE_DELETE
:
769 int idx
= m_choice
->GetSelection();
770 m_choice
->Delete( idx
);
775 m_choice
->SetFont( *wxITALIC_FONT
);
781 void MyPanel::OnCombo( wxCommandEvent
&event
)
783 m_text
->AppendText( "ComboBox selection string is: " );
784 m_text
->AppendText( event
.GetString() );
785 m_text
->AppendText( "\n" );
788 void MyPanel::OnComboButtons( wxCommandEvent
&event
)
790 switch (event
.GetId())
792 case ID_COMBO_ENABLE
:
794 m_combo
->Enable( event
.GetInt() == 0 );
797 case ID_COMBO_SEL_NUM
:
799 m_combo
->SetSelection( 2 );
802 case ID_COMBO_SEL_STR
:
804 m_combo
->SetStringSelection( "This" );
812 case ID_COMBO_APPEND
:
814 m_combo
->Append( "Hi!" );
817 case ID_COMBO_DELETE
:
819 int idx
= m_combo
->GetSelection();
820 m_combo
->Delete( idx
);
825 m_combo
->SetFont( *wxITALIC_FONT
);
831 void MyPanel::OnRadio( wxCommandEvent
&event
)
833 m_text
->AppendText( "RadioBox selection string is: " );
834 m_text
->AppendText( event
.GetString() );
835 m_text
->AppendText( "\n" );
838 void MyPanel::OnRadioButtons( wxCommandEvent
&event
)
840 switch (event
.GetId())
842 case ID_RADIOBOX_ENABLE
:
844 m_radio
->Enable( event
.GetInt() == 0 );
847 case ID_RADIOBOX_SEL_NUM
:
849 m_radio
->SetSelection( 2 );
852 case ID_RADIOBOX_SEL_STR
:
854 m_radio
->SetStringSelection( "This" );
857 case ID_RADIOBOX_FONT
:
859 m_radio
->SetFont( *wxITALIC_FONT
);
865 void MyPanel::OnSetFont( wxCommandEvent
&WXUNUSED(event
) )
867 m_fontButton
->SetFont( *wxITALIC_FONT
);
868 m_text
->SetFont( *wxITALIC_FONT
);
871 void MyPanel::OnSliderUpdate( wxCommandEvent
&WXUNUSED(event
) )
873 m_gauge
->SetValue( m_slider
->GetValue() );
876 void MyPanel::OnSpinUpdate( wxSpinEvent
&event
)
879 value
.sprintf( "%d", (int)event
.GetPosition() );
880 m_spintext
->SetValue( value
);
885 delete m_notebook
->GetImageList();
888 //----------------------------------------------------------------------
890 //----------------------------------------------------------------------
892 BEGIN_EVENT_TABLE(MyFrame
, wxFrame
)
893 EVT_MENU(MINIMAL_QUIT
, MyFrame::OnQuit
)
894 EVT_MENU(MINIMAL_ABOUT
, MyFrame::OnAbout
)
896 EVT_MENU(MINIMAL_SET_TOOLTIP_DELAY
, MyFrame::OnSetTooltipDelay
)
897 EVT_MENU(MINIMAL_ENABLE_TOOLTIPS
, MyFrame::OnToggleTooltips
)
898 #endif // wxUSE_TOOLTIPS
899 EVT_SIZE(MyFrame::OnSize
)
900 EVT_IDLE(MyFrame::OnIdle
)
903 MyFrame::MyFrame(wxFrame
*frame
, char *title
, int x
, int y
, int w
, int h
)
904 : wxFrame(frame
, -1, title
, wxPoint(x
, y
), wxSize(w
, h
))
908 (void)new MyPanel( this, 10, 10, 300, 100 );
911 void MyFrame::OnQuit (wxCommandEvent
& WXUNUSED(event
) )
916 void MyFrame::OnAbout( wxCommandEvent
& WXUNUSED(event
) )
920 wxMessageDialog
dialog(this, "This is a control sample", "About Controls", wxOK
);
927 void MyFrame::OnSetTooltipDelay(wxCommandEvent
& event
)
929 static long s_delay
= 5000;
932 delay
.Printf("%ld", s_delay
);
934 delay
= wxGetTextFromUser("Enter delay (in milliseconds)",
941 sscanf(delay
, "%ld", &s_delay
);
943 wxToolTip::SetDelay(s_delay
);
945 wxLogStatus(this, "Tooltip delay set to %ld milliseconds", s_delay
);
948 void MyFrame::OnToggleTooltips(wxCommandEvent
& event
)
950 static bool s_enabled
= TRUE
;
952 s_enabled
= !s_enabled
;
954 wxToolTip::Enable(s_enabled
);
956 wxLogStatus(this, "Tooltips %sabled", s_enabled
? "en" : "dis");
960 void MyFrame::OnSize( wxSizeEvent
& event
)
963 msg
.Printf("%dx%d", event
.GetSize().x
, event
.GetSize().y
);
964 SetStatusText(msg
, 1);
969 void MyFrame::OnIdle( wxIdleEvent
& WXUNUSED(event
) )
971 // track the window which has the focus in the status bar
972 static wxWindow
*s_windowFocus
= (wxWindow
*)NULL
;
973 wxWindow
*focus
= wxWindow::FindFocus();
974 if ( focus
&& (focus
!= s_windowFocus
) )
976 s_windowFocus
= focus
;
979 msg
.Printf("Focus: wxWindow = %p"
985 , s_windowFocus
->GetHWND()