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 OnPageChanging( wxNotebookEvent
&event
);
103 void OnSliderUpdate( wxCommandEvent
&event
);
105 void OnSpinUpdate( wxSpinEvent
&event
);
107 void OnPasteFromClipboard( wxCommandEvent
&event
);
108 void OnCopyToClipboard( wxCommandEvent
&event
);
109 void OnMoveToEndOfText( wxCommandEvent
&event
);
110 void OnMoveToEndOfEntry( wxCommandEvent
&event
);
112 wxListBox
*m_listbox
;
118 wxButton
*m_fontButton
;
120 wxSpinButton
*m_spinbutton
;
122 wxTextCtrl
*m_spintext
;
123 MyTextCtrl
*m_multitext
;
124 MyTextCtrl
*m_textentry
;
125 wxCheckBox
*m_checkbox
;
128 wxNotebook
*m_notebook
;
131 DECLARE_EVENT_TABLE()
134 class MyFrame
: public wxFrame
137 MyFrame(wxFrame
*frame
, char *title
, int x
, int y
, int w
, int h
);
139 void OnQuit(wxCommandEvent
& event
);
140 void OnAbout(wxCommandEvent
& event
);
142 void OnSetTooltipDelay(wxCommandEvent
& event
);
143 void OnToggleTooltips(wxCommandEvent
& event
);
144 #endif // wxUSE_TOOLTIPS
145 void OnIdle( wxIdleEvent
& event
);
146 void OnSize( wxSizeEvent
& event
);
149 DECLARE_EVENT_TABLE()
152 //----------------------------------------------------------------------
154 //----------------------------------------------------------------------
158 //----------------------------------------------------------------------
160 //----------------------------------------------------------------------
169 MINIMAL_SET_TOOLTIP_DELAY
= 200,
170 MINIMAL_ENABLE_TOOLTIPS
175 // Create the main frame window
176 MyFrame
*frame
= new MyFrame((wxFrame
*) NULL
,
177 "Controls wxWindows App",
181 // The wxICON() macros loads an icon from a resource under Windows
182 // and uses an #included XPM image under GTK+ and Motif
184 frame
->SetIcon( wxICON(mondrian
) );
186 wxMenu
*file_menu
= new wxMenu
;
187 file_menu
->Append(MINIMAL_ABOUT
, "&About\tF1");
188 file_menu
->Append(MINIMAL_QUIT
, "E&xit\tAlt-X", "Quit controls sample");
190 wxMenuBar
*menu_bar
= new wxMenuBar( wxMB_DOCKABLE
);
191 menu_bar
->Append(file_menu
, "&File");
194 wxMenu
*tooltip_menu
= new wxMenu
;
195 tooltip_menu
->Append(MINIMAL_SET_TOOLTIP_DELAY
, "Set &delay\tCtrl-D");
196 tooltip_menu
->AppendSeparator();
197 tooltip_menu
->Append(MINIMAL_ENABLE_TOOLTIPS
, "&Toggle tooltips\tCrtl-T",
198 "enable/disable tooltips", TRUE
);
199 tooltip_menu
->Check(MINIMAL_ENABLE_TOOLTIPS
, TRUE
);
200 menu_bar
->Append(tooltip_menu
, "&Tooltips");
201 #endif // wxUSE_TOOLTIPS
203 frame
->SetMenuBar(menu_bar
);
206 frame
->SetCursor(wxCursor(wxCURSOR_HAND
));
213 //----------------------------------------------------------------------
215 //----------------------------------------------------------------------
217 BEGIN_EVENT_TABLE(MyTextCtrl
, wxTextCtrl
)
218 EVT_KEY_DOWN(MyTextCtrl::OnKeyDown
)
219 EVT_KEY_UP(MyTextCtrl::OnKeyUp
)
220 EVT_CHAR(MyTextCtrl::OnChar
)
223 void MyTextCtrl::LogEvent(const char *name
, wxKeyEvent
& event
) const
226 long keycode
= event
.KeyCode();
227 if ( isprint((int)keycode
) )
228 key
.Printf("'%c'", (char)keycode
);
233 case WXK_BACK
: key
= "BACK"; break;
234 case WXK_TAB
: key
= "TAB"; break;
235 case WXK_RETURN
: key
= "RETURN"; break;
236 case WXK_ESCAPE
: key
= "ESCAPE"; break;
237 case WXK_SPACE
: key
= "SPACE"; break;
238 case WXK_DELETE
: key
= "DELETE"; break;
239 case WXK_START
: key
= "START"; break;
240 case WXK_LBUTTON
: key
= "LBUTTON"; break;
241 case WXK_RBUTTON
: key
= "RBUTTON"; break;
242 case WXK_CANCEL
: key
= "CANCEL"; break;
243 case WXK_MBUTTON
: key
= "MBUTTON"; break;
244 case WXK_CLEAR
: key
= "CLEAR"; break;
245 case WXK_SHIFT
: key
= "SHIFT"; break;
246 case WXK_CONTROL
: key
= "CONTROL"; break;
247 case WXK_MENU
: key
= "MENU"; break;
248 case WXK_PAUSE
: key
= "PAUSE"; break;
249 case WXK_CAPITAL
: key
= "CAPITAL"; break;
250 case WXK_PRIOR
: key
= "PRIOR"; break;
251 case WXK_NEXT
: key
= "NEXT"; break;
252 case WXK_END
: key
= "END"; break;
253 case WXK_HOME
: key
= "HOME"; break;
254 case WXK_LEFT
: key
= "LEFT"; break;
255 case WXK_UP
: key
= "UP"; break;
256 case WXK_RIGHT
: key
= "RIGHT"; break;
257 case WXK_DOWN
: key
= "DOWN"; break;
258 case WXK_SELECT
: key
= "SELECT"; break;
259 case WXK_PRINT
: key
= "PRINT"; break;
260 case WXK_EXECUTE
: key
= "EXECUTE"; break;
261 case WXK_SNAPSHOT
: key
= "SNAPSHOT"; break;
262 case WXK_INSERT
: key
= "INSERT"; break;
263 case WXK_HELP
: key
= "HELP"; break;
264 case WXK_NUMPAD0
: key
= "NUMPAD0"; break;
265 case WXK_NUMPAD1
: key
= "NUMPAD1"; break;
266 case WXK_NUMPAD2
: key
= "NUMPAD2"; break;
267 case WXK_NUMPAD3
: key
= "NUMPAD3"; break;
268 case WXK_NUMPAD4
: key
= "NUMPAD4"; break;
269 case WXK_NUMPAD5
: key
= "NUMPAD5"; break;
270 case WXK_NUMPAD6
: key
= "NUMPAD6"; break;
271 case WXK_NUMPAD7
: key
= "NUMPAD7"; break;
272 case WXK_NUMPAD8
: key
= "NUMPAD8"; break;
273 case WXK_NUMPAD9
: key
= "NUMPAD9"; break;
274 case WXK_MULTIPLY
: key
= "MULTIPLY"; break;
275 case WXK_ADD
: key
= "ADD"; break;
276 case WXK_SEPARATOR
: key
= "SEPARATOR"; break;
277 case WXK_SUBTRACT
: key
= "SUBTRACT"; break;
278 case WXK_DECIMAL
: key
= "DECIMAL"; break;
279 case WXK_DIVIDE
: key
= "DIVIDE"; break;
280 case WXK_F1
: key
= "F1"; break;
281 case WXK_F2
: key
= "F2"; break;
282 case WXK_F3
: key
= "F3"; break;
283 case WXK_F4
: key
= "F4"; break;
284 case WXK_F5
: key
= "F5"; break;
285 case WXK_F6
: key
= "F6"; break;
286 case WXK_F7
: key
= "F7"; break;
287 case WXK_F8
: key
= "F8"; break;
288 case WXK_F9
: key
= "F9"; break;
289 case WXK_F10
: key
= "F10"; break;
290 case WXK_F11
: key
= "F11"; break;
291 case WXK_F12
: key
= "F12"; break;
292 case WXK_F13
: key
= "F13"; break;
293 case WXK_F14
: key
= "F14"; break;
294 case WXK_F15
: key
= "F15"; break;
295 case WXK_F16
: key
= "F16"; break;
296 case WXK_F17
: key
= "F17"; break;
297 case WXK_F18
: key
= "F18"; break;
298 case WXK_F19
: key
= "F19"; break;
299 case WXK_F20
: key
= "F20"; break;
300 case WXK_F21
: key
= "F21"; break;
301 case WXK_F22
: key
= "F22"; break;
302 case WXK_F23
: key
= "F23"; break;
303 case WXK_F24
: key
= "F24"; break;
304 case WXK_NUMLOCK
: key
= "NUMLOCK"; break;
305 case WXK_SCROLL
: key
= "SCROLL"; break;
306 case WXK_PAGEUP
: key
= "PAGEUP"; break;
307 case WXK_PAGEDOWN
: key
= "PAGEDOWN"; break;
308 case WXK_NUMPAD_SPACE
: key
= "NUMPAD_SPACE"; break;
309 case WXK_NUMPAD_TAB
: key
= "NUMPAD_TAB"; break;
310 case WXK_NUMPAD_ENTER
: key
= "NUMPAD_ENTER"; break;
311 case WXK_NUMPAD_F1
: key
= "NUMPAD_F1"; break;
312 case WXK_NUMPAD_F2
: key
= "NUMPAD_F2"; break;
313 case WXK_NUMPAD_F3
: key
= "NUMPAD_F3"; break;
314 case WXK_NUMPAD_F4
: key
= "NUMPAD_F4"; break;
315 case WXK_NUMPAD_HOME
: key
= "NUMPAD_HOME"; break;
316 case WXK_NUMPAD_LEFT
: key
= "NUMPAD_LEFT"; break;
317 case WXK_NUMPAD_UP
: key
= "NUMPAD_UP"; break;
318 case WXK_NUMPAD_RIGHT
: key
= "NUMPAD_RIGHT"; break;
319 case WXK_NUMPAD_DOWN
: key
= "NUMPAD_DOWN"; break;
320 case WXK_NUMPAD_PRIOR
: key
= "NUMPAD_PRIOR"; break;
321 case WXK_NUMPAD_PAGEUP
: key
= "NUMPAD_PAGEUP"; break;
322 case WXK_NUMPAD_PAGEDOWN
: key
= "NUMPAD_PAGEDOWN"; break;
323 case WXK_NUMPAD_END
: key
= "NUMPAD_END"; break;
324 case WXK_NUMPAD_BEGIN
: key
= "NUMPAD_BEGIN"; break;
325 case WXK_NUMPAD_INSERT
: key
= "NUMPAD_INSERT"; break;
326 case WXK_NUMPAD_DELETE
: key
= "NUMPAD_DELETE"; break;
327 case WXK_NUMPAD_EQUAL
: key
= "NUMPAD_EQUAL"; break;
328 case WXK_NUMPAD_MULTIPLY
: key
= "NUMPAD_MULTIPLY"; break;
329 case WXK_NUMPAD_ADD
: key
= "NUMPAD_ADD"; break;
330 case WXK_NUMPAD_SEPARATOR
: key
= "NUMPAD_SEPARATOR"; break;
331 case WXK_NUMPAD_SUBTRACT
: key
= "NUMPAD_SUBTRACT"; break;
332 case WXK_NUMPAD_DECIMAL
: key
= "NUMPAD_DECIMAL"; break;
335 key
.Printf("unknown (%ld)", keycode
);
339 wxLogMessage( _T("%s event: %s (flags = %c%c%c%c)"),
342 GetChar(event
.ControlDown(), 'C'),
343 GetChar(event
.AltDown(), 'A'),
344 GetChar(event
.ShiftDown(), 'S'),
345 GetChar(event
.MetaDown(), 'M'));
349 void MyTextCtrl::OnChar(wxKeyEvent
& event
)
351 LogEvent("Char", event
);
356 void MyTextCtrl::OnKeyUp(wxKeyEvent
& event
)
358 LogEvent("Key up", event
);
363 void MyTextCtrl::OnKeyDown(wxKeyEvent
& event
)
365 switch ( event
.KeyCode() )
368 // show current position and text length
370 long line
, column
, pos
= GetInsertionPoint();
371 PositionToXY(pos
, &column
, &line
);
373 wxLogMessage( _T("Current position: %ld\n"
374 "Current line, column: (%ld, %ld)\n"
375 "Number of lines: %ld\n"
376 "Current line length: %ld\n"
377 "Total text length: %ld"),
388 SetInsertionPointEnd();
393 SetInsertionPoint(10);
397 LogEvent("Key down", event
);
402 //----------------------------------------------------------------------
404 //----------------------------------------------------------------------
406 const int ID_NOTEBOOK
= 1000;
408 const int ID_LISTBOX
= 130;
409 const int ID_LISTBOX_SEL_NUM
= 131;
410 const int ID_LISTBOX_SEL_STR
= 132;
411 const int ID_LISTBOX_CLEAR
= 133;
412 const int ID_LISTBOX_APPEND
= 134;
413 const int ID_LISTBOX_DELETE
= 135;
414 const int ID_LISTBOX_FONT
= 136;
415 const int ID_LISTBOX_ENABLE
= 137;
417 const int ID_CHOICE
= 120;
418 const int ID_CHOICE_SEL_NUM
= 121;
419 const int ID_CHOICE_SEL_STR
= 122;
420 const int ID_CHOICE_CLEAR
= 123;
421 const int ID_CHOICE_APPEND
= 124;
422 const int ID_CHOICE_DELETE
= 125;
423 const int ID_CHOICE_FONT
= 126;
424 const int ID_CHOICE_ENABLE
= 127;
426 const int ID_COMBO
= 140;
427 const int ID_COMBO_SEL_NUM
= 141;
428 const int ID_COMBO_SEL_STR
= 142;
429 const int ID_COMBO_CLEAR
= 143;
430 const int ID_COMBO_APPEND
= 144;
431 const int ID_COMBO_DELETE
= 145;
432 const int ID_COMBO_FONT
= 146;
433 const int ID_COMBO_ENABLE
= 147;
435 const int ID_TEXT
= 150;
436 const int ID_PASTE_TEXT
= 151;
437 const int ID_COPY_TEXT
= 152;
438 const int ID_MOVE_END_ENTRY
= 153;
439 const int ID_MOVE_END_ZONE
= 154;
441 const int ID_RADIOBOX
= 160;
442 const int ID_RADIOBOX_SEL_NUM
= 161;
443 const int ID_RADIOBOX_SEL_STR
= 162;
444 const int ID_RADIOBOX_FONT
= 163;
445 const int ID_RADIOBOX_ENABLE
= 164;
447 const int ID_RADIOBUTTON_1
= 166;
448 const int ID_RADIOBUTTON_2
= 167;
450 const int ID_SET_FONT
= 170;
452 const int ID_GAUGE
= 180;
453 const int ID_SLIDER
= 181;
455 const int ID_SPIN
= 182;
457 BEGIN_EVENT_TABLE(MyPanel
, wxPanel
)
458 EVT_SIZE ( MyPanel::OnSize
)
459 EVT_NOTEBOOK_PAGE_CHANGING(ID_NOTEBOOK
, MyPanel::OnPageChanging
)
460 EVT_NOTEBOOK_PAGE_CHANGED(ID_NOTEBOOK
, MyPanel::OnPageChanged
)
461 EVT_LISTBOX (ID_LISTBOX
, MyPanel::OnListBox
)
462 EVT_LISTBOX_DCLICK(ID_LISTBOX
, MyPanel::OnListBoxDoubleClick
)
463 EVT_BUTTON (ID_LISTBOX_SEL_NUM
, MyPanel::OnListBoxButtons
)
464 EVT_BUTTON (ID_LISTBOX_SEL_STR
, MyPanel::OnListBoxButtons
)
465 EVT_BUTTON (ID_LISTBOX_CLEAR
, MyPanel::OnListBoxButtons
)
466 EVT_BUTTON (ID_LISTBOX_APPEND
, MyPanel::OnListBoxButtons
)
467 EVT_BUTTON (ID_LISTBOX_DELETE
, MyPanel::OnListBoxButtons
)
468 EVT_BUTTON (ID_LISTBOX_FONT
, MyPanel::OnListBoxButtons
)
469 EVT_CHECKBOX (ID_LISTBOX_ENABLE
, MyPanel::OnListBoxButtons
)
470 EVT_CHOICE (ID_CHOICE
, MyPanel::OnChoice
)
471 EVT_BUTTON (ID_CHOICE_SEL_NUM
, MyPanel::OnChoiceButtons
)
472 EVT_BUTTON (ID_CHOICE_SEL_STR
, MyPanel::OnChoiceButtons
)
473 EVT_BUTTON (ID_CHOICE_CLEAR
, MyPanel::OnChoiceButtons
)
474 EVT_BUTTON (ID_CHOICE_APPEND
, MyPanel::OnChoiceButtons
)
475 EVT_BUTTON (ID_CHOICE_DELETE
, MyPanel::OnChoiceButtons
)
476 EVT_BUTTON (ID_CHOICE_FONT
, MyPanel::OnChoiceButtons
)
477 EVT_CHECKBOX (ID_CHOICE_ENABLE
, MyPanel::OnChoiceButtons
)
478 EVT_COMBOBOX (ID_COMBO
, MyPanel::OnCombo
)
479 EVT_BUTTON (ID_COMBO_SEL_NUM
, MyPanel::OnComboButtons
)
480 EVT_BUTTON (ID_COMBO_SEL_STR
, MyPanel::OnComboButtons
)
481 EVT_BUTTON (ID_COMBO_CLEAR
, MyPanel::OnComboButtons
)
482 EVT_BUTTON (ID_COMBO_APPEND
, MyPanel::OnComboButtons
)
483 EVT_BUTTON (ID_COMBO_DELETE
, MyPanel::OnComboButtons
)
484 EVT_BUTTON (ID_COMBO_FONT
, MyPanel::OnComboButtons
)
485 EVT_CHECKBOX (ID_COMBO_ENABLE
, MyPanel::OnComboButtons
)
486 EVT_RADIOBOX (ID_RADIOBOX
, MyPanel::OnRadio
)
487 EVT_BUTTON (ID_RADIOBOX_SEL_NUM
, MyPanel::OnRadioButtons
)
488 EVT_BUTTON (ID_RADIOBOX_SEL_STR
, MyPanel::OnRadioButtons
)
489 EVT_BUTTON (ID_RADIOBOX_FONT
, MyPanel::OnRadioButtons
)
490 EVT_CHECKBOX (ID_RADIOBOX_ENABLE
, MyPanel::OnRadioButtons
)
491 EVT_BUTTON (ID_SET_FONT
, MyPanel::OnSetFont
)
492 EVT_SLIDER (ID_SLIDER
, MyPanel::OnSliderUpdate
)
494 EVT_SPIN (ID_SPIN
, MyPanel::OnSpinUpdate
)
496 EVT_BUTTON (ID_PASTE_TEXT
, MyPanel::OnPasteFromClipboard
)
497 EVT_BUTTON (ID_COPY_TEXT
, MyPanel::OnCopyToClipboard
)
498 EVT_BUTTON (ID_MOVE_END_ZONE
, MyPanel::OnMoveToEndOfText
)
499 EVT_BUTTON (ID_MOVE_END_ENTRY
, MyPanel::OnMoveToEndOfEntry
)
502 MyPanel::MyPanel( wxFrame
*frame
, int x
, int y
, int w
, int h
)
503 : wxPanel( frame
, -1, wxPoint(x
, y
), wxSize(w
, h
) ),
504 m_text(NULL
), m_notebook(NULL
)
506 // SetBackgroundColour("cadet blue");
508 m_text
= new wxTextCtrl( this, -1, "This is the log window.\n", wxPoint(0,50), wxSize(100,50), wxTE_MULTILINE
);
509 // m_text->SetBackgroundColour("wheat");
511 delete wxLog::SetActiveTarget(new wxLogStderr
);
513 m_notebook
= new wxNotebook( this, ID_NOTEBOOK
, wxPoint(0,0), wxSize(200,150) );
528 Image_List
, Image_Choice
, Image_Combo
, Image_Text
, Image_Radio
, Image_Gauge
, Image_Max
531 // fill the image list
532 wxImageList
*imagelist
= new wxImageList(32, 32);
534 imagelist
-> Add( wxBitmap( list_xpm
));
535 imagelist
-> Add( wxBitmap( choice_xpm
));
536 imagelist
-> Add( wxBitmap( combo_xpm
));
537 imagelist
-> Add( wxBitmap( text_xpm
));
538 imagelist
-> Add( wxBitmap( radio_xpm
));
539 imagelist
-> Add( wxBitmap( gauge_xpm
));
540 m_notebook
->SetImageList(imagelist
);
541 #elif defined(__WXMSW__)
542 // load images from resources
545 Image_List
, Image_Choice
, Image_Combo
, Image_Text
, Image_Radio
, Image_Gauge
, Image_Max
547 wxImageList
*imagelist
= new wxImageList(16, 16, FALSE
, Image_Max
);
549 static const char *s_iconNames
[Image_Max
] =
551 "list", "choice", "combo", "text", "radio", "gauge"
554 for ( size_t n
= 0; n
< Image_Max
; n
++ )
556 wxBitmap
bmp(s_iconNames
[n
]);
557 if ( !bmp
.Ok() || (imagelist
->Add(bmp
) == -1) )
559 wxLogWarning("Couldn't load the image '%s' for the notebook page %d.",
564 m_notebook
->SetImageList(imagelist
);
568 #define Image_List -1
569 #define Image_Choice -1
570 #define Image_Combo -1
571 #define Image_Text -1
572 #define Image_Radio -1
573 #define Image_Gauge -1
578 wxButton
*button
= (wxButton
*) NULL
; /* who did this ? */
579 wxPanel
*panel
= (wxPanel
*) NULL
;
581 panel
= new wxPanel(m_notebook
);
582 m_listbox
= new wxListBox( panel
, ID_LISTBOX
, wxPoint(10,10), wxSize(120,70), 5, choices
, wxLB_ALWAYS_SB
);
583 m_listbox
->SetCursor(*wxCROSS_CURSOR
);
585 m_listbox
->SetToolTip( "This is a list box" );
586 #endif // wxUSE_TOOLTIPS
588 (void)new wxButton( panel
, ID_LISTBOX_SEL_NUM
, "Select #2", wxPoint(180,30), wxSize(140,30) );
589 (void)new wxButton( panel
, ID_LISTBOX_SEL_STR
, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
590 (void)new wxButton( panel
, ID_LISTBOX_CLEAR
, "Clear", wxPoint(180,80), wxSize(140,30) );
591 (void)new wxButton( panel
, ID_LISTBOX_APPEND
, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
592 (void)new wxButton( panel
, ID_LISTBOX_DELETE
, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
593 button
= new wxButton( panel
, ID_LISTBOX_FONT
, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
595 button
->SetToolTip( "Press here to set italic font" );
596 #endif // wxUSE_TOOLTIPS
598 m_checkbox
= new wxCheckBox( panel
, ID_LISTBOX_ENABLE
, "&Disable", wxPoint(20,130), wxSize(-1, -1), wxALIGN_RIGHT
);
599 m_checkbox
->SetValue(FALSE
);
601 m_checkbox
->SetToolTip( "Click here to disable the listbox" );
602 #endif // wxUSE_TOOLTIPS
603 m_notebook
->AddPage(panel
, "wxListBox", TRUE
, Image_List
);
605 panel
= new wxPanel(m_notebook
);
606 m_choice
= new wxChoice( panel
, ID_CHOICE
, wxPoint(10,10), wxSize(120,-1), 5, choices
);
607 m_choice
->SetBackgroundColour( "red" );
608 (void)new wxButton( panel
, ID_CHOICE_SEL_NUM
, "Select #2", wxPoint(180,30), wxSize(140,30) );
609 (void)new wxButton( panel
, ID_CHOICE_SEL_STR
, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
610 (void)new wxButton( panel
, ID_CHOICE_CLEAR
, "Clear", wxPoint(180,80), wxSize(140,30) );
611 (void)new wxButton( panel
, ID_CHOICE_APPEND
, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
612 (void)new wxButton( panel
, ID_CHOICE_DELETE
, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
613 (void)new wxButton( panel
, ID_CHOICE_FONT
, "Set Italic font", wxPoint(340,130), wxSize(140,30) );
614 (void)new wxCheckBox( panel
, ID_CHOICE_ENABLE
, "Disable", wxPoint(20,130), wxSize(140,30) );
615 m_notebook
->AddPage(panel
, "wxChoice", FALSE
, Image_Choice
);
617 panel
= new wxPanel(m_notebook
);
618 m_combo
= new wxComboBox( panel
, ID_COMBO
, "This", wxPoint(10,10), wxSize(120,-1), 5, choices
, wxCB_READONLY
);
619 (void)new wxButton( panel
, ID_COMBO_SEL_NUM
, "Select #2", wxPoint(180,30), wxSize(140,30) );
620 (void)new wxButton( panel
, ID_COMBO_SEL_STR
, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
621 (void)new wxButton( panel
, ID_COMBO_CLEAR
, "Clear", wxPoint(180,80), wxSize(140,30) );
622 (void)new wxButton( panel
, ID_COMBO_APPEND
, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
623 (void)new wxButton( panel
, ID_COMBO_DELETE
, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
624 (void)new wxButton( panel
, ID_COMBO_FONT
, "Set Italic font", wxPoint(340,130), wxSize(140,30) );
625 (void)new wxCheckBox( panel
, ID_COMBO_ENABLE
, "Disable", wxPoint(20,130), wxSize(140,30) );
626 m_notebook
->AddPage(panel
, "wxComboBox", FALSE
, Image_Combo
);
628 panel
= new wxPanel(m_notebook
);
629 m_textentry
= new MyTextCtrl( panel
, -1, "Some text.", wxPoint(10,10), wxSize(320,28), //0);
631 (*m_textentry
) << " Appended.";
632 m_textentry
->SetInsertionPoint(0);
633 m_textentry
->WriteText( "Prepended. " );
635 m_multitext
= new MyTextCtrl( panel
, ID_TEXT
, "Some text.", wxPoint(10,50), wxSize(320,70), wxTE_MULTILINE
);
636 (*m_multitext
) << " Appended.";
637 m_multitext
->SetInsertionPoint(0);
638 m_multitext
->WriteText( "Prepended. " );
639 m_multitext
->AppendText( "\nPress function keys for test different tests." );
641 (*m_multitext
) << "\nDoes it have cross cursor?";
642 m_multitext
->SetCursor(*wxCROSS_CURSOR
);
644 new MyTextCtrl( panel
, -1, "This one is with wxTE_PROCESS_TAB style.", wxPoint(10,120), wxSize(320,70), wxTE_MULTILINE
| wxTE_PROCESS_TAB
);
646 m_multitext
->AppendText( "\nThis ctrl has a tooltip. " );
647 m_multitext
->SetToolTip("Press F1 here.");
648 #endif // wxUSE_TOOLTIPS
650 (void)new wxStaticBox( panel
, -1, "&Move cursor to the end of:", wxPoint(345, 0), wxSize(160, 100) );
651 (void)new wxButton( panel
, ID_MOVE_END_ENTRY
, "Text &entry", wxPoint(370, 20), wxSize(110, 30) );
652 (void)new wxButton( panel
, ID_MOVE_END_ZONE
, "Text &zone", wxPoint(370, 60), wxSize(110, 30) );
653 (void)new wxStaticBox( panel
, -1, "wx&Clipboard", wxPoint(345,100), wxSize(160,100) );
654 (void)new wxButton( panel
, ID_COPY_TEXT
, "C&opy line 1", wxPoint(370,120), wxSize(110,30) );
655 (void)new wxButton( panel
, ID_PASTE_TEXT
, "&Paste text", wxPoint(370,160), wxSize(110,30) );
656 m_notebook
->AddPage( panel
, "wxTextCtrl" , FALSE
, Image_Text
);
658 wxString choices2
[] =
662 "Fourth", "Fifth", "Sixth",
663 "Seventh", "Eighth", "Nineth", "Tenth" */
666 panel
= new wxPanel(m_notebook
);
667 (void)new wxRadioBox( panel
, ID_RADIOBOX
, "That", wxPoint(10,160), wxSize(-1,-1), WXSIZEOF(choices2
), choices2
, 1, wxRA_SPECIFY_ROWS
);
668 m_radio
= new wxRadioBox( panel
, ID_RADIOBOX
, "This", wxPoint(10,10), wxSize(-1,-1), WXSIZEOF(choices
), choices
, 1, wxRA_SPECIFY_COLS
);
669 (void)new wxButton( panel
, ID_RADIOBOX_SEL_NUM
, "Select #2", wxPoint(180,30), wxSize(140,30) );
670 (void)new wxButton( panel
, ID_RADIOBOX_SEL_STR
, "Select 'This'", wxPoint(180,80), wxSize(140,30) );
671 m_fontButton
= new wxButton( panel
, ID_SET_FONT
, "Set more Italic font", wxPoint(340,30), wxSize(140,30) );
672 (void)new wxButton( panel
, ID_RADIOBOX_FONT
, "Set Italic font", wxPoint(340,80), wxSize(140,30) );
673 (void)new wxCheckBox( panel
, ID_RADIOBOX_ENABLE
, "Disable", wxPoint(340,130), wxSize(140,30) );
674 wxRadioButton
*rb
= new wxRadioButton( panel
, ID_RADIOBUTTON_1
, "Radiobutton1", wxPoint(210,170), wxSize(110,30) );
675 rb
->SetValue( FALSE
);
676 (void)new wxRadioButton( panel
, ID_RADIOBUTTON_2
, "Radiobutton2", wxPoint(340,170), wxSize(110,30) );
677 m_notebook
->AddPage(panel
, "wxRadioBox", FALSE
, Image_Radio
);
679 panel
= new wxPanel(m_notebook
);
680 (void)new wxStaticBox( panel
, -1, "wxGauge and wxSlider", wxPoint(10,10), wxSize(180,130) );
681 m_gauge
= new wxGauge( panel
, -1, 200, wxPoint(18,50), wxSize(155, 30) );
682 m_slider
= new wxSlider( panel
, ID_SLIDER
, 0, 0, 200, wxPoint(18,90), wxSize(155,-1), wxSL_LABELS
);
683 (void)new wxStaticBox( panel
, -1, "Explanation", wxPoint(200,10), wxSize(290,130) );
685 // No wrapping text in wxStaticText yet :-(
686 (void)new wxStaticText( panel
, -1,
692 (void)new wxStaticText( panel
, -1,
693 "In order see the gauge (aka progress bar)\n"
694 "control do something you have to drag the\n"
695 "handle of the slider to the right.\n"
697 "This is also supposed to demonstrate how\n"
698 "to use static controls.\n",
703 m_spintext
= new wxTextCtrl( panel
, -1, "0", wxPoint(20,160), wxSize(80,-1) );
705 m_spinbutton
= new wxSpinButton( panel
, ID_SPIN
, wxPoint(103,159), wxSize(-1,-1) );
706 m_spinbutton
->SetRange(-10,30);
707 m_spinbutton
->SetValue(-5);
709 m_notebook
->AddPage(panel
, "wxGauge", FALSE
, Image_Gauge
);
712 void MyPanel::OnPasteFromClipboard( wxCommandEvent
&WXUNUSED(event
) )
714 // We test for wxUSE_DRAG_AND_DROP also, because data objects
715 // may not be implemented for compilers that can't cope with the OLE
716 // parts in wxUSE_DRAG_AND_DROP.
718 #if wxUSE_CLIPBOARD && wxUSE_DRAG_AND_DROP
719 if (!wxTheClipboard
->Open())
721 *m_text
<< "Error opening the clipboard.\n";
727 *m_text
<< "Successfully opened the clipboard.\n";
730 wxTextDataObject data
;
732 if (wxTheClipboard
->IsSupported( data
.GetFormat() ))
734 *m_text
<< "Clipboard supports requested format.\n";
736 if (wxTheClipboard
->GetData( &data
))
738 *m_text
<< "Successfully retrieved data from the clipboard.\n";
739 *m_multitext
<< data
.GetText() << "\n";
743 *m_text
<< "Error getting data from the clipboard.\n";
748 *m_text
<< "Clipboard doesn't support requested format.\n";
751 wxTheClipboard
->Close();
753 *m_text
<< "Closed the clipboard.\n";
755 wxLogError("Your version of wxWindows is compiled without clipboard support.");
759 void MyPanel::OnCopyToClipboard( wxCommandEvent
&WXUNUSED(event
) )
761 #if wxUSE_CLIPBOARD && wxUSE_DRAG_AND_DROP
762 wxString
text( m_multitext
->GetLineText(0) );
766 *m_text
<< "No text to copy.\n";
771 if (!wxTheClipboard
->Open())
773 *m_text
<< "Error opening the clipboard.\n";
779 *m_text
<< "Successfully opened the clipboard.\n";
782 wxTextDataObject
*data
= new wxTextDataObject( text
);
784 if (!wxTheClipboard
->SetData( data
))
786 *m_text
<< "Error while copying to the clipboard.\n";
790 *m_text
<< "Successfully copied data to the clipboard.\n";
793 wxTheClipboard
->Close();
795 *m_text
<< "Closed the clipboard.\n";
797 wxLogError("Your version of wxWindows is compiled without clipboard support.");
801 void MyPanel::OnMoveToEndOfText( wxCommandEvent
&event
)
803 m_multitext
->SetInsertionPointEnd();
804 m_multitext
->SetFocus();
807 void MyPanel::OnMoveToEndOfEntry( wxCommandEvent
&event
)
809 m_textentry
->SetInsertionPointEnd();
810 m_textentry
->SetFocus();
813 void MyPanel::OnSize( wxSizeEvent
& WXUNUSED(event
) )
817 GetClientSize( &x
, &y
);
819 if (m_notebook
) m_notebook
->SetSize( 2, 2, x
-4, y
*2/3-4 );
820 if (m_text
) m_text
->SetSize( 2, y
*2/3+2, x
-4, y
/3-4 );
823 void MyPanel::OnPageChanging( wxNotebookEvent
&event
)
825 int selNew
= event
.GetSelection(),
826 selOld
= event
.GetOldSelection();
827 if ( selOld
== 2 && selNew
== 4 )
829 wxMessageBox("This demonstrates how a program may prevent the "
830 "page change from taking place - the current page will "
831 "stay the third one", "Conntrol sample",
832 wxICON_INFORMATION
| wxOK
);
838 *m_text
<< "Notebook selection is being changed from "
839 << selOld
<< " to " << selNew
<< "\n";
843 void MyPanel::OnPageChanged( wxNotebookEvent
&event
)
845 *m_text
<< "Notebook selection is " << event
.GetSelection() << "\n";
848 void MyPanel::OnListBox( wxCommandEvent
&event
)
850 m_text
->AppendText( "ListBox event selection string is: " );
851 m_text
->AppendText( event
.GetString() );
852 m_text
->AppendText( "\n" );
853 m_text
->AppendText( "ListBox control selection string is: " );
854 m_text
->AppendText( m_listbox
->GetStringSelection() );
855 m_text
->AppendText( "\n" );
858 void MyPanel::OnListBoxDoubleClick( wxCommandEvent
&event
)
860 m_text
->AppendText( "ListBox double click string is: " );
861 m_text
->AppendText( event
.GetString() );
862 m_text
->AppendText( "\n" );
865 void MyPanel::OnListBoxButtons( wxCommandEvent
&event
)
867 switch (event
.GetId())
869 case ID_LISTBOX_ENABLE
:
871 m_text
->AppendText("Checkbox clicked.\n");
872 wxCheckBox
*cb
= (wxCheckBox
*)event
.GetEventObject();
875 cb
->SetToolTip( "Click to enable listbox" );
877 cb
->SetToolTip( "Click to disable listbox" );
878 #endif // wxUSE_TOOLTIPS
879 m_listbox
->Enable( event
.GetInt() == 0 );
882 case ID_LISTBOX_SEL_NUM
:
884 m_listbox
->SetSelection( 2 );
887 case ID_LISTBOX_SEL_STR
:
889 m_listbox
->SetStringSelection( "This" );
892 case ID_LISTBOX_CLEAR
:
897 case ID_LISTBOX_APPEND
:
899 m_listbox
->Append( "Hi!" );
902 case ID_LISTBOX_DELETE
:
904 int idx
= m_listbox
->GetSelection();
905 m_listbox
->Delete( idx
);
908 case ID_LISTBOX_FONT
:
910 m_listbox
->SetFont( *wxITALIC_FONT
);
911 m_checkbox
->SetFont( *wxITALIC_FONT
);
917 void MyPanel::OnChoice( wxCommandEvent
&event
)
919 m_text
->AppendText( "Choice event selection string is: " );
920 m_text
->AppendText( event
.GetString() );
921 m_text
->AppendText( "\n" );
922 m_text
->AppendText( "Choice control selection string is: " );
923 m_text
->AppendText( m_choice
->GetStringSelection() );
924 m_text
->AppendText( "\n" );
927 void MyPanel::OnChoiceButtons( wxCommandEvent
&event
)
929 switch (event
.GetId())
931 case ID_CHOICE_ENABLE
:
933 m_choice
->Enable( event
.GetInt() == 0 );
936 case ID_CHOICE_SEL_NUM
:
938 m_choice
->SetSelection( 2 );
941 case ID_CHOICE_SEL_STR
:
943 m_choice
->SetStringSelection( "This" );
946 case ID_CHOICE_CLEAR
:
951 case ID_CHOICE_APPEND
:
953 m_choice
->Append( "Hi!" );
956 case ID_CHOICE_DELETE
:
958 int idx
= m_choice
->GetSelection();
959 m_choice
->Delete( idx
);
964 m_choice
->SetFont( *wxITALIC_FONT
);
970 void MyPanel::OnCombo( wxCommandEvent
&event
)
972 m_text
->AppendText( "ComboBox event selection string is: " );
973 m_text
->AppendText( event
.GetString() );
974 m_text
->AppendText( "\n" );
975 m_text
->AppendText( "ComboBox control selection string is: " );
976 m_text
->AppendText( m_combo
->GetStringSelection() );
977 m_text
->AppendText( "\n" );
980 void MyPanel::OnComboButtons( wxCommandEvent
&event
)
982 switch (event
.GetId())
984 case ID_COMBO_ENABLE
:
986 m_combo
->Enable( event
.GetInt() == 0 );
989 case ID_COMBO_SEL_NUM
:
991 m_combo
->SetSelection( 2 );
994 case ID_COMBO_SEL_STR
:
996 m_combo
->SetStringSelection( "This" );
1004 case ID_COMBO_APPEND
:
1006 m_combo
->Append( "Hi!" );
1009 case ID_COMBO_DELETE
:
1011 int idx
= m_combo
->GetSelection();
1012 m_combo
->Delete( idx
);
1017 m_combo
->SetFont( *wxITALIC_FONT
);
1023 void MyPanel::OnRadio( wxCommandEvent
&event
)
1025 m_text
->AppendText( "RadioBox selection string is: " );
1026 m_text
->AppendText( event
.GetString() );
1027 m_text
->AppendText( "\n" );
1030 void MyPanel::OnRadioButtons( wxCommandEvent
&event
)
1032 switch (event
.GetId())
1034 case ID_RADIOBOX_ENABLE
:
1036 m_radio
->Enable( event
.GetInt() == 0 );
1039 case ID_RADIOBOX_SEL_NUM
:
1041 m_radio
->SetSelection( 2 );
1044 case ID_RADIOBOX_SEL_STR
:
1046 m_radio
->SetStringSelection( "This" );
1049 case ID_RADIOBOX_FONT
:
1051 m_radio
->SetFont( *wxITALIC_FONT
);
1057 void MyPanel::OnSetFont( wxCommandEvent
&WXUNUSED(event
) )
1059 m_fontButton
->SetFont( *wxITALIC_FONT
);
1060 m_text
->SetFont( *wxITALIC_FONT
);
1063 void MyPanel::OnSliderUpdate( wxCommandEvent
&WXUNUSED(event
) )
1065 m_gauge
->SetValue( m_slider
->GetValue() );
1069 void MyPanel::OnSpinUpdate( wxSpinEvent
&event
)
1072 value
.Printf( _T("%d"), event
.GetPosition() );
1073 m_spintext
->SetValue( value
);
1075 value
.Printf( _T("Spin control range: (%d, %d), current = %d\n"),
1076 m_spinbutton
->GetMin(), m_spinbutton
->GetMax(),
1077 m_spinbutton
->GetValue());
1079 m_text
->AppendText(value
);
1085 delete m_notebook
->GetImageList();
1088 //----------------------------------------------------------------------
1090 //----------------------------------------------------------------------
1092 BEGIN_EVENT_TABLE(MyFrame
, wxFrame
)
1093 EVT_MENU(MINIMAL_QUIT
, MyFrame::OnQuit
)
1094 EVT_MENU(MINIMAL_ABOUT
, MyFrame::OnAbout
)
1096 EVT_MENU(MINIMAL_SET_TOOLTIP_DELAY
, MyFrame::OnSetTooltipDelay
)
1097 EVT_MENU(MINIMAL_ENABLE_TOOLTIPS
, MyFrame::OnToggleTooltips
)
1098 #endif // wxUSE_TOOLTIPS
1099 EVT_SIZE(MyFrame::OnSize
)
1100 EVT_IDLE(MyFrame::OnIdle
)
1103 MyFrame::MyFrame(wxFrame
*frame
, char *title
, int x
, int y
, int w
, int h
)
1104 : wxFrame(frame
, -1, title
, wxPoint(x
, y
), wxSize(w
, h
))
1108 (void)new MyPanel( this, 10, 10, 300, 100 );
1111 void MyFrame::OnQuit (wxCommandEvent
& WXUNUSED(event
) )
1116 void MyFrame::OnAbout( wxCommandEvent
& WXUNUSED(event
) )
1118 wxBeginBusyCursor();
1120 wxMessageDialog
dialog(this, "This is a control sample", "About Controls", wxOK
);
1127 void MyFrame::OnSetTooltipDelay(wxCommandEvent
& event
)
1129 static long s_delay
= 5000;
1132 delay
.Printf( _T("%ld"), s_delay
);
1134 delay
= wxGetTextFromUser("Enter delay (in milliseconds)",
1135 "Set tooltip delay",
1139 return; // cancelled
1141 wxSscanf(delay
, _T("%ld"), &s_delay
);
1143 wxToolTip::SetDelay(s_delay
);
1145 wxLogStatus(this, _T("Tooltip delay set to %ld milliseconds"), s_delay
);
1148 void MyFrame::OnToggleTooltips(wxCommandEvent
& event
)
1150 static bool s_enabled
= TRUE
;
1152 s_enabled
= !s_enabled
;
1154 wxToolTip::Enable(s_enabled
);
1156 wxLogStatus(this, _T("Tooltips %sabled"), s_enabled
? _T("en") : _T("dis") );
1160 void MyFrame::OnSize( wxSizeEvent
& event
)
1163 msg
.Printf( _("%dx%d"), event
.GetSize().x
, event
.GetSize().y
);
1164 SetStatusText(msg
, 1);
1169 void MyFrame::OnIdle( wxIdleEvent
& WXUNUSED(event
) )
1171 // track the window which has the focus in the status bar
1172 static wxWindow
*s_windowFocus
= (wxWindow
*)NULL
;
1173 wxWindow
*focus
= wxWindow::FindFocus();
1174 if ( focus
&& (focus
!= s_windowFocus
) )
1176 s_windowFocus
= focus
;
1181 _T("Focus: wxWindow = %p, HWND = %08x"),
1183 _T("Focus: wxWindow = %p"),
1187 , s_windowFocus
->GetHWND()