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 OnKeyUp(wxKeyEvent
& event
);
75 void OnChar(wxKeyEvent
& event
);
78 static inline char GetChar(bool on
, char c
) { return on
? c
: '-'; }
79 void LogEvent(const char *name
, wxKeyEvent
& event
) const;
84 class MyPanel
: public wxPanel
87 MyPanel(wxFrame
*frame
, int x
, int y
, int w
, int h
);
90 void OnSize( wxSizeEvent
& event
);
91 void OnListBox( wxCommandEvent
&event
);
92 void OnListBoxDoubleClick( wxCommandEvent
&event
);
93 void OnListBoxButtons( wxCommandEvent
&event
);
94 void OnChoice( wxCommandEvent
&event
);
95 void OnChoiceButtons( wxCommandEvent
&event
);
96 void OnCombo( wxCommandEvent
&event
);
97 void OnComboButtons( wxCommandEvent
&event
);
98 void OnRadio( wxCommandEvent
&event
);
99 void OnRadioButtons( wxCommandEvent
&event
);
100 void OnSetFont( wxCommandEvent
&event
);
101 void OnPageChanged( wxNotebookEvent
&event
);
102 void OnSliderUpdate( wxCommandEvent
&event
);
104 void OnSpinUpdate( wxSpinEvent
&event
);
106 void OnPasteFromClipboard( wxCommandEvent
&event
);
107 void OnCopyToClipboard( wxCommandEvent
&event
);
108 void OnMoveToEndOfText( wxCommandEvent
&event
);
109 void OnMoveToEndOfEntry( wxCommandEvent
&event
);
111 wxListBox
*m_listbox
;
117 wxButton
*m_fontButton
;
119 wxSpinButton
*m_spinbutton
;
121 wxTextCtrl
*m_spintext
;
122 MyTextCtrl
*m_multitext
;
123 MyTextCtrl
*m_textentry
;
124 wxCheckBox
*m_checkbox
;
127 wxNotebook
*m_notebook
;
130 DECLARE_EVENT_TABLE()
133 class MyFrame
: public wxFrame
136 MyFrame(wxFrame
*frame
, char *title
, int x
, int y
, int w
, int h
);
138 void OnQuit(wxCommandEvent
& event
);
139 void OnAbout(wxCommandEvent
& event
);
141 void OnSetTooltipDelay(wxCommandEvent
& event
);
142 void OnToggleTooltips(wxCommandEvent
& event
);
143 #endif // wxUSE_TOOLTIPS
144 void OnIdle( wxIdleEvent
& event
);
145 void OnSize( wxSizeEvent
& event
);
148 DECLARE_EVENT_TABLE()
151 //----------------------------------------------------------------------
153 //----------------------------------------------------------------------
157 //----------------------------------------------------------------------
159 //----------------------------------------------------------------------
168 MINIMAL_SET_TOOLTIP_DELAY
= 200,
169 MINIMAL_ENABLE_TOOLTIPS
174 // Create the main frame window
175 MyFrame
*frame
= new MyFrame((wxFrame
*) NULL
,
176 "Controls wxWindows App",
180 // The wxICON() macros loads an icon from a resource under Windows
181 // and uses an #included XPM image under GTK+ and Motif
183 frame
->SetIcon( wxICON(mondrian
) );
185 wxMenu
*file_menu
= new wxMenu
;
186 file_menu
->Append(MINIMAL_ABOUT
, "&About\tF1");
187 file_menu
->Append(MINIMAL_QUIT
, "E&xit\tAlt-X", "Quit controls sample");
189 wxMenuBar
*menu_bar
= new wxMenuBar( wxMB_DOCKABLE
);
190 menu_bar
->Append(file_menu
, "&File");
193 wxMenu
*tooltip_menu
= new wxMenu
;
194 tooltip_menu
->Append(MINIMAL_SET_TOOLTIP_DELAY
, "Set &delay\tCtrl-D");
195 tooltip_menu
->AppendSeparator();
196 tooltip_menu
->Append(MINIMAL_ENABLE_TOOLTIPS
, "&Toggle tooltips\tCrtl-T",
197 "enable/disable tooltips", TRUE
);
198 tooltip_menu
->Check(MINIMAL_ENABLE_TOOLTIPS
, TRUE
);
199 menu_bar
->Append(tooltip_menu
, "&Tooltips");
200 #endif // wxUSE_TOOLTIPS
202 frame
->SetMenuBar(menu_bar
);
205 frame
->SetCursor(wxCursor(wxCURSOR_HAND
));
212 //----------------------------------------------------------------------
214 //----------------------------------------------------------------------
216 BEGIN_EVENT_TABLE(MyTextCtrl
, wxTextCtrl
)
217 EVT_KEY_DOWN(MyTextCtrl::OnKeyDown
)
218 EVT_KEY_UP(MyTextCtrl::OnKeyUp
)
219 EVT_CHAR(MyTextCtrl::OnChar
)
222 void MyTextCtrl::LogEvent(const char *name
, wxKeyEvent
& event
) const
225 long keycode
= event
.KeyCode();
226 if ( isprint((int)keycode
) )
227 key
.Printf("'%c'", (char)keycode
);
232 case WXK_BACK
: key
= "BACK"; break;
233 case WXK_TAB
: key
= "TAB"; break;
234 case WXK_RETURN
: key
= "RETURN"; break;
235 case WXK_ESCAPE
: key
= "ESCAPE"; break;
236 case WXK_SPACE
: key
= "SPACE"; break;
237 case WXK_DELETE
: key
= "DELETE"; break;
238 case WXK_START
: key
= "START"; break;
239 case WXK_LBUTTON
: key
= "LBUTTON"; break;
240 case WXK_RBUTTON
: key
= "RBUTTON"; break;
241 case WXK_CANCEL
: key
= "CANCEL"; break;
242 case WXK_MBUTTON
: key
= "MBUTTON"; break;
243 case WXK_CLEAR
: key
= "CLEAR"; break;
244 case WXK_SHIFT
: key
= "SHIFT"; break;
245 case WXK_CONTROL
: key
= "CONTROL"; break;
246 case WXK_MENU
: key
= "MENU"; break;
247 case WXK_PAUSE
: key
= "PAUSE"; break;
248 case WXK_CAPITAL
: key
= "CAPITAL"; break;
249 case WXK_PRIOR
: key
= "PRIOR"; break;
250 case WXK_NEXT
: key
= "NEXT"; break;
251 case WXK_END
: key
= "END"; break;
252 case WXK_HOME
: key
= "HOME"; break;
253 case WXK_LEFT
: key
= "LEFT"; break;
254 case WXK_UP
: key
= "UP"; break;
255 case WXK_RIGHT
: key
= "RIGHT"; break;
256 case WXK_DOWN
: key
= "DOWN"; break;
257 case WXK_SELECT
: key
= "SELECT"; break;
258 case WXK_PRINT
: key
= "PRINT"; break;
259 case WXK_EXECUTE
: key
= "EXECUTE"; break;
260 case WXK_SNAPSHOT
: key
= "SNAPSHOT"; break;
261 case WXK_INSERT
: key
= "INSERT"; break;
262 case WXK_HELP
: key
= "HELP"; break;
263 case WXK_NUMPAD0
: key
= "NUMPAD0"; break;
264 case WXK_NUMPAD1
: key
= "NUMPAD1"; break;
265 case WXK_NUMPAD2
: key
= "NUMPAD2"; break;
266 case WXK_NUMPAD3
: key
= "NUMPAD3"; break;
267 case WXK_NUMPAD4
: key
= "NUMPAD4"; break;
268 case WXK_NUMPAD5
: key
= "NUMPAD5"; break;
269 case WXK_NUMPAD6
: key
= "NUMPAD6"; break;
270 case WXK_NUMPAD7
: key
= "NUMPAD7"; break;
271 case WXK_NUMPAD8
: key
= "NUMPAD8"; break;
272 case WXK_NUMPAD9
: key
= "NUMPAD9"; break;
273 case WXK_MULTIPLY
: key
= "MULTIPLY"; break;
274 case WXK_ADD
: key
= "ADD"; break;
275 case WXK_SEPARATOR
: key
= "SEPARATOR"; break;
276 case WXK_SUBTRACT
: key
= "SUBTRACT"; break;
277 case WXK_DECIMAL
: key
= "DECIMAL"; break;
278 case WXK_DIVIDE
: key
= "DIVIDE"; break;
279 case WXK_F1
: key
= "F1"; break;
280 case WXK_F2
: key
= "F2"; break;
281 case WXK_F3
: key
= "F3"; break;
282 case WXK_F4
: key
= "F4"; break;
283 case WXK_F5
: key
= "F5"; break;
284 case WXK_F6
: key
= "F6"; break;
285 case WXK_F7
: key
= "F7"; break;
286 case WXK_F8
: key
= "F8"; break;
287 case WXK_F9
: key
= "F9"; break;
288 case WXK_F10
: key
= "F10"; break;
289 case WXK_F11
: key
= "F11"; break;
290 case WXK_F12
: key
= "F12"; break;
291 case WXK_F13
: key
= "F13"; break;
292 case WXK_F14
: key
= "F14"; break;
293 case WXK_F15
: key
= "F15"; break;
294 case WXK_F16
: key
= "F16"; break;
295 case WXK_F17
: key
= "F17"; break;
296 case WXK_F18
: key
= "F18"; break;
297 case WXK_F19
: key
= "F19"; break;
298 case WXK_F20
: key
= "F20"; break;
299 case WXK_F21
: key
= "F21"; break;
300 case WXK_F22
: key
= "F22"; break;
301 case WXK_F23
: key
= "F23"; break;
302 case WXK_F24
: key
= "F24"; break;
303 case WXK_NUMLOCK
: key
= "NUMLOCK"; break;
304 case WXK_SCROLL
: key
= "SCROLL"; break;
305 case WXK_PAGEUP
: key
= "PAGEUP"; break;
306 case WXK_PAGEDOWN
: key
= "PAGEDOWN"; break;
307 case WXK_NUMPAD_SPACE
: key
= "NUMPAD_SPACE"; break;
308 case WXK_NUMPAD_TAB
: key
= "NUMPAD_TAB"; break;
309 case WXK_NUMPAD_ENTER
: key
= "NUMPAD_ENTER"; break;
310 case WXK_NUMPAD_F1
: key
= "NUMPAD_F1"; break;
311 case WXK_NUMPAD_F2
: key
= "NUMPAD_F2"; break;
312 case WXK_NUMPAD_F3
: key
= "NUMPAD_F3"; break;
313 case WXK_NUMPAD_F4
: key
= "NUMPAD_F4"; break;
314 case WXK_NUMPAD_HOME
: key
= "NUMPAD_HOME"; break;
315 case WXK_NUMPAD_LEFT
: key
= "NUMPAD_LEFT"; break;
316 case WXK_NUMPAD_UP
: key
= "NUMPAD_UP"; break;
317 case WXK_NUMPAD_RIGHT
: key
= "NUMPAD_RIGHT"; break;
318 case WXK_NUMPAD_DOWN
: key
= "NUMPAD_DOWN"; break;
319 case WXK_NUMPAD_PRIOR
: key
= "NUMPAD_PRIOR"; break;
320 case WXK_NUMPAD_PAGEUP
: key
= "NUMPAD_PAGEUP"; break;
321 case WXK_NUMPAD_PAGEDOWN
: key
= "NUMPAD_PAGEDOWN"; break;
322 case WXK_NUMPAD_END
: key
= "NUMPAD_END"; break;
323 case WXK_NUMPAD_BEGIN
: key
= "NUMPAD_BEGIN"; break;
324 case WXK_NUMPAD_INSERT
: key
= "NUMPAD_INSERT"; break;
325 case WXK_NUMPAD_DELETE
: key
= "NUMPAD_DELETE"; break;
326 case WXK_NUMPAD_EQUAL
: key
= "NUMPAD_EQUAL"; break;
327 case WXK_NUMPAD_MULTIPLY
: key
= "NUMPAD_MULTIPLY"; break;
328 case WXK_NUMPAD_ADD
: key
= "NUMPAD_ADD"; break;
329 case WXK_NUMPAD_SEPARATOR
: key
= "NUMPAD_SEPARATOR"; break;
330 case WXK_NUMPAD_SUBTRACT
: key
= "NUMPAD_SUBTRACT"; break;
331 case WXK_NUMPAD_DECIMAL
: key
= "NUMPAD_DECIMAL"; break;
334 key
.Printf("unknown (%ld)", keycode
);
338 wxLogMessage( _T("%s event: %s (flags = %c%c%c%c)"),
341 GetChar(event
.ControlDown(), 'C'),
342 GetChar(event
.AltDown(), 'A'),
343 GetChar(event
.ShiftDown(), 'S'),
344 GetChar(event
.MetaDown(), 'M'));
348 void MyTextCtrl::OnChar(wxKeyEvent
& event
)
350 LogEvent("Char", event
);
355 void MyTextCtrl::OnKeyUp(wxKeyEvent
& event
)
357 LogEvent("Key up", event
);
362 void MyTextCtrl::OnKeyDown(wxKeyEvent
& event
)
364 switch ( event
.KeyCode() )
367 // show current position and text length
369 long line
, column
, pos
= GetInsertionPoint();
370 PositionToXY(pos
, &column
, &line
);
372 wxLogMessage( _T("Current position: %ld\n"
373 "Current line, column: (%ld, %ld)\n"
374 "Number of lines: %ld\n"
375 "Current line length: %ld\n"
376 "Total text length: %ld"),
387 SetInsertionPointEnd();
392 SetInsertionPoint(10);
396 LogEvent("Key down", event
);
401 //----------------------------------------------------------------------
403 //----------------------------------------------------------------------
405 const int ID_NOTEBOOK
= 1000;
407 const int ID_LISTBOX
= 130;
408 const int ID_LISTBOX_SEL_NUM
= 131;
409 const int ID_LISTBOX_SEL_STR
= 132;
410 const int ID_LISTBOX_CLEAR
= 133;
411 const int ID_LISTBOX_APPEND
= 134;
412 const int ID_LISTBOX_DELETE
= 135;
413 const int ID_LISTBOX_FONT
= 136;
414 const int ID_LISTBOX_ENABLE
= 137;
416 const int ID_CHOICE
= 120;
417 const int ID_CHOICE_SEL_NUM
= 121;
418 const int ID_CHOICE_SEL_STR
= 122;
419 const int ID_CHOICE_CLEAR
= 123;
420 const int ID_CHOICE_APPEND
= 124;
421 const int ID_CHOICE_DELETE
= 125;
422 const int ID_CHOICE_FONT
= 126;
423 const int ID_CHOICE_ENABLE
= 127;
425 const int ID_COMBO
= 140;
426 const int ID_COMBO_SEL_NUM
= 141;
427 const int ID_COMBO_SEL_STR
= 142;
428 const int ID_COMBO_CLEAR
= 143;
429 const int ID_COMBO_APPEND
= 144;
430 const int ID_COMBO_DELETE
= 145;
431 const int ID_COMBO_FONT
= 146;
432 const int ID_COMBO_ENABLE
= 147;
434 const int ID_TEXT
= 150;
435 const int ID_PASTE_TEXT
= 151;
436 const int ID_COPY_TEXT
= 152;
437 const int ID_MOVE_END_ENTRY
= 153;
438 const int ID_MOVE_END_ZONE
= 154;
440 const int ID_RADIOBOX
= 160;
441 const int ID_RADIOBOX_SEL_NUM
= 161;
442 const int ID_RADIOBOX_SEL_STR
= 162;
443 const int ID_RADIOBOX_FONT
= 163;
444 const int ID_RADIOBOX_ENABLE
= 164;
446 const int ID_RADIOBUTTON_1
= 166;
447 const int ID_RADIOBUTTON_2
= 167;
449 const int ID_SET_FONT
= 170;
451 const int ID_GAUGE
= 180;
452 const int ID_SLIDER
= 181;
454 const int ID_SPIN
= 182;
456 BEGIN_EVENT_TABLE(MyPanel
, wxPanel
)
457 EVT_SIZE ( MyPanel::OnSize
)
458 EVT_NOTEBOOK_PAGE_CHANGED(ID_NOTEBOOK
, MyPanel::OnPageChanged
)
459 EVT_LISTBOX (ID_LISTBOX
, MyPanel::OnListBox
)
460 EVT_LISTBOX_DCLICK(ID_LISTBOX
, MyPanel::OnListBoxDoubleClick
)
461 EVT_BUTTON (ID_LISTBOX_SEL_NUM
, MyPanel::OnListBoxButtons
)
462 EVT_BUTTON (ID_LISTBOX_SEL_STR
, MyPanel::OnListBoxButtons
)
463 EVT_BUTTON (ID_LISTBOX_CLEAR
, MyPanel::OnListBoxButtons
)
464 EVT_BUTTON (ID_LISTBOX_APPEND
, MyPanel::OnListBoxButtons
)
465 EVT_BUTTON (ID_LISTBOX_DELETE
, MyPanel::OnListBoxButtons
)
466 EVT_BUTTON (ID_LISTBOX_FONT
, MyPanel::OnListBoxButtons
)
467 EVT_CHECKBOX (ID_LISTBOX_ENABLE
, MyPanel::OnListBoxButtons
)
468 EVT_CHOICE (ID_CHOICE
, MyPanel::OnChoice
)
469 EVT_BUTTON (ID_CHOICE_SEL_NUM
, MyPanel::OnChoiceButtons
)
470 EVT_BUTTON (ID_CHOICE_SEL_STR
, MyPanel::OnChoiceButtons
)
471 EVT_BUTTON (ID_CHOICE_CLEAR
, MyPanel::OnChoiceButtons
)
472 EVT_BUTTON (ID_CHOICE_APPEND
, MyPanel::OnChoiceButtons
)
473 EVT_BUTTON (ID_CHOICE_DELETE
, MyPanel::OnChoiceButtons
)
474 EVT_BUTTON (ID_CHOICE_FONT
, MyPanel::OnChoiceButtons
)
475 EVT_CHECKBOX (ID_CHOICE_ENABLE
, MyPanel::OnChoiceButtons
)
476 EVT_COMBOBOX (ID_COMBO
, MyPanel::OnCombo
)
477 EVT_BUTTON (ID_COMBO_SEL_NUM
, MyPanel::OnComboButtons
)
478 EVT_BUTTON (ID_COMBO_SEL_STR
, MyPanel::OnComboButtons
)
479 EVT_BUTTON (ID_COMBO_CLEAR
, MyPanel::OnComboButtons
)
480 EVT_BUTTON (ID_COMBO_APPEND
, MyPanel::OnComboButtons
)
481 EVT_BUTTON (ID_COMBO_DELETE
, MyPanel::OnComboButtons
)
482 EVT_BUTTON (ID_COMBO_FONT
, MyPanel::OnComboButtons
)
483 EVT_CHECKBOX (ID_COMBO_ENABLE
, MyPanel::OnComboButtons
)
484 EVT_RADIOBOX (ID_RADIOBOX
, MyPanel::OnRadio
)
485 EVT_BUTTON (ID_RADIOBOX_SEL_NUM
, MyPanel::OnRadioButtons
)
486 EVT_BUTTON (ID_RADIOBOX_SEL_STR
, MyPanel::OnRadioButtons
)
487 EVT_BUTTON (ID_RADIOBOX_FONT
, MyPanel::OnRadioButtons
)
488 EVT_CHECKBOX (ID_RADIOBOX_ENABLE
, MyPanel::OnRadioButtons
)
489 EVT_BUTTON (ID_SET_FONT
, MyPanel::OnSetFont
)
490 EVT_SLIDER (ID_SLIDER
, MyPanel::OnSliderUpdate
)
492 EVT_SPIN (ID_SPIN
, MyPanel::OnSpinUpdate
)
494 EVT_BUTTON (ID_PASTE_TEXT
, MyPanel::OnPasteFromClipboard
)
495 EVT_BUTTON (ID_COPY_TEXT
, MyPanel::OnCopyToClipboard
)
496 EVT_BUTTON (ID_MOVE_END_ZONE
, MyPanel::OnMoveToEndOfText
)
497 EVT_BUTTON (ID_MOVE_END_ENTRY
, MyPanel::OnMoveToEndOfEntry
)
500 MyPanel::MyPanel( wxFrame
*frame
, int x
, int y
, int w
, int h
)
501 : wxPanel( frame
, -1, wxPoint(x
, y
), wxSize(w
, h
) ),
502 m_text(NULL
), m_notebook(NULL
)
504 // SetBackgroundColour("cadet blue");
506 m_text
= new wxTextCtrl( this, -1, "This is the log window.\n", wxPoint(0,50), wxSize(100,50), wxTE_MULTILINE
);
507 // m_text->SetBackgroundColour("wheat");
509 delete wxLog::SetActiveTarget(new wxLogTextCtrl(m_text
));
511 m_notebook
= new wxNotebook( this, ID_NOTEBOOK
, wxPoint(0,0), wxSize(200,150) );
526 Image_List
, Image_Choice
, Image_Combo
, Image_Text
, Image_Radio
, Image_Gauge
, Image_Max
529 // fill the image list
530 wxImageList
*imagelist
= new wxImageList(32, 32);
532 imagelist
-> Add( wxBitmap( list_xpm
));
533 imagelist
-> Add( wxBitmap( choice_xpm
));
534 imagelist
-> Add( wxBitmap( combo_xpm
));
535 imagelist
-> Add( wxBitmap( text_xpm
));
536 imagelist
-> Add( wxBitmap( radio_xpm
));
537 imagelist
-> Add( wxBitmap( gauge_xpm
));
538 m_notebook
->SetImageList(imagelist
);
539 #elif defined(__WXMSW__)
540 // load images from resources
543 Image_List
, Image_Choice
, Image_Combo
, Image_Text
, Image_Radio
, Image_Gauge
, Image_Max
545 wxImageList
*imagelist
= new wxImageList(16, 16, FALSE
, Image_Max
);
547 static const char *s_iconNames
[Image_Max
] =
549 "list", "choice", "combo", "text", "radio", "gauge"
552 for ( size_t n
= 0; n
< Image_Max
; n
++ )
554 wxBitmap
bmp(s_iconNames
[n
]);
555 if ( !bmp
.Ok() || (imagelist
->Add(bmp
) == -1) )
557 wxLogWarning("Couldn't load the image '%s' for the notebook page %d.",
562 m_notebook
->SetImageList(imagelist
);
566 #define Image_List -1
567 #define Image_Choice -1
568 #define Image_Combo -1
569 #define Image_Text -1
570 #define Image_Radio -1
571 #define Image_Gauge -1
576 wxButton
*button
= (wxButton
*) NULL
; /* who did this ? */
577 wxPanel
*panel
= (wxPanel
*) NULL
;
579 panel
= new wxPanel(m_notebook
);
580 m_listbox
= new wxListBox( panel
, ID_LISTBOX
, wxPoint(10,10), wxSize(120,70), 5, choices
, wxLB_ALWAYS_SB
);
581 m_listbox
->SetCursor(*wxCROSS_CURSOR
);
583 m_listbox
->SetToolTip( "This is a list box" );
584 #endif // wxUSE_TOOLTIPS
586 (void)new wxButton( panel
, ID_LISTBOX_SEL_NUM
, "Select #2", wxPoint(180,30), wxSize(140,30) );
587 (void)new wxButton( panel
, ID_LISTBOX_SEL_STR
, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
588 (void)new wxButton( panel
, ID_LISTBOX_CLEAR
, "Clear", wxPoint(180,80), wxSize(140,30) );
589 (void)new wxButton( panel
, ID_LISTBOX_APPEND
, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
590 (void)new wxButton( panel
, ID_LISTBOX_DELETE
, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
591 button
= new wxButton( panel
, ID_LISTBOX_FONT
, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
593 button
->SetToolTip( "Press here to set italic font" );
594 #endif // wxUSE_TOOLTIPS
596 m_checkbox
= new wxCheckBox( panel
, ID_LISTBOX_ENABLE
, "&Disable", wxPoint(20,130), wxSize(-1, -1), wxALIGN_RIGHT
);
597 m_checkbox
->SetValue(FALSE
);
599 m_checkbox
->SetToolTip( "Click here to disable the listbox" );
600 #endif // wxUSE_TOOLTIPS
601 m_notebook
->AddPage(panel
, "wxListBox", TRUE
, Image_List
);
603 panel
= new wxPanel(m_notebook
);
604 m_choice
= new wxChoice( panel
, ID_CHOICE
, wxPoint(10,10), wxSize(120,-1), 5, choices
);
605 m_choice
->SetBackgroundColour( "red" );
606 (void)new wxButton( panel
, ID_CHOICE_SEL_NUM
, "Select #2", wxPoint(180,30), wxSize(140,30) );
607 (void)new wxButton( panel
, ID_CHOICE_SEL_STR
, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
608 (void)new wxButton( panel
, ID_CHOICE_CLEAR
, "Clear", wxPoint(180,80), wxSize(140,30) );
609 (void)new wxButton( panel
, ID_CHOICE_APPEND
, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
610 (void)new wxButton( panel
, ID_CHOICE_DELETE
, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
611 (void)new wxButton( panel
, ID_CHOICE_FONT
, "Set Italic font", wxPoint(340,130), wxSize(140,30) );
612 (void)new wxCheckBox( panel
, ID_CHOICE_ENABLE
, "Disable", wxPoint(20,130), wxSize(140,30) );
613 m_notebook
->AddPage(panel
, "wxChoice", FALSE
, Image_Choice
);
615 panel
= new wxPanel(m_notebook
);
616 m_combo
= new wxComboBox( panel
, ID_COMBO
, "This", wxPoint(10,10), wxSize(120,-1), 5, choices
, wxCB_READONLY
);
617 (void)new wxButton( panel
, ID_COMBO_SEL_NUM
, "Select #2", wxPoint(180,30), wxSize(140,30) );
618 (void)new wxButton( panel
, ID_COMBO_SEL_STR
, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
619 (void)new wxButton( panel
, ID_COMBO_CLEAR
, "Clear", wxPoint(180,80), wxSize(140,30) );
620 (void)new wxButton( panel
, ID_COMBO_APPEND
, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
621 (void)new wxButton( panel
, ID_COMBO_DELETE
, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
622 (void)new wxButton( panel
, ID_COMBO_FONT
, "Set Italic font", wxPoint(340,130), wxSize(140,30) );
623 (void)new wxCheckBox( panel
, ID_COMBO_ENABLE
, "Disable", wxPoint(20,130), wxSize(140,30) );
624 m_notebook
->AddPage(panel
, "wxComboBox", FALSE
, Image_Combo
);
626 panel
= new wxPanel(m_notebook
);
627 m_textentry
= new MyTextCtrl( panel
, -1, "Some text.", wxPoint(10,10), wxSize(320,28), //0);
629 (*m_textentry
) << " Appended.";
630 m_textentry
->SetInsertionPoint(0);
631 m_textentry
->WriteText( "Prepended. " );
633 m_multitext
= new MyTextCtrl( panel
, ID_TEXT
, "Some text.", wxPoint(10,50), wxSize(320,70), wxTE_MULTILINE
);
634 (*m_multitext
) << " Appended.";
635 m_multitext
->SetInsertionPoint(0);
636 m_multitext
->WriteText( "Prepended. " );
637 m_multitext
->AppendText( "\nPress function keys for test different tests." );
639 (*m_multitext
) << "\nDoes it have cross cursor?";
640 m_multitext
->SetCursor(*wxCROSS_CURSOR
);
642 new MyTextCtrl( panel
, -1, "This one is with wxTE_PROCESS_TAB style.", wxPoint(10,120), wxSize(320,70), wxTE_MULTILINE
| wxTE_PROCESS_TAB
);
644 m_multitext
->AppendText( "\nThis ctrl has a tooltip. " );
645 m_multitext
->SetToolTip("Press F1 here.");
646 #endif // wxUSE_TOOLTIPS
648 (void)new wxStaticBox( panel
, -1, "&Move cursor to the end of:", wxPoint(345, 0), wxSize(160, 100) );
649 (void)new wxButton( panel
, ID_MOVE_END_ENTRY
, "Text &entry", wxPoint(370, 20), wxSize(110, 30) );
650 (void)new wxButton( panel
, ID_MOVE_END_ZONE
, "Text &zone", wxPoint(370, 60), wxSize(110, 30) );
651 (void)new wxStaticBox( panel
, -1, "wx&Clipboard", wxPoint(345,100), wxSize(160,100) );
652 (void)new wxButton( panel
, ID_COPY_TEXT
, "C&opy line 1", wxPoint(370,120), wxSize(110,30) );
653 (void)new wxButton( panel
, ID_PASTE_TEXT
, "&Paste text", wxPoint(370,160), wxSize(110,30) );
654 m_notebook
->AddPage( panel
, "wxTextCtrl" , FALSE
, Image_Text
);
656 wxString choices2
[] =
660 "Fourth", "Fifth", "Sixth",
661 "Seventh", "Eighth", "Nineth", "Tenth" */
664 panel
= new wxPanel(m_notebook
);
665 (void)new wxRadioBox( panel
, ID_RADIOBOX
, "That", wxPoint(10,160), wxSize(-1,-1), WXSIZEOF(choices2
), choices2
, 1, wxRA_SPECIFY_ROWS
);
666 m_radio
= new wxRadioBox( panel
, ID_RADIOBOX
, "This", wxPoint(10,10), wxSize(-1,-1), WXSIZEOF(choices
), choices
, 1, wxRA_SPECIFY_COLS
);
667 (void)new wxButton( panel
, ID_RADIOBOX_SEL_NUM
, "Select #2", wxPoint(180,30), wxSize(140,30) );
668 (void)new wxButton( panel
, ID_RADIOBOX_SEL_STR
, "Select 'This'", wxPoint(180,80), wxSize(140,30) );
669 m_fontButton
= new wxButton( panel
, ID_SET_FONT
, "Set more Italic font", wxPoint(340,30), wxSize(140,30) );
670 (void)new wxButton( panel
, ID_RADIOBOX_FONT
, "Set Italic font", wxPoint(340,80), wxSize(140,30) );
671 (void)new wxCheckBox( panel
, ID_RADIOBOX_ENABLE
, "Disable", wxPoint(340,130), wxSize(140,30) );
672 wxRadioButton
*rb
= new wxRadioButton( panel
, ID_RADIOBUTTON_1
, "Radiobutton1", wxPoint(210,170), wxSize(110,30) );
673 rb
->SetValue( FALSE
);
674 (void)new wxRadioButton( panel
, ID_RADIOBUTTON_2
, "Radiobutton2", wxPoint(340,170), wxSize(110,30) );
675 m_notebook
->AddPage(panel
, "wxRadioBox", FALSE
, Image_Radio
);
677 panel
= new wxPanel(m_notebook
);
678 (void)new wxStaticBox( panel
, -1, "wxGauge and wxSlider", wxPoint(10,10), wxSize(180,130) );
679 m_gauge
= new wxGauge( panel
, -1, 200, wxPoint(18,50), wxSize(155, 30) );
680 m_slider
= new wxSlider( panel
, ID_SLIDER
, 0, 0, 200, wxPoint(18,90), wxSize(155,-1), wxSL_LABELS
);
681 (void)new wxStaticBox( panel
, -1, "Explanation", wxPoint(200,10), wxSize(290,130) );
683 // No wrapping text in wxStaticText yet :-(
684 (void)new wxStaticText( panel
, -1,
690 (void)new wxStaticText( panel
, -1,
691 "In order see the gauge (aka progress bar)\n"
692 "control do something you have to drag the\n"
693 "handle of the slider to the right.\n"
695 "This is also supposed to demonstrate how\n"
696 "to use static controls.\n",
701 m_spintext
= new wxTextCtrl( panel
, -1, "0", wxPoint(20,160), wxSize(80,-1) );
703 m_spinbutton
= new wxSpinButton( panel
, ID_SPIN
, wxPoint(103,159), wxSize(-1,-1) );
704 m_spinbutton
->SetRange(-10,30);
705 m_spinbutton
->SetValue(-5);
707 m_notebook
->AddPage(panel
, "wxGauge", FALSE
, Image_Gauge
);
710 void MyPanel::OnPasteFromClipboard( wxCommandEvent
&WXUNUSED(event
) )
712 // We test for wxUSE_DRAG_AND_DROP also, because data objects
713 // may not be implemented for compilers that can't cope with the OLE
714 // parts in wxUSE_DRAG_AND_DROP.
716 #if wxUSE_CLIPBOARD && wxUSE_DRAG_AND_DROP
717 if (!wxTheClipboard
->Open())
719 *m_text
<< "Error opening the clipboard.\n";
725 *m_text
<< "Successfully opened the clipboard.\n";
728 wxTextDataObject data
;
730 if (wxTheClipboard
->IsSupported( data
.GetFormat() ))
732 *m_text
<< "Clipboard supports requested format.\n";
734 if (wxTheClipboard
->GetData( &data
))
736 *m_text
<< "Successfully retrieved data from the clipboard.\n";
737 *m_multitext
<< data
.GetText() << "\n";
741 *m_text
<< "Error getting data from the clipboard.\n";
746 *m_text
<< "Clipboard doesn't support requested format.\n";
749 wxTheClipboard
->Close();
751 *m_text
<< "Closed the clipboard.\n";
753 wxLogError("Your version of wxWindows is compiled without clipboard support.");
757 void MyPanel::OnCopyToClipboard( wxCommandEvent
&WXUNUSED(event
) )
759 #if wxUSE_CLIPBOARD && wxUSE_DRAG_AND_DROP
760 wxString
text( m_multitext
->GetLineText(0) );
764 *m_text
<< "No text to copy.\n";
769 if (!wxTheClipboard
->Open())
771 *m_text
<< "Error opening the clipboard.\n";
777 *m_text
<< "Successfully opened the clipboard.\n";
780 wxTextDataObject
*data
= new wxTextDataObject( text
);
782 if (!wxTheClipboard
->SetData( data
))
784 *m_text
<< "Error while copying to the clipboard.\n";
788 *m_text
<< "Successfully copied data to the clipboard.\n";
791 wxTheClipboard
->Close();
793 *m_text
<< "Closed the clipboard.\n";
795 wxLogError("Your version of wxWindows is compiled without clipboard support.");
799 void MyPanel::OnMoveToEndOfText( wxCommandEvent
&event
)
801 m_multitext
->SetInsertionPointEnd();
802 m_multitext
->SetFocus();
805 void MyPanel::OnMoveToEndOfEntry( wxCommandEvent
&event
)
807 m_textentry
->SetInsertionPointEnd();
808 m_textentry
->SetFocus();
811 void MyPanel::OnSize( wxSizeEvent
& WXUNUSED(event
) )
815 GetClientSize( &x
, &y
);
817 if (m_notebook
) m_notebook
->SetSize( 2, 2, x
-4, y
*2/3-4 );
818 if (m_text
) m_text
->SetSize( 2, y
*2/3+2, x
-4, y
/3-4 );
821 void MyPanel::OnPageChanged( wxNotebookEvent
&event
)
823 *m_text
<< "Notebook selection is " << event
.GetSelection() << "\n";
826 void MyPanel::OnListBox( wxCommandEvent
&event
)
828 m_text
->AppendText( "ListBox event selection string is: " );
829 m_text
->AppendText( event
.GetString() );
830 m_text
->AppendText( "\n" );
831 m_text
->AppendText( "ListBox control selection string is: " );
832 m_text
->AppendText( m_listbox
->GetStringSelection() );
833 m_text
->AppendText( "\n" );
836 void MyPanel::OnListBoxDoubleClick( wxCommandEvent
&event
)
838 m_text
->AppendText( "ListBox double click string is: " );
839 m_text
->AppendText( event
.GetString() );
840 m_text
->AppendText( "\n" );
843 void MyPanel::OnListBoxButtons( wxCommandEvent
&event
)
845 switch (event
.GetId())
847 case ID_LISTBOX_ENABLE
:
849 m_text
->AppendText("Checkbox clicked.\n");
850 wxCheckBox
*cb
= (wxCheckBox
*)event
.GetEventObject();
853 cb
->SetToolTip( "Click to enable listbox" );
855 cb
->SetToolTip( "Click to disable listbox" );
856 #endif // wxUSE_TOOLTIPS
857 m_listbox
->Enable( event
.GetInt() == 0 );
860 case ID_LISTBOX_SEL_NUM
:
862 m_listbox
->SetSelection( 2 );
865 case ID_LISTBOX_SEL_STR
:
867 m_listbox
->SetStringSelection( "This" );
870 case ID_LISTBOX_CLEAR
:
875 case ID_LISTBOX_APPEND
:
877 m_listbox
->Append( "Hi!" );
880 case ID_LISTBOX_DELETE
:
882 int idx
= m_listbox
->GetSelection();
883 m_listbox
->Delete( idx
);
886 case ID_LISTBOX_FONT
:
888 m_listbox
->SetFont( *wxITALIC_FONT
);
889 m_checkbox
->SetFont( *wxITALIC_FONT
);
895 void MyPanel::OnChoice( wxCommandEvent
&event
)
897 m_text
->AppendText( "Choice event selection string is: " );
898 m_text
->AppendText( event
.GetString() );
899 m_text
->AppendText( "\n" );
900 m_text
->AppendText( "Choice control selection string is: " );
901 m_text
->AppendText( m_choice
->GetStringSelection() );
902 m_text
->AppendText( "\n" );
905 void MyPanel::OnChoiceButtons( wxCommandEvent
&event
)
907 switch (event
.GetId())
909 case ID_CHOICE_ENABLE
:
911 m_choice
->Enable( event
.GetInt() == 0 );
914 case ID_CHOICE_SEL_NUM
:
916 m_choice
->SetSelection( 2 );
919 case ID_CHOICE_SEL_STR
:
921 m_choice
->SetStringSelection( "This" );
924 case ID_CHOICE_CLEAR
:
929 case ID_CHOICE_APPEND
:
931 m_choice
->Append( "Hi!" );
934 case ID_CHOICE_DELETE
:
936 int idx
= m_choice
->GetSelection();
937 m_choice
->Delete( idx
);
942 m_choice
->SetFont( *wxITALIC_FONT
);
948 void MyPanel::OnCombo( wxCommandEvent
&event
)
950 m_text
->AppendText( "ComboBox event selection string is: " );
951 m_text
->AppendText( event
.GetString() );
952 m_text
->AppendText( "\n" );
953 m_text
->AppendText( "ComboBox control selection string is: " );
954 m_text
->AppendText( m_combo
->GetStringSelection() );
955 m_text
->AppendText( "\n" );
958 void MyPanel::OnComboButtons( wxCommandEvent
&event
)
960 switch (event
.GetId())
962 case ID_COMBO_ENABLE
:
964 m_combo
->Enable( event
.GetInt() == 0 );
967 case ID_COMBO_SEL_NUM
:
969 m_combo
->SetSelection( 2 );
972 case ID_COMBO_SEL_STR
:
974 m_combo
->SetStringSelection( "This" );
982 case ID_COMBO_APPEND
:
984 m_combo
->Append( "Hi!" );
987 case ID_COMBO_DELETE
:
989 int idx
= m_combo
->GetSelection();
990 m_combo
->Delete( idx
);
995 m_combo
->SetFont( *wxITALIC_FONT
);
1001 void MyPanel::OnRadio( wxCommandEvent
&event
)
1003 m_text
->AppendText( "RadioBox selection string is: " );
1004 m_text
->AppendText( event
.GetString() );
1005 m_text
->AppendText( "\n" );
1008 void MyPanel::OnRadioButtons( wxCommandEvent
&event
)
1010 switch (event
.GetId())
1012 case ID_RADIOBOX_ENABLE
:
1014 m_radio
->Enable( event
.GetInt() == 0 );
1017 case ID_RADIOBOX_SEL_NUM
:
1019 m_radio
->SetSelection( 2 );
1022 case ID_RADIOBOX_SEL_STR
:
1024 m_radio
->SetStringSelection( "This" );
1027 case ID_RADIOBOX_FONT
:
1029 m_radio
->SetFont( *wxITALIC_FONT
);
1035 void MyPanel::OnSetFont( wxCommandEvent
&WXUNUSED(event
) )
1037 m_fontButton
->SetFont( *wxITALIC_FONT
);
1038 m_text
->SetFont( *wxITALIC_FONT
);
1041 void MyPanel::OnSliderUpdate( wxCommandEvent
&WXUNUSED(event
) )
1043 m_gauge
->SetValue( m_slider
->GetValue() );
1047 void MyPanel::OnSpinUpdate( wxSpinEvent
&event
)
1050 value
.Printf( _T("%d"), event
.GetPosition() );
1051 m_spintext
->SetValue( value
);
1053 value
.Printf( _T("Spin control range: (%d, %d), current = %d\n"),
1054 m_spinbutton
->GetMin(), m_spinbutton
->GetMax(),
1055 m_spinbutton
->GetValue());
1057 m_text
->AppendText(value
);
1063 delete m_notebook
->GetImageList();
1066 //----------------------------------------------------------------------
1068 //----------------------------------------------------------------------
1070 BEGIN_EVENT_TABLE(MyFrame
, wxFrame
)
1071 EVT_MENU(MINIMAL_QUIT
, MyFrame::OnQuit
)
1072 EVT_MENU(MINIMAL_ABOUT
, MyFrame::OnAbout
)
1074 EVT_MENU(MINIMAL_SET_TOOLTIP_DELAY
, MyFrame::OnSetTooltipDelay
)
1075 EVT_MENU(MINIMAL_ENABLE_TOOLTIPS
, MyFrame::OnToggleTooltips
)
1076 #endif // wxUSE_TOOLTIPS
1077 EVT_SIZE(MyFrame::OnSize
)
1078 EVT_IDLE(MyFrame::OnIdle
)
1081 MyFrame::MyFrame(wxFrame
*frame
, char *title
, int x
, int y
, int w
, int h
)
1082 : wxFrame(frame
, -1, title
, wxPoint(x
, y
), wxSize(w
, h
))
1086 (void)new MyPanel( this, 10, 10, 300, 100 );
1089 void MyFrame::OnQuit (wxCommandEvent
& WXUNUSED(event
) )
1094 void MyFrame::OnAbout( wxCommandEvent
& WXUNUSED(event
) )
1096 wxBeginBusyCursor();
1098 wxMessageDialog
dialog(this, "This is a control sample", "About Controls", wxOK
);
1105 void MyFrame::OnSetTooltipDelay(wxCommandEvent
& event
)
1107 static long s_delay
= 5000;
1110 delay
.Printf( _T("%ld"), s_delay
);
1112 delay
= wxGetTextFromUser("Enter delay (in milliseconds)",
1113 "Set tooltip delay",
1117 return; // cancelled
1119 wxSscanf(delay
, _T("%ld"), &s_delay
);
1121 wxToolTip::SetDelay(s_delay
);
1123 wxLogStatus(this, _T("Tooltip delay set to %ld milliseconds"), s_delay
);
1126 void MyFrame::OnToggleTooltips(wxCommandEvent
& event
)
1128 static bool s_enabled
= TRUE
;
1130 s_enabled
= !s_enabled
;
1132 wxToolTip::Enable(s_enabled
);
1134 wxLogStatus(this, _T("Tooltips %sabled"), s_enabled
? _T("en") : _T("dis") );
1138 void MyFrame::OnSize( wxSizeEvent
& event
)
1141 msg
.Printf( _("%dx%d"), event
.GetSize().x
, event
.GetSize().y
);
1142 SetStatusText(msg
, 1);
1147 void MyFrame::OnIdle( wxIdleEvent
& WXUNUSED(event
) )
1149 // track the window which has the focus in the status bar
1150 static wxWindow
*s_windowFocus
= (wxWindow
*)NULL
;
1151 wxWindow
*focus
= wxWindow::FindFocus();
1152 if ( focus
&& (focus
!= s_windowFocus
) )
1154 s_windowFocus
= focus
;
1159 _T("Focus: wxWindow = %p, HWND = %08x"),
1161 _T("Focus: wxWindow = %p"),
1165 , s_windowFocus
->GetHWND()