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");
187 file_menu
->Append(MINIMAL_QUIT
, "E&xit");
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");
195 tooltip_menu
->AppendSeparator();
196 tooltip_menu
->Append(MINIMAL_ENABLE_TOOLTIPS
, "&Toggle tooltips",
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 ( isascii((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;
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_CHANGED(ID_NOTEBOOK
, MyPanel::OnPageChanged
)
460 EVT_LISTBOX (ID_LISTBOX
, MyPanel::OnListBox
)
461 EVT_LISTBOX_DCLICK(ID_LISTBOX
, MyPanel::OnListBoxDoubleClick
)
462 EVT_BUTTON (ID_LISTBOX_SEL_NUM
, MyPanel::OnListBoxButtons
)
463 EVT_BUTTON (ID_LISTBOX_SEL_STR
, MyPanel::OnListBoxButtons
)
464 EVT_BUTTON (ID_LISTBOX_CLEAR
, MyPanel::OnListBoxButtons
)
465 EVT_BUTTON (ID_LISTBOX_APPEND
, MyPanel::OnListBoxButtons
)
466 EVT_BUTTON (ID_LISTBOX_DELETE
, MyPanel::OnListBoxButtons
)
467 EVT_BUTTON (ID_LISTBOX_FONT
, MyPanel::OnListBoxButtons
)
468 EVT_CHECKBOX (ID_LISTBOX_ENABLE
, MyPanel::OnListBoxButtons
)
469 EVT_CHOICE (ID_CHOICE
, MyPanel::OnChoice
)
470 EVT_BUTTON (ID_CHOICE_SEL_NUM
, MyPanel::OnChoiceButtons
)
471 EVT_BUTTON (ID_CHOICE_SEL_STR
, MyPanel::OnChoiceButtons
)
472 EVT_BUTTON (ID_CHOICE_CLEAR
, MyPanel::OnChoiceButtons
)
473 EVT_BUTTON (ID_CHOICE_APPEND
, MyPanel::OnChoiceButtons
)
474 EVT_BUTTON (ID_CHOICE_DELETE
, MyPanel::OnChoiceButtons
)
475 EVT_BUTTON (ID_CHOICE_FONT
, MyPanel::OnChoiceButtons
)
476 EVT_CHECKBOX (ID_CHOICE_ENABLE
, MyPanel::OnChoiceButtons
)
477 EVT_COMBOBOX (ID_COMBO
, MyPanel::OnCombo
)
478 EVT_BUTTON (ID_COMBO_SEL_NUM
, MyPanel::OnComboButtons
)
479 EVT_BUTTON (ID_COMBO_SEL_STR
, MyPanel::OnComboButtons
)
480 EVT_BUTTON (ID_COMBO_CLEAR
, MyPanel::OnComboButtons
)
481 EVT_BUTTON (ID_COMBO_APPEND
, MyPanel::OnComboButtons
)
482 EVT_BUTTON (ID_COMBO_DELETE
, MyPanel::OnComboButtons
)
483 EVT_BUTTON (ID_COMBO_FONT
, MyPanel::OnComboButtons
)
484 EVT_CHECKBOX (ID_COMBO_ENABLE
, MyPanel::OnComboButtons
)
485 EVT_RADIOBOX (ID_RADIOBOX
, MyPanel::OnRadio
)
486 EVT_BUTTON (ID_RADIOBOX_SEL_NUM
, MyPanel::OnRadioButtons
)
487 EVT_BUTTON (ID_RADIOBOX_SEL_STR
, MyPanel::OnRadioButtons
)
488 EVT_BUTTON (ID_RADIOBOX_FONT
, MyPanel::OnRadioButtons
)
489 EVT_CHECKBOX (ID_RADIOBOX_ENABLE
, MyPanel::OnRadioButtons
)
490 EVT_BUTTON (ID_SET_FONT
, MyPanel::OnSetFont
)
491 EVT_SLIDER (ID_SLIDER
, MyPanel::OnSliderUpdate
)
493 EVT_SPIN (ID_SPIN
, MyPanel::OnSpinUpdate
)
495 EVT_BUTTON (ID_PASTE_TEXT
, MyPanel::OnPasteFromClipboard
)
496 EVT_BUTTON (ID_COPY_TEXT
, MyPanel::OnCopyToClipboard
)
497 EVT_BUTTON (ID_MOVE_END_ZONE
, MyPanel::OnMoveToEndOfText
)
498 EVT_BUTTON (ID_MOVE_END_ENTRY
, MyPanel::OnMoveToEndOfEntry
)
501 MyPanel::MyPanel( wxFrame
*frame
, int x
, int y
, int w
, int h
)
502 : wxPanel( frame
, -1, wxPoint(x
, y
), wxSize(w
, h
) ),
503 m_text(NULL
), m_notebook(NULL
)
505 // SetBackgroundColour("cadet blue");
507 m_text
= new wxTextCtrl( this, -1, "This is the log window.\n", wxPoint(0,50), wxSize(100,50), wxTE_MULTILINE
);
508 // m_text->SetBackgroundColour("wheat");
510 delete wxLog::SetActiveTarget(new wxLogTextCtrl(m_text
));
512 m_notebook
= new wxNotebook( this, ID_NOTEBOOK
, wxPoint(0,0), wxSize(200,150) );
527 Image_List
, Image_Choice
, Image_Combo
, Image_Text
, Image_Radio
, Image_Gauge
, Image_Max
530 // fill the image list
531 wxImageList
*imagelist
= new wxImageList(32, 32);
533 imagelist
-> Add( wxBitmap( list_xpm
));
534 imagelist
-> Add( wxBitmap( choice_xpm
));
535 imagelist
-> Add( wxBitmap( combo_xpm
));
536 imagelist
-> Add( wxBitmap( text_xpm
));
537 imagelist
-> Add( wxBitmap( radio_xpm
));
538 imagelist
-> Add( wxBitmap( gauge_xpm
));
539 m_notebook
->SetImageList(imagelist
);
540 #elif defined(__WXMSW__)
541 // load images from resources
544 Image_List
, Image_Choice
, Image_Combo
, Image_Text
, Image_Radio
, Image_Gauge
, Image_Max
546 wxImageList
*imagelist
= new wxImageList(16, 16, FALSE
, Image_Max
);
548 static const char *s_iconNames
[Image_Max
] =
550 "list", "choice", "combo", "text", "radio", "gauge"
553 for ( size_t n
= 0; n
< Image_Max
; n
++ )
555 wxBitmap
bmp(s_iconNames
[n
]);
556 if ( !bmp
.Ok() || (imagelist
->Add(bmp
) == -1) )
558 wxLogWarning("Couldn't load the image '%s' for the notebook page %d.",
563 m_notebook
->SetImageList(imagelist
);
567 #define Image_List -1
568 #define Image_Choice -1
569 #define Image_Combo -1
570 #define Image_Text -1
571 #define Image_Radio -1
572 #define Image_Gauge -1
577 wxButton
*button
= (wxButton
*) NULL
; /* who did this ? */
578 wxPanel
*panel
= (wxPanel
*) NULL
;
580 panel
= new wxPanel(m_notebook
);
581 m_listbox
= new wxListBox( panel
, ID_LISTBOX
, wxPoint(10,10), wxSize(120,70), 5, choices
, wxLB_ALWAYS_SB
);
582 m_listbox
->SetCursor(*wxCROSS_CURSOR
);
584 m_listbox
->SetToolTip( "This is a list box" );
585 #endif // wxUSE_TOOLTIPS
587 (void)new wxButton( panel
, ID_LISTBOX_SEL_NUM
, "Select #2", wxPoint(180,30), wxSize(140,30) );
588 (void)new wxButton( panel
, ID_LISTBOX_SEL_STR
, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
589 (void)new wxButton( panel
, ID_LISTBOX_CLEAR
, "Clear", wxPoint(180,80), wxSize(140,30) );
590 (void)new wxButton( panel
, ID_LISTBOX_APPEND
, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
591 (void)new wxButton( panel
, ID_LISTBOX_DELETE
, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
592 button
= new wxButton( panel
, ID_LISTBOX_FONT
, "Set &Italic font", wxPoint(340,130), wxSize(140,30) );
594 button
->SetToolTip( "Press here to set italic font" );
595 #endif // wxUSE_TOOLTIPS
597 m_checkbox
= new wxCheckBox( panel
, ID_LISTBOX_ENABLE
, "&Disable", wxPoint(20,130), wxSize(-1, -1), wxALIGN_RIGHT
);
598 m_checkbox
->SetValue(FALSE
);
600 m_checkbox
->SetToolTip( "Click here to disable the listbox" );
601 #endif // wxUSE_TOOLTIPS
602 m_notebook
->AddPage(panel
, "wxListBox", TRUE
, Image_List
);
604 panel
= new wxPanel(m_notebook
);
605 m_choice
= new wxChoice( panel
, ID_CHOICE
, wxPoint(10,10), wxSize(120,-1), 5, choices
);
606 m_choice
->SetBackgroundColour( "red" );
607 (void)new wxButton( panel
, ID_CHOICE_SEL_NUM
, "Select #2", wxPoint(180,30), wxSize(140,30) );
608 (void)new wxButton( panel
, ID_CHOICE_SEL_STR
, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
609 (void)new wxButton( panel
, ID_CHOICE_CLEAR
, "Clear", wxPoint(180,80), wxSize(140,30) );
610 (void)new wxButton( panel
, ID_CHOICE_APPEND
, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
611 (void)new wxButton( panel
, ID_CHOICE_DELETE
, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
612 (void)new wxButton( panel
, ID_CHOICE_FONT
, "Set Italic font", wxPoint(340,130), wxSize(140,30) );
613 (void)new wxCheckBox( panel
, ID_CHOICE_ENABLE
, "Disable", wxPoint(20,130), wxSize(140,30) );
614 m_notebook
->AddPage(panel
, "wxChoice", FALSE
, Image_Choice
);
616 panel
= new wxPanel(m_notebook
);
617 m_combo
= new wxComboBox( panel
, ID_COMBO
, "This", wxPoint(10,10), wxSize(120,-1), 5, choices
, wxCB_READONLY
);
618 (void)new wxButton( panel
, ID_COMBO_SEL_NUM
, "Select #2", wxPoint(180,30), wxSize(140,30) );
619 (void)new wxButton( panel
, ID_COMBO_SEL_STR
, "Select 'This'", wxPoint(340,30), wxSize(140,30) );
620 (void)new wxButton( panel
, ID_COMBO_CLEAR
, "Clear", wxPoint(180,80), wxSize(140,30) );
621 (void)new wxButton( panel
, ID_COMBO_APPEND
, "Append 'Hi!'", wxPoint(340,80), wxSize(140,30) );
622 (void)new wxButton( panel
, ID_COMBO_DELETE
, "Delete selected item", wxPoint(180,130), wxSize(140,30) );
623 (void)new wxButton( panel
, ID_COMBO_FONT
, "Set Italic font", wxPoint(340,130), wxSize(140,30) );
624 (void)new wxCheckBox( panel
, ID_COMBO_ENABLE
, "Disable", wxPoint(20,130), wxSize(140,30) );
625 m_notebook
->AddPage(panel
, "wxComboBox", FALSE
, Image_Combo
);
627 panel
= new wxPanel(m_notebook
);
628 m_textentry
= new MyTextCtrl( panel
, -1, "Some text.", wxPoint(10,10), wxSize(320,28), //0);
630 (*m_textentry
) << " Appended.";
631 m_textentry
->SetInsertionPoint(0);
632 m_textentry
->WriteText( "Prepended. " );
634 m_multitext
= new MyTextCtrl( panel
, ID_TEXT
, "Some text.", wxPoint(10,50), wxSize(320,70), wxTE_MULTILINE
);
635 (*m_multitext
) << " Appended.";
636 m_multitext
->SetInsertionPoint(0);
637 m_multitext
->WriteText( "Prepended. " );
638 m_multitext
->AppendText( "\nPress function keys for test different tests." );
640 (*m_multitext
) << "\nDoes it have cross cursor?";
641 m_multitext
->SetCursor(*wxCROSS_CURSOR
);
643 new MyTextCtrl( panel
, -1, "This one is with wxTE_PROCESS_TAB style.", wxPoint(10,120), wxSize(320,70), wxTE_MULTILINE
| wxTE_PROCESS_TAB
);
645 m_multitext
->AppendText( "\nThis ctrl has a tooltip. " );
646 m_multitext
->SetToolTip("Press F1 here.");
647 #endif // wxUSE_TOOLTIPS
649 (void)new wxStaticBox( panel
, -1, "&Move cursor to the end of:", wxPoint(345, 0), wxSize(160, 100) );
650 (void)new wxButton( panel
, ID_MOVE_END_ENTRY
, "Text &entry", wxPoint(370, 20), wxSize(110, 30) );
651 (void)new wxButton( panel
, ID_MOVE_END_ZONE
, "Text &zone", wxPoint(370, 60), wxSize(110, 30) );
652 (void)new wxStaticBox( panel
, -1, "wx&Clipboard", wxPoint(345,100), wxSize(160,100) );
653 (void)new wxButton( panel
, ID_COPY_TEXT
, "C&opy line 1", wxPoint(370,120), wxSize(110,30) );
654 (void)new wxButton( panel
, ID_PASTE_TEXT
, "&Paste text", wxPoint(370,160), wxSize(110,30) );
655 m_notebook
->AddPage( panel
, "wxTextCtrl" , FALSE
, Image_Text
);
657 wxString choices2
[] =
661 "Fourth", "Fifth", "Sixth",
662 "Seventh", "Eighth", "Nineth", "Tenth" */
665 panel
= new wxPanel(m_notebook
);
666 (void)new wxRadioBox( panel
, ID_RADIOBOX
, "That", wxPoint(10,160), wxSize(-1,-1), WXSIZEOF(choices2
), choices2
, 1, wxRA_SPECIFY_ROWS
);
667 m_radio
= new wxRadioBox( panel
, ID_RADIOBOX
, "This", wxPoint(10,10), wxSize(-1,-1), WXSIZEOF(choices
), choices
, 1, wxRA_SPECIFY_COLS
);
668 (void)new wxButton( panel
, ID_RADIOBOX_SEL_NUM
, "Select #2", wxPoint(180,30), wxSize(140,30) );
669 (void)new wxButton( panel
, ID_RADIOBOX_SEL_STR
, "Select 'This'", wxPoint(180,80), wxSize(140,30) );
670 m_fontButton
= new wxButton( panel
, ID_SET_FONT
, "Set more Italic font", wxPoint(340,30), wxSize(140,30) );
671 (void)new wxButton( panel
, ID_RADIOBOX_FONT
, "Set Italic font", wxPoint(340,80), wxSize(140,30) );
672 (void)new wxCheckBox( panel
, ID_RADIOBOX_ENABLE
, "Disable", wxPoint(340,130), wxSize(140,30) );
673 wxRadioButton
*rb
= new wxRadioButton( panel
, ID_RADIOBUTTON_1
, "Radiobutton1", wxPoint(210,170), wxSize(110,30) );
674 rb
->SetValue( FALSE
);
675 (void)new wxRadioButton( panel
, ID_RADIOBUTTON_2
, "Radiobutton2", wxPoint(340,170), wxSize(110,30) );
676 m_notebook
->AddPage(panel
, "wxRadioBox", FALSE
, Image_Radio
);
678 panel
= new wxPanel(m_notebook
);
679 (void)new wxStaticBox( panel
, -1, "wxGauge and wxSlider", wxPoint(10,10), wxSize(180,130) );
680 m_gauge
= new wxGauge( panel
, -1, 200, wxPoint(18,50), wxSize(155, 30) );
681 m_slider
= new wxSlider( panel
, ID_SLIDER
, 0, 0, 200, wxPoint(18,90), wxSize(155,-1), wxSL_LABELS
);
682 (void)new wxStaticBox( panel
, -1, "Explanation", wxPoint(200,10), wxSize(290,130) );
684 // No wrapping text in wxStaticText yet :-(
685 (void)new wxStaticText( panel
, -1,
691 (void)new wxStaticText( panel
, -1,
692 "In order see the gauge (aka progress bar)\n"
693 "control do something you have to drag the\n"
694 "handle of the slider to the right.\n"
696 "This is also supposed to demonstrate how\n"
697 "to use static controls.\n",
702 m_spintext
= new wxTextCtrl( panel
, -1, "0", wxPoint(20,160), wxSize(80,-1) );
704 m_spinbutton
= new wxSpinButton( panel
, ID_SPIN
, wxPoint(103,159), wxSize(-1,-1) );
705 m_spinbutton
->SetRange(-10,30);
706 m_spinbutton
->SetValue(-5);
708 m_notebook
->AddPage(panel
, "wxGauge", FALSE
, Image_Gauge
);
711 void MyPanel::OnPasteFromClipboard( wxCommandEvent
&WXUNUSED(event
) )
713 // We test for wxUSE_DRAG_AND_DROP also, because data objects
714 // may not be implemented for compilers that can't cope with the OLE
715 // parts in wxUSE_DRAG_AND_DROP.
717 #if wxUSE_CLIPBOARD && wxUSE_DRAG_AND_DROP
718 if (!wxTheClipboard
->Open())
720 *m_text
<< "Error opening the clipboard.\n";
726 *m_text
<< "Successfully opened the clipboard.\n";
729 wxTextDataObject data
;
731 if (wxTheClipboard
->IsSupported( data
.GetFormat() ))
733 *m_text
<< "Clipboard supports requested format.\n";
735 if (wxTheClipboard
->GetData( &data
))
737 *m_text
<< "Successfully retrieved data from the clipboard.\n";
738 *m_multitext
<< data
.GetText() << "\n";
742 *m_text
<< "Error getting data from the clipboard.\n";
747 *m_text
<< "Clipboard doesn't support requested format.\n";
750 wxTheClipboard
->Close();
752 *m_text
<< "Closed the clipboard.\n";
754 wxLogError("Your version of wxWindows is compiled without clipboard support.");
758 void MyPanel::OnCopyToClipboard( wxCommandEvent
&WXUNUSED(event
) )
760 #if wxUSE_CLIPBOARD && wxUSE_DRAG_AND_DROP
761 wxString
text( m_multitext
->GetLineText(0) );
765 *m_text
<< "No text to copy.\n";
770 if (!wxTheClipboard
->Open())
772 *m_text
<< "Error opening the clipboard.\n";
778 *m_text
<< "Successfully opened the clipboard.\n";
781 wxTextDataObject
*data
= new wxTextDataObject( text
);
783 if (!wxTheClipboard
->SetData( data
))
785 *m_text
<< "Error while copying to the clipboard.\n";
789 *m_text
<< "Successfully copied data to the clipboard.\n";
792 wxTheClipboard
->Close();
794 *m_text
<< "Closed the clipboard.\n";
796 wxLogError("Your version of wxWindows is compiled without clipboard support.");
800 void MyPanel::OnMoveToEndOfText( wxCommandEvent
&event
)
802 m_multitext
->SetInsertionPointEnd();
803 m_multitext
->SetFocus();
806 void MyPanel::OnMoveToEndOfEntry( wxCommandEvent
&event
)
808 m_textentry
->SetInsertionPointEnd();
809 m_textentry
->SetFocus();
812 void MyPanel::OnSize( wxSizeEvent
& WXUNUSED(event
) )
816 GetClientSize( &x
, &y
);
818 if (m_notebook
) m_notebook
->SetSize( 2, 2, x
-4, y
*2/3-4 );
819 if (m_text
) m_text
->SetSize( 2, y
*2/3+2, x
-4, y
/3-4 );
822 void MyPanel::OnPageChanged( wxNotebookEvent
&event
)
824 *m_text
<< "Notebook selection is " << event
.GetSelection() << "\n";
827 void MyPanel::OnListBox( wxCommandEvent
&event
)
829 m_text
->AppendText( "ListBox event selection string is: " );
830 m_text
->AppendText( event
.GetString() );
831 m_text
->AppendText( "\n" );
832 m_text
->AppendText( "ListBox control selection string is: " );
833 m_text
->AppendText( m_listbox
->GetStringSelection() );
834 m_text
->AppendText( "\n" );
837 void MyPanel::OnListBoxDoubleClick( wxCommandEvent
&event
)
839 m_text
->AppendText( "ListBox double click string is: " );
840 m_text
->AppendText( event
.GetString() );
841 m_text
->AppendText( "\n" );
844 void MyPanel::OnListBoxButtons( wxCommandEvent
&event
)
846 switch (event
.GetId())
848 case ID_LISTBOX_ENABLE
:
850 m_text
->AppendText("Checkbox clicked.\n");
851 wxCheckBox
*cb
= (wxCheckBox
*)event
.GetEventObject();
854 cb
->SetToolTip( "Click to enable listbox" );
856 cb
->SetToolTip( "Click to disable listbox" );
857 #endif // wxUSE_TOOLTIPS
858 m_listbox
->Enable( event
.GetInt() == 0 );
861 case ID_LISTBOX_SEL_NUM
:
863 m_listbox
->SetSelection( 2 );
866 case ID_LISTBOX_SEL_STR
:
868 m_listbox
->SetStringSelection( "This" );
871 case ID_LISTBOX_CLEAR
:
876 case ID_LISTBOX_APPEND
:
878 m_listbox
->Append( "Hi!" );
881 case ID_LISTBOX_DELETE
:
883 int idx
= m_listbox
->GetSelection();
884 m_listbox
->Delete( idx
);
887 case ID_LISTBOX_FONT
:
889 m_listbox
->SetFont( *wxITALIC_FONT
);
890 m_checkbox
->SetFont( *wxITALIC_FONT
);
896 void MyPanel::OnChoice( wxCommandEvent
&event
)
898 m_text
->AppendText( "Choice event selection string is: " );
899 m_text
->AppendText( event
.GetString() );
900 m_text
->AppendText( "\n" );
901 m_text
->AppendText( "Choice control selection string is: " );
902 m_text
->AppendText( m_choice
->GetStringSelection() );
903 m_text
->AppendText( "\n" );
906 void MyPanel::OnChoiceButtons( wxCommandEvent
&event
)
908 switch (event
.GetId())
910 case ID_CHOICE_ENABLE
:
912 m_choice
->Enable( event
.GetInt() == 0 );
915 case ID_CHOICE_SEL_NUM
:
917 m_choice
->SetSelection( 2 );
920 case ID_CHOICE_SEL_STR
:
922 m_choice
->SetStringSelection( "This" );
925 case ID_CHOICE_CLEAR
:
930 case ID_CHOICE_APPEND
:
932 m_choice
->Append( "Hi!" );
935 case ID_CHOICE_DELETE
:
937 int idx
= m_choice
->GetSelection();
938 m_choice
->Delete( idx
);
943 m_choice
->SetFont( *wxITALIC_FONT
);
949 void MyPanel::OnCombo( wxCommandEvent
&event
)
951 m_text
->AppendText( "ComboBox event selection string is: " );
952 m_text
->AppendText( event
.GetString() );
953 m_text
->AppendText( "\n" );
954 m_text
->AppendText( "ComboBox control selection string is: " );
955 m_text
->AppendText( m_combo
->GetStringSelection() );
956 m_text
->AppendText( "\n" );
959 void MyPanel::OnComboButtons( wxCommandEvent
&event
)
961 switch (event
.GetId())
963 case ID_COMBO_ENABLE
:
965 m_combo
->Enable( event
.GetInt() == 0 );
968 case ID_COMBO_SEL_NUM
:
970 m_combo
->SetSelection( 2 );
973 case ID_COMBO_SEL_STR
:
975 m_combo
->SetStringSelection( "This" );
983 case ID_COMBO_APPEND
:
985 m_combo
->Append( "Hi!" );
988 case ID_COMBO_DELETE
:
990 int idx
= m_combo
->GetSelection();
991 m_combo
->Delete( idx
);
996 m_combo
->SetFont( *wxITALIC_FONT
);
1002 void MyPanel::OnRadio( wxCommandEvent
&event
)
1004 m_text
->AppendText( "RadioBox selection string is: " );
1005 m_text
->AppendText( event
.GetString() );
1006 m_text
->AppendText( "\n" );
1009 void MyPanel::OnRadioButtons( wxCommandEvent
&event
)
1011 switch (event
.GetId())
1013 case ID_RADIOBOX_ENABLE
:
1015 m_radio
->Enable( event
.GetInt() == 0 );
1018 case ID_RADIOBOX_SEL_NUM
:
1020 m_radio
->SetSelection( 2 );
1023 case ID_RADIOBOX_SEL_STR
:
1025 m_radio
->SetStringSelection( "This" );
1028 case ID_RADIOBOX_FONT
:
1030 m_radio
->SetFont( *wxITALIC_FONT
);
1036 void MyPanel::OnSetFont( wxCommandEvent
&WXUNUSED(event
) )
1038 m_fontButton
->SetFont( *wxITALIC_FONT
);
1039 m_text
->SetFont( *wxITALIC_FONT
);
1042 void MyPanel::OnSliderUpdate( wxCommandEvent
&WXUNUSED(event
) )
1044 m_gauge
->SetValue( m_slider
->GetValue() );
1048 void MyPanel::OnSpinUpdate( wxSpinEvent
&event
)
1051 value
.Printf( _T("%d"), event
.GetPosition() );
1052 m_spintext
->SetValue( value
);
1054 value
.Printf( _T("Spin control range: (%d, %d), current = %d\n"),
1055 m_spinbutton
->GetMin(), m_spinbutton
->GetMax(),
1056 m_spinbutton
->GetValue());
1058 m_text
->AppendText(value
);
1064 delete m_notebook
->GetImageList();
1067 //----------------------------------------------------------------------
1069 //----------------------------------------------------------------------
1071 BEGIN_EVENT_TABLE(MyFrame
, wxFrame
)
1072 EVT_MENU(MINIMAL_QUIT
, MyFrame::OnQuit
)
1073 EVT_MENU(MINIMAL_ABOUT
, MyFrame::OnAbout
)
1075 EVT_MENU(MINIMAL_SET_TOOLTIP_DELAY
, MyFrame::OnSetTooltipDelay
)
1076 EVT_MENU(MINIMAL_ENABLE_TOOLTIPS
, MyFrame::OnToggleTooltips
)
1077 #endif // wxUSE_TOOLTIPS
1078 EVT_SIZE(MyFrame::OnSize
)
1079 EVT_IDLE(MyFrame::OnIdle
)
1082 MyFrame::MyFrame(wxFrame
*frame
, char *title
, int x
, int y
, int w
, int h
)
1083 : wxFrame(frame
, -1, title
, wxPoint(x
, y
), wxSize(w
, h
))
1087 (void)new MyPanel( this, 10, 10, 300, 100 );
1090 void MyFrame::OnQuit (wxCommandEvent
& WXUNUSED(event
) )
1095 void MyFrame::OnAbout( wxCommandEvent
& WXUNUSED(event
) )
1097 wxBeginBusyCursor();
1099 wxMessageDialog
dialog(this, "This is a control sample", "About Controls", wxOK
);
1106 void MyFrame::OnSetTooltipDelay(wxCommandEvent
& event
)
1108 static long s_delay
= 5000;
1111 delay
.Printf( _T("%ld"), s_delay
);
1113 delay
= wxGetTextFromUser("Enter delay (in milliseconds)",
1114 "Set tooltip delay",
1118 return; // cancelled
1120 wxSscanf(delay
, _T("%ld"), &s_delay
);
1122 wxToolTip::SetDelay(s_delay
);
1124 wxLogStatus(this, _T("Tooltip delay set to %ld milliseconds"), s_delay
);
1127 void MyFrame::OnToggleTooltips(wxCommandEvent
& event
)
1129 static bool s_enabled
= TRUE
;
1131 s_enabled
= !s_enabled
;
1133 wxToolTip::Enable(s_enabled
);
1135 wxLogStatus(this, _T("Tooltips %sabled"), s_enabled
? _T("en") : _T("dis") );
1139 void MyFrame::OnSize( wxSizeEvent
& event
)
1142 msg
.Printf( _("%dx%d"), event
.GetSize().x
, event
.GetSize().y
);
1143 SetStatusText(msg
, 1);
1148 void MyFrame::OnIdle( wxIdleEvent
& WXUNUSED(event
) )
1150 // track the window which has the focus in the status bar
1151 static wxWindow
*s_windowFocus
= (wxWindow
*)NULL
;
1152 wxWindow
*focus
= wxWindow::FindFocus();
1153 if ( focus
&& (focus
!= s_windowFocus
) )
1155 s_windowFocus
= focus
;
1160 _T("Focus: wxWindow = %p, HWND = %08x"),
1162 _T("Focus: wxWindow = %p"),
1166 , s_windowFocus
->GetHWND()