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
);
74 void OnChar(wxKeyEvent
& event
);
80 class MyPanel
: public wxPanel
83 MyPanel(wxFrame
*frame
, int x
, int y
, int w
, int h
);
86 void OnSize( wxSizeEvent
& event
);
87 void OnListBox( wxCommandEvent
&event
);
88 void OnListBoxDoubleClick( wxCommandEvent
&event
);
89 void OnListBoxButtons( wxCommandEvent
&event
);
90 void OnChoice( wxCommandEvent
&event
);
91 void OnChoiceButtons( wxCommandEvent
&event
);
92 void OnCombo( wxCommandEvent
&event
);
93 void OnComboButtons( wxCommandEvent
&event
);
94 void OnRadio( wxCommandEvent
&event
);
95 void OnRadioButtons( wxCommandEvent
&event
);
96 void OnSetFont( wxCommandEvent
&event
);
97 void OnPageChanged( wxNotebookEvent
&event
);
98 void OnSliderUpdate( wxCommandEvent
&event
);
100 void OnSpinUpdate( wxSpinEvent
&event
);
102 void OnPasteFromClipboard( wxCommandEvent
&event
);
103 void OnCopyToClipboard( wxCommandEvent
&event
);
104 void OnMoveToEndOfText( wxCommandEvent
&event
);
105 void OnMoveToEndOfEntry( wxCommandEvent
&event
);
107 wxListBox
*m_listbox
;
113 wxButton
*m_fontButton
;
115 wxSpinButton
*m_spinbutton
;
117 wxTextCtrl
*m_spintext
;
118 MyTextCtrl
*m_multitext
;
119 MyTextCtrl
*m_textentry
;
120 wxCheckBox
*m_checkbox
;
123 wxNotebook
*m_notebook
;
126 DECLARE_EVENT_TABLE()
129 class MyFrame
: public wxFrame
132 MyFrame(wxFrame
*frame
, char *title
, int x
, int y
, int w
, int h
);
134 void OnQuit(wxCommandEvent
& event
);
135 void OnAbout(wxCommandEvent
& event
);
137 void OnSetTooltipDelay(wxCommandEvent
& event
);
138 void OnToggleTooltips(wxCommandEvent
& event
);
139 #endif // wxUSE_TOOLTIPS
140 void OnIdle( wxIdleEvent
& event
);
141 void OnSize( wxSizeEvent
& event
);
144 DECLARE_EVENT_TABLE()
147 //----------------------------------------------------------------------
149 //----------------------------------------------------------------------
153 //----------------------------------------------------------------------
155 //----------------------------------------------------------------------
164 MINIMAL_SET_TOOLTIP_DELAY
= 200,
165 MINIMAL_ENABLE_TOOLTIPS
170 // Create the main frame window
171 MyFrame
*frame
= new MyFrame((wxFrame
*) NULL
,
172 "Controls wxWindows App",
176 // The wxICON() macros loads an icon from a resource under Windows
177 // and uses an #included XPM image under GTK+ and Motif
179 frame
->SetIcon( wxICON(mondrian
) );
181 wxMenu
*file_menu
= new wxMenu
;
182 file_menu
->Append(MINIMAL_ABOUT
, "&About");
183 file_menu
->Append(MINIMAL_QUIT
, "E&xit");
185 wxMenuBar
*menu_bar
= new wxMenuBar( wxMB_DOCKABLE
);
186 menu_bar
->Append(file_menu
, "&File");
189 wxMenu
*tooltip_menu
= new wxMenu
;
190 tooltip_menu
->Append(MINIMAL_SET_TOOLTIP_DELAY
, "Set &delay");
191 tooltip_menu
->AppendSeparator();
192 tooltip_menu
->Append(MINIMAL_ENABLE_TOOLTIPS
, "&Toggle tooltips",
193 "enable/disable tooltips", TRUE
);
194 tooltip_menu
->Check(MINIMAL_ENABLE_TOOLTIPS
, TRUE
);
195 menu_bar
->Append(tooltip_menu
, "&Tooltips");
196 #endif // wxUSE_TOOLTIPS
198 frame
->SetMenuBar(menu_bar
);
201 frame
->SetCursor(wxCursor(wxCURSOR_HAND
));
208 //----------------------------------------------------------------------
210 //----------------------------------------------------------------------
212 BEGIN_EVENT_TABLE(MyTextCtrl
, wxTextCtrl
)
213 EVT_KEY_DOWN(MyTextCtrl::OnKeyDown
)
214 EVT_CHAR(MyTextCtrl::OnChar
)
217 void MyTextCtrl::OnChar(wxKeyEvent
& event
)
219 static int s_keycode
= 0;
220 static size_t s_repeatCount
= 0;
222 int keycode
= event
.KeyCode();
223 if ( keycode
== s_keycode
)
231 wxLogStatus( _T("Key event: %d (x%u), at position %ld"),
232 s_keycode
, s_repeatCount
, GetInsertionPoint());
237 void MyTextCtrl::OnKeyDown(wxKeyEvent
& event
)
239 switch ( event
.KeyCode() )
242 // show current position and text length
244 long line
, column
, pos
= GetInsertionPoint();
245 PositionToXY(pos
, &column
, &line
);
247 wxLogMessage( _T("Current position: %ld\n"
248 "Current line, column: (%ld, %ld)\n"
249 "Number of lines: %ld\n"
250 "Current line length: %ld\n"
251 "Total text length: %ld"),
262 SetInsertionPointEnd();
267 SetInsertionPoint(10);
275 //----------------------------------------------------------------------
277 //----------------------------------------------------------------------
279 const int ID_NOTEBOOK
= 1000;
281 const int ID_LISTBOX
= 130;
282 const int ID_LISTBOX_SEL_NUM
= 131;
283 const int ID_LISTBOX_SEL_STR
= 132;
284 const int ID_LISTBOX_CLEAR
= 133;
285 const int ID_LISTBOX_APPEND
= 134;
286 const int ID_LISTBOX_DELETE
= 135;
287 const int ID_LISTBOX_FONT
= 136;
288 const int ID_LISTBOX_ENABLE
= 137;
290 const int ID_CHOICE
= 120;
291 const int ID_CHOICE_SEL_NUM
= 121;
292 const int ID_CHOICE_SEL_STR
= 122;
293 const int ID_CHOICE_CLEAR
= 123;
294 const int ID_CHOICE_APPEND
= 124;
295 const int ID_CHOICE_DELETE
= 125;
296 const int ID_CHOICE_FONT
= 126;
297 const int ID_CHOICE_ENABLE
= 127;
299 const int ID_COMBO
= 140;
300 const int ID_COMBO_SEL_NUM
= 141;
301 const int ID_COMBO_SEL_STR
= 142;
302 const int ID_COMBO_CLEAR
= 143;
303 const int ID_COMBO_APPEND
= 144;
304 const int ID_COMBO_DELETE
= 145;
305 const int ID_COMBO_FONT
= 146;
306 const int ID_COMBO_ENABLE
= 147;
308 const int ID_TEXT
= 150;
309 const int ID_PASTE_TEXT
= 151;
310 const int ID_COPY_TEXT
= 152;
311 const int ID_MOVE_END_ENTRY
= 153;
312 const int ID_MOVE_END_ZONE
= 154;
314 const int ID_RADIOBOX
= 160;
315 const int ID_RADIOBOX_SEL_NUM
= 161;
316 const int ID_RADIOBOX_SEL_STR
= 162;
317 const int ID_RADIOBOX_FONT
= 163;
318 const int ID_RADIOBOX_ENABLE
= 164;
320 const int ID_RADIOBUTTON_1
= 166;
321 const int ID_RADIOBUTTON_2
= 167;
323 const int ID_SET_FONT
= 170;
325 const int ID_GAUGE
= 180;
326 const int ID_SLIDER
= 181;
328 const int ID_SPIN
= 182;
330 BEGIN_EVENT_TABLE(MyPanel
, wxPanel
)
331 EVT_SIZE ( MyPanel::OnSize
)
332 EVT_NOTEBOOK_PAGE_CHANGED(ID_NOTEBOOK
, MyPanel::OnPageChanged
)
333 EVT_LISTBOX (ID_LISTBOX
, MyPanel::OnListBox
)
334 EVT_LISTBOX_DCLICK(ID_LISTBOX
, MyPanel::OnListBoxDoubleClick
)
335 EVT_BUTTON (ID_LISTBOX_SEL_NUM
, MyPanel::OnListBoxButtons
)
336 EVT_BUTTON (ID_LISTBOX_SEL_STR
, MyPanel::OnListBoxButtons
)
337 EVT_BUTTON (ID_LISTBOX_CLEAR
, MyPanel::OnListBoxButtons
)
338 EVT_BUTTON (ID_LISTBOX_APPEND
, MyPanel::OnListBoxButtons
)
339 EVT_BUTTON (ID_LISTBOX_DELETE
, MyPanel::OnListBoxButtons
)
340 EVT_BUTTON (ID_LISTBOX_FONT
, MyPanel::OnListBoxButtons
)
341 EVT_CHECKBOX (ID_LISTBOX_ENABLE
, MyPanel::OnListBoxButtons
)
342 EVT_CHOICE (ID_CHOICE
, MyPanel::OnChoice
)
343 EVT_BUTTON (ID_CHOICE_SEL_NUM
, MyPanel::OnChoiceButtons
)
344 EVT_BUTTON (ID_CHOICE_SEL_STR
, MyPanel::OnChoiceButtons
)
345 EVT_BUTTON (ID_CHOICE_CLEAR
, MyPanel::OnChoiceButtons
)
346 EVT_BUTTON (ID_CHOICE_APPEND
, MyPanel::OnChoiceButtons
)
347 EVT_BUTTON (ID_CHOICE_DELETE
, MyPanel::OnChoiceButtons
)
348 EVT_BUTTON (ID_CHOICE_FONT
, MyPanel::OnChoiceButtons
)
349 EVT_CHECKBOX (ID_CHOICE_ENABLE
, MyPanel::OnChoiceButtons
)
350 EVT_COMBOBOX (ID_COMBO
, MyPanel::OnCombo
)
351 EVT_BUTTON (ID_COMBO_SEL_NUM
, MyPanel::OnComboButtons
)
352 EVT_BUTTON (ID_COMBO_SEL_STR
, MyPanel::OnComboButtons
)
353 EVT_BUTTON (ID_COMBO_CLEAR
, MyPanel::OnComboButtons
)
354 EVT_BUTTON (ID_COMBO_APPEND
, MyPanel::OnComboButtons
)
355 EVT_BUTTON (ID_COMBO_DELETE
, MyPanel::OnComboButtons
)
356 EVT_BUTTON (ID_COMBO_FONT
, MyPanel::OnComboButtons
)
357 EVT_CHECKBOX (ID_COMBO_ENABLE
, MyPanel::OnComboButtons
)
358 EVT_RADIOBOX (ID_RADIOBOX
, MyPanel::OnRadio
)
359 EVT_BUTTON (ID_RADIOBOX_SEL_NUM
, MyPanel::OnRadioButtons
)
360 EVT_BUTTON (ID_RADIOBOX_SEL_STR
, MyPanel::OnRadioButtons
)
361 EVT_BUTTON (ID_RADIOBOX_FONT
, MyPanel::OnRadioButtons
)
362 EVT_CHECKBOX (ID_RADIOBOX_ENABLE
, MyPanel::OnRadioButtons
)
363 EVT_BUTTON (ID_SET_FONT
, MyPanel::OnSetFont
)
364 EVT_SLIDER (ID_SLIDER
, MyPanel::OnSliderUpdate
)
366 EVT_SPIN (ID_SPIN
, MyPanel::OnSpinUpdate
)
368 EVT_BUTTON (ID_PASTE_TEXT
, MyPanel::OnPasteFromClipboard
)
369 EVT_BUTTON (ID_COPY_TEXT
, MyPanel::OnCopyToClipboard
)
370 EVT_BUTTON (ID_MOVE_END_ZONE
, MyPanel::OnMoveToEndOfText
)
371 EVT_BUTTON (ID_MOVE_END_ENTRY
, MyPanel::OnMoveToEndOfEntry
)
374 MyPanel::MyPanel( wxFrame
*frame
, int x
, int y
, int w
, int h
)
375 : wxPanel( frame
, -1, wxPoint(x
, y
), wxSize(w
, h
) ),
376 m_text(NULL
), m_notebook(NULL
)
378 // SetBackgroundColour("cadet blue");
380 m_text
= new wxTextCtrl( this, -1, "This is the log window.\n", wxPoint(0,50), wxSize(100,50), wxTE_MULTILINE
);
381 // m_text->SetBackgroundColour("wheat");
383 m_notebook
= new wxNotebook( this, ID_NOTEBOOK
, wxPoint(0,0), wxSize(200,150) );
398 Image_List
, Image_Choice
, Image_Combo
, Image_Text
, Image_Radio
, Image_Gauge
, Image_Max
401 // fill the image list
402 wxImageList
*imagelist
= new wxImageList(32, 32);
404 imagelist
-> Add( wxBitmap( list_xpm
));
405 imagelist
-> Add( wxBitmap( choice_xpm
));
406 imagelist
-> Add( wxBitmap( combo_xpm
));
407 imagelist
-> Add( wxBitmap( text_xpm
));
408 imagelist
-> Add( wxBitmap( radio_xpm
));
409 imagelist
-> Add( wxBitmap( gauge_xpm
));
410 m_notebook
->SetImageList(imagelist
);
411 #elif defined(__WXMSW__)
412 // load images from resources
415 Image_List
, Image_Choice
, Image_Combo
, Image_Text
, Image_Radio
, Image_Gauge
, Image_Max
417 wxImageList
*imagelist
= new wxImageList(16, 16, FALSE
, Image_Max
);
419 static const char *s_iconNames
[Image_Max
] =
421 "list", "choice", "combo", "text", "radio", "gauge"
424 for ( size_t n
= 0; n
< Image_Max
; n
++ )
426 wxBitmap
bmp(s_iconNames
[n
]);
427 if ( !bmp
.Ok() || (imagelist
->Add(bmp
) == -1) )
429 wxLogWarning("Couldn't load the image '%s' for the notebook page %d.",
434 m_notebook
->SetImageList(imagelist
);
438 #define Image_List -1
439 #define Image_Choice -1
440 #define Image_Combo -1
441 #define Image_Text -1
442 #define Image_Radio -1
443 #define Image_Gauge -1
448 wxButton
*button
= (wxButton
*) NULL
; /* who did this ? */
449 wxPanel
*panel
= (wxPanel
*) NULL
;
451 panel
= new wxPanel(m_notebook
);
452 m_listbox
= new wxListBox( panel
, ID_LISTBOX
, wxPoint(10,10), wxSize(120,70), 5, choices
, wxLB_ALWAYS_SB
);
453 m_listbox
->SetCursor(*wxCROSS_CURSOR
);
455 m_listbox
->SetToolTip( "This is a list box" );
456 #endif // wxUSE_TOOLTIPS
458 (void)new wxButton( panel
, ID_LISTBOX_SEL_NUM
, "Select #2", wxPoint(180,30), wxSize(140,30) );
459 (void)new wxButton( panel
, ID_LISTBOX_SEL_STR
, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
460 (void)new wxButton( panel
, ID_LISTBOX_CLEAR
, "Clear", wxPoint(180,80), wxSize(140,30) );
461 (void)new wxButton( panel
, ID_LISTBOX_APPEND
, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
462 (void)new wxButton( panel
, ID_LISTBOX_DELETE
, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
463 button
= new wxButton( panel
, ID_LISTBOX_FONT
, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
465 button
->SetToolTip( "Press here to set italic font" );
466 #endif // wxUSE_TOOLTIPS
468 m_checkbox
= new wxCheckBox( panel
, ID_LISTBOX_ENABLE
, "Disable", wxPoint(20,130), wxSize(140,30) );
469 m_checkbox
->SetValue(FALSE
);
471 m_checkbox
->SetToolTip( "Click here to disable the listbox" );
472 #endif // wxUSE_TOOLTIPS
473 m_notebook
->AddPage(panel
, "wxListBox", TRUE
, Image_List
);
475 panel
= new wxPanel(m_notebook
);
476 m_choice
= new wxChoice( panel
, ID_CHOICE
, wxPoint(10,10), wxSize(120,-1), 5, choices
);
477 m_choice
->SetBackgroundColour( "red" );
478 (void)new wxButton( panel
, ID_CHOICE_SEL_NUM
, "Select #2", wxPoint(180,30), wxSize(140,30) );
479 (void)new wxButton( panel
, ID_CHOICE_SEL_STR
, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
480 (void)new wxButton( panel
, ID_CHOICE_CLEAR
, "Clear", wxPoint(180,80), wxSize(140,30) );
481 (void)new wxButton( panel
, ID_CHOICE_APPEND
, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
482 (void)new wxButton( panel
, ID_CHOICE_DELETE
, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
483 (void)new wxButton( panel
, ID_CHOICE_FONT
, "Set Italic font", wxPoint(340,130), wxSize(140,30) );
484 (void)new wxCheckBox( panel
, ID_CHOICE_ENABLE
, "Disable", wxPoint(20,130), wxSize(140,30) );
485 m_notebook
->AddPage(panel
, "wxChoice", FALSE
, Image_Choice
);
487 panel
= new wxPanel(m_notebook
);
488 m_combo
= new wxComboBox( panel
, ID_COMBO
, "This", wxPoint(10,10), wxSize(120,-1), 5, choices
, wxCB_READONLY
);
489 (void)new wxButton( panel
, ID_COMBO_SEL_NUM
, "Select #2", wxPoint(180,30), wxSize(140,30) );
490 (void)new wxButton( panel
, ID_COMBO_SEL_STR
, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
491 (void)new wxButton( panel
, ID_COMBO_CLEAR
, "Clear", wxPoint(180,80), wxSize(140,30) );
492 (void)new wxButton( panel
, ID_COMBO_APPEND
, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
493 (void)new wxButton( panel
, ID_COMBO_DELETE
, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
494 (void)new wxButton( panel
, ID_COMBO_FONT
, "Set Italic font", wxPoint(340,130), wxSize(140,30) );
495 (void)new wxCheckBox( panel
, ID_COMBO_ENABLE
, "Disable", wxPoint(20,130), wxSize(140,30) );
496 m_notebook
->AddPage(panel
, "wxComboBox", FALSE
, Image_Combo
);
498 panel
= new wxPanel(m_notebook
);
499 m_textentry
= new MyTextCtrl( panel
, -1, "Some text.", wxPoint(10,10), wxSize(320,28), //0);
501 (*m_textentry
) << " Appended.";
502 m_textentry
->SetInsertionPoint(0);
503 m_textentry
->WriteText( "Prepended. " );
505 m_multitext
= new MyTextCtrl( panel
, ID_TEXT
, "Some text.", wxPoint(10,50), wxSize(320,70), wxTE_MULTILINE
);
506 (*m_multitext
) << " Appended.";
507 m_multitext
->SetInsertionPoint(0);
508 m_multitext
->WriteText( "Prepended. " );
509 m_multitext
->AppendText( "\nPress function keys to test different wxTextCtrl functions." );
511 (*m_multitext
) << "\nDoes it have cross cursor?";
512 m_multitext
->SetCursor(*wxCROSS_CURSOR
);
514 new MyTextCtrl( panel
, -1, "This one is with wxTE_PROCESS_TAB style.", wxPoint(10,120), wxSize(320,70), wxTE_MULTILINE
| wxTE_PROCESS_TAB
);
516 m_multitext
->AppendText( "\nThis ctrl has a tooltip. " );
517 m_multitext
->SetToolTip("Press F1 here.");
518 #endif // wxUSE_TOOLTIPS
520 (void)new wxStaticBox( panel
, -1, "&Move cursor to the end of:", wxPoint(345, 0), wxSize(160, 100) );
521 (void)new wxButton( panel
, ID_MOVE_END_ENTRY
, "Text &entry", wxPoint(370, 20), wxSize(110, 30) );
522 (void)new wxButton( panel
, ID_MOVE_END_ZONE
, "Text &zone", wxPoint(370, 60), wxSize(110, 30) );
523 (void)new wxStaticBox( panel
, -1, "wx&Clipboard", wxPoint(345,100), wxSize(160,100) );
524 (void)new wxButton( panel
, ID_COPY_TEXT
, "C&opy line 1", wxPoint(370,120), wxSize(110,30) );
525 (void)new wxButton( panel
, ID_PASTE_TEXT
, "&Paste text", wxPoint(370,160), wxSize(110,30) );
526 m_notebook
->AddPage( panel
, "wxTextCtrl" , FALSE
, Image_Text
);
528 wxString choices2
[] =
532 "Fourth", "Fifth", "Sixth",
533 "Seventh", "Eighth", "Nineth", "Tenth" */
536 panel
= new wxPanel(m_notebook
);
537 (void)new wxRadioBox( panel
, ID_RADIOBOX
, "That", wxPoint(10,160), wxSize(-1,-1), WXSIZEOF(choices2
), choices2
, 1, wxRA_SPECIFY_ROWS
);
538 m_radio
= new wxRadioBox( panel
, ID_RADIOBOX
, "This", wxPoint(10,10), wxSize(-1,-1), WXSIZEOF(choices
), choices
, 1, wxRA_SPECIFY_COLS
);
539 (void)new wxButton( panel
, ID_RADIOBOX_SEL_NUM
, "Select #2", wxPoint(180,30), wxSize(140,30) );
540 (void)new wxButton( panel
, ID_RADIOBOX_SEL_STR
, "Select 'This'", wxPoint(180,80), wxSize(140,30) );
541 m_fontButton
= new wxButton( panel
, ID_SET_FONT
, "Set more Italic font", wxPoint(340,30), wxSize(140,30) );
542 (void)new wxButton( panel
, ID_RADIOBOX_FONT
, "Set Italic font", wxPoint(340,80), wxSize(140,30) );
543 (void)new wxCheckBox( panel
, ID_RADIOBOX_ENABLE
, "Disable", wxPoint(340,130), wxSize(140,30) );
544 wxRadioButton
*rb
= new wxRadioButton( panel
, ID_RADIOBUTTON_1
, "Radiobutton1", wxPoint(210,170), wxSize(110,30) );
545 rb
->SetValue( FALSE
);
546 (void)new wxRadioButton( panel
, ID_RADIOBUTTON_2
, "Radiobutton2", wxPoint(340,170), wxSize(110,30) );
547 m_notebook
->AddPage(panel
, "wxRadioBox", FALSE
, Image_Radio
);
549 panel
= new wxPanel(m_notebook
);
550 (void)new wxStaticBox( panel
, -1, "wxGauge and wxSlider", wxPoint(10,10), wxSize(180,130) );
551 m_gauge
= new wxGauge( panel
, -1, 200, wxPoint(18,50), wxSize(155, 30) );
552 m_slider
= new wxSlider( panel
, ID_SLIDER
, 0, 0, 200, wxPoint(18,90), wxSize(155,-1) );
553 (void)new wxStaticBox( panel
, -1, "Explanation", wxPoint(200,10), wxSize(290,130) );
555 // No wrapping text in wxStaticText yet :-(
556 (void)new wxStaticText( panel
, -1,
562 (void)new wxStaticText( panel
, -1,
563 "In order see the gauge (aka progress bar)\n"
564 "control do something you have to drag the\n"
565 "handle of the slider to the right.\n"
567 "This is also supposed to demonstrate how\n"
568 "to use static controls.\n",
573 m_spintext
= new wxTextCtrl( panel
, -1, "0", wxPoint(20,160), wxSize(80,-1) );
575 m_spinbutton
= new wxSpinButton( panel
, ID_SPIN
, wxPoint(103,159), wxSize(-1,-1) );
576 m_spinbutton
->SetRange(-10,30);
577 m_spinbutton
->SetValue(-5);
579 m_notebook
->AddPage(panel
, "wxGauge", FALSE
, Image_Gauge
);
582 void MyPanel::OnPasteFromClipboard( wxCommandEvent
&WXUNUSED(event
) )
584 // We test for wxUSE_DRAG_AND_DROP also, because data objects
585 // may not be implemented for compilers that can't cope with the OLE
586 // parts in wxUSE_DRAG_AND_DROP.
588 #if wxUSE_CLIPBOARD && wxUSE_DRAG_AND_DROP
589 if (!wxTheClipboard
->Open())
591 *m_text
<< "Error opening the clipboard.\n";
597 *m_text
<< "Successfully opened the clipboard.\n";
600 wxTextDataObject data
;
602 if (wxTheClipboard
->IsSupported( data
.GetFormat() ))
604 *m_text
<< "Clipboard supports requested format.\n";
606 if (wxTheClipboard
->GetData( &data
))
608 *m_text
<< "Successfully retrieved data from the clipboard.\n";
609 *m_multitext
<< data
.GetText() << "\n";
613 *m_text
<< "Error getting data from the clipboard.\n";
618 *m_text
<< "Clipboard doesn't support requested format.\n";
621 wxTheClipboard
->Close();
623 *m_text
<< "Closed the clipboard.\n";
625 wxLogError("Your version of wxWindows is compiled without clipboard support.");
629 void MyPanel::OnCopyToClipboard( wxCommandEvent
&WXUNUSED(event
) )
631 #if wxUSE_CLIPBOARD && wxUSE_DRAG_AND_DROP
632 wxString
text( m_multitext
->GetLineText(0) );
636 *m_text
<< "No text to copy.\n";
641 if (!wxTheClipboard
->Open())
643 *m_text
<< "Error opening the clipboard.\n";
649 *m_text
<< "Successfully opened the clipboard.\n";
652 wxTextDataObject
*data
= new wxTextDataObject( text
);
654 if (!wxTheClipboard
->SetData( data
))
656 *m_text
<< "Error while copying to the clipboard.\n";
660 *m_text
<< "Successfully copied data to the clipboard.\n";
663 wxTheClipboard
->Close();
665 *m_text
<< "Closed the clipboard.\n";
667 wxLogError("Your version of wxWindows is compiled without clipboard support.");
671 void MyPanel::OnMoveToEndOfText( wxCommandEvent
&event
)
673 m_multitext
->SetInsertionPointEnd();
674 m_multitext
->SetFocus();
677 void MyPanel::OnMoveToEndOfEntry( wxCommandEvent
&event
)
679 m_textentry
->SetInsertionPointEnd();
680 m_textentry
->SetFocus();
683 void MyPanel::OnSize( wxSizeEvent
& WXUNUSED(event
) )
687 GetClientSize( &x
, &y
);
689 if (m_notebook
) m_notebook
->SetSize( 2, 2, x
-4, y
*2/3-4 );
690 if (m_text
) m_text
->SetSize( 2, y
*2/3+2, x
-4, y
/3-4 );
693 void MyPanel::OnPageChanged( wxNotebookEvent
&event
)
695 *m_text
<< "Notebook selection is " << event
.GetSelection() << "\n";
698 void MyPanel::OnListBox( wxCommandEvent
&event
)
700 m_text
->AppendText( "ListBox selection string is: " );
701 m_text
->AppendText( event
.GetString() );
702 m_text
->AppendText( "\n" );
705 void MyPanel::OnListBoxDoubleClick( wxCommandEvent
&event
)
707 m_text
->AppendText( "ListBox double click string is: " );
708 m_text
->AppendText( event
.GetString() );
709 m_text
->AppendText( "\n" );
712 void MyPanel::OnListBoxButtons( wxCommandEvent
&event
)
714 switch (event
.GetId())
716 case ID_LISTBOX_ENABLE
:
718 m_text
->AppendText("Checkbox clicked.\n");
719 wxCheckBox
*cb
= (wxCheckBox
*)event
.GetEventObject();
722 cb
->SetToolTip( "Click to enable listbox" );
724 cb
->SetToolTip( "Click to disable listbox" );
725 #endif // wxUSE_TOOLTIPS
726 m_listbox
->Enable( event
.GetInt() == 0 );
729 case ID_LISTBOX_SEL_NUM
:
731 m_listbox
->SetSelection( 2 );
734 case ID_LISTBOX_SEL_STR
:
736 m_listbox
->SetStringSelection( "This" );
739 case ID_LISTBOX_CLEAR
:
744 case ID_LISTBOX_APPEND
:
746 m_listbox
->Append( "Hi!" );
749 case ID_LISTBOX_DELETE
:
751 int idx
= m_listbox
->GetSelection();
752 m_listbox
->Delete( idx
);
755 case ID_LISTBOX_FONT
:
757 m_listbox
->SetFont( *wxITALIC_FONT
);
758 m_checkbox
->SetFont( *wxITALIC_FONT
);
764 void MyPanel::OnChoice( wxCommandEvent
&event
)
766 m_text
->AppendText( "Choice selection string is: " );
767 m_text
->AppendText( event
.GetString() );
768 m_text
->AppendText( "\n" );
771 void MyPanel::OnChoiceButtons( wxCommandEvent
&event
)
773 switch (event
.GetId())
775 case ID_CHOICE_ENABLE
:
777 m_choice
->Enable( event
.GetInt() == 0 );
780 case ID_CHOICE_SEL_NUM
:
782 m_choice
->SetSelection( 2 );
785 case ID_CHOICE_SEL_STR
:
787 m_choice
->SetStringSelection( "This" );
790 case ID_CHOICE_CLEAR
:
795 case ID_CHOICE_APPEND
:
797 m_choice
->Append( "Hi!" );
800 case ID_CHOICE_DELETE
:
802 int idx
= m_choice
->GetSelection();
803 m_choice
->Delete( idx
);
808 m_choice
->SetFont( *wxITALIC_FONT
);
814 void MyPanel::OnCombo( wxCommandEvent
&event
)
816 m_text
->AppendText( "ComboBox selection string is: " );
817 m_text
->AppendText( event
.GetString() );
818 m_text
->AppendText( "\n" );
821 void MyPanel::OnComboButtons( wxCommandEvent
&event
)
823 switch (event
.GetId())
825 case ID_COMBO_ENABLE
:
827 m_combo
->Enable( event
.GetInt() == 0 );
830 case ID_COMBO_SEL_NUM
:
832 m_combo
->SetSelection( 2 );
835 case ID_COMBO_SEL_STR
:
837 m_combo
->SetStringSelection( "This" );
845 case ID_COMBO_APPEND
:
847 m_combo
->Append( "Hi!" );
850 case ID_COMBO_DELETE
:
852 int idx
= m_combo
->GetSelection();
853 m_combo
->Delete( idx
);
858 m_combo
->SetFont( *wxITALIC_FONT
);
864 void MyPanel::OnRadio( wxCommandEvent
&event
)
866 m_text
->AppendText( "RadioBox selection string is: " );
867 m_text
->AppendText( event
.GetString() );
868 m_text
->AppendText( "\n" );
871 void MyPanel::OnRadioButtons( wxCommandEvent
&event
)
873 switch (event
.GetId())
875 case ID_RADIOBOX_ENABLE
:
877 m_radio
->Enable( event
.GetInt() == 0 );
880 case ID_RADIOBOX_SEL_NUM
:
882 m_radio
->SetSelection( 2 );
885 case ID_RADIOBOX_SEL_STR
:
887 m_radio
->SetStringSelection( "This" );
890 case ID_RADIOBOX_FONT
:
892 m_radio
->SetFont( *wxITALIC_FONT
);
898 void MyPanel::OnSetFont( wxCommandEvent
&WXUNUSED(event
) )
900 m_fontButton
->SetFont( *wxITALIC_FONT
);
901 m_text
->SetFont( *wxITALIC_FONT
);
904 void MyPanel::OnSliderUpdate( wxCommandEvent
&WXUNUSED(event
) )
906 m_gauge
->SetValue( m_slider
->GetValue() );
910 void MyPanel::OnSpinUpdate( wxSpinEvent
&event
)
913 value
.Printf( _T("%d"), event
.GetPosition() );
914 m_spintext
->SetValue( value
);
916 value
.Printf( _T("Spin control range: (%d, %d), current = %d\n"),
917 m_spinbutton
->GetMin(), m_spinbutton
->GetMax(),
918 m_spinbutton
->GetValue());
920 m_text
->AppendText(value
);
926 delete m_notebook
->GetImageList();
929 //----------------------------------------------------------------------
931 //----------------------------------------------------------------------
933 BEGIN_EVENT_TABLE(MyFrame
, wxFrame
)
934 EVT_MENU(MINIMAL_QUIT
, MyFrame::OnQuit
)
935 EVT_MENU(MINIMAL_ABOUT
, MyFrame::OnAbout
)
937 EVT_MENU(MINIMAL_SET_TOOLTIP_DELAY
, MyFrame::OnSetTooltipDelay
)
938 EVT_MENU(MINIMAL_ENABLE_TOOLTIPS
, MyFrame::OnToggleTooltips
)
939 #endif // wxUSE_TOOLTIPS
940 EVT_SIZE(MyFrame::OnSize
)
941 EVT_IDLE(MyFrame::OnIdle
)
944 MyFrame::MyFrame(wxFrame
*frame
, char *title
, int x
, int y
, int w
, int h
)
945 : wxFrame(frame
, -1, title
, wxPoint(x
, y
), wxSize(w
, h
))
949 (void)new MyPanel( this, 10, 10, 300, 100 );
952 void MyFrame::OnQuit (wxCommandEvent
& WXUNUSED(event
) )
957 void MyFrame::OnAbout( wxCommandEvent
& WXUNUSED(event
) )
961 wxMessageDialog
dialog(this, "This is a control sample", "About Controls", wxOK
);
968 void MyFrame::OnSetTooltipDelay(wxCommandEvent
& event
)
970 static long s_delay
= 5000;
973 delay
.Printf( _T("%ld"), s_delay
);
975 delay
= wxGetTextFromUser("Enter delay (in milliseconds)",
982 wxSscanf(delay
, _T("%ld"), &s_delay
);
984 wxToolTip::SetDelay(s_delay
);
986 wxLogStatus(this, _T("Tooltip delay set to %ld milliseconds"), s_delay
);
989 void MyFrame::OnToggleTooltips(wxCommandEvent
& event
)
991 static bool s_enabled
= TRUE
;
993 s_enabled
= !s_enabled
;
995 wxToolTip::Enable(s_enabled
);
997 wxLogStatus(this, _T("Tooltips %sabled"), s_enabled
? _T("en") : _T("dis") );
1001 void MyFrame::OnSize( wxSizeEvent
& event
)
1004 msg
.Printf( _("%dx%d"), event
.GetSize().x
, event
.GetSize().y
);
1005 SetStatusText(msg
, 1);
1010 void MyFrame::OnIdle( wxIdleEvent
& WXUNUSED(event
) )
1012 // track the window which has the focus in the status bar
1013 static wxWindow
*s_windowFocus
= (wxWindow
*)NULL
;
1014 wxWindow
*focus
= wxWindow::FindFocus();
1015 if ( focus
&& (focus
!= s_windowFocus
) )
1017 s_windowFocus
= focus
;
1022 _T("Focus: wxWindow = %p, HWND = %08x"),
1024 _T("Focus: wxWindow = %p"),
1028 , s_windowFocus
->GetHWND()