]> git.saurik.com Git - wxWidgets.git/blob - samples/text/text.cpp
Small distrib changes,
[wxWidgets.git] / samples / text / text.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: controls.cpp
3 // Purpose: TextCtrl wxWindows sample
4 // Author: Robert Roebling
5 // Modified by:
6 // RCS-ID: $Id$
7 // Copyright: (c) Robert Roebling, Julian Smart
8 // Licence: wxWindows license
9 /////////////////////////////////////////////////////////////////////////////
10
11 #ifdef __GNUG__
12 #pragma implementation "controls.h"
13 #endif
14
15 // For compilers that support precompilation, includes "wx/wx.h".
16 #include "wx/wxprec.h"
17
18 #ifdef __BORLANDC__
19 #pragma hdrstop
20 #endif
21
22 #ifndef WX_PRECOMP
23 #include "wx/wx.h"
24 #endif
25
26 #if wxUSE_CLIPBOARD
27 #include "wx/dataobj.h"
28 #include "wx/clipbrd.h"
29 #endif
30
31 #if wxUSE_TOOLTIPS
32 #include "wx/tooltip.h"
33 #endif
34
35 // We test for wxUSE_DRAG_AND_DROP also, because data objects may not be
36 // implemented for compilers that can't cope with the OLE parts in
37 // wxUSE_DRAG_AND_DROP.
38 #if !wxUSE_DRAG_AND_DROP
39 #undef wxUSE_CLIPBOARD
40 #define wxUSE_CLIPBOARD 0
41 #endif
42
43 //----------------------------------------------------------------------
44 // class definitions
45 //----------------------------------------------------------------------
46
47 class MyApp: public wxApp
48 {
49 public:
50 bool OnInit();
51 };
52
53 // a text ctrl which allows to call different wxTextCtrl functions
54 // interactively by pressing function keys in it
55 class MyTextCtrl : public wxTextCtrl
56 {
57 public:
58 MyTextCtrl(wxWindow *parent, wxWindowID id, const wxString &value,
59 const wxPoint &pos, const wxSize &size, int style = 0)
60 : wxTextCtrl(parent, id, value, pos, size, style) { }
61
62 void OnKeyDown(wxKeyEvent& event);
63 void OnKeyUp(wxKeyEvent& event);
64 void OnChar(wxKeyEvent& event);
65
66 private:
67 static inline wxChar GetChar(bool on, wxChar c) { return on ? c : _T('-'); }
68 void LogEvent(const wxChar *name, wxKeyEvent& event) const;
69
70 DECLARE_EVENT_TABLE()
71 };
72
73 class MyPanel: public wxPanel
74 {
75 public:
76 MyPanel(wxFrame *frame, int x, int y, int w, int h);
77
78 #if wxUSE_CLIPBOARD
79 void DoPasteFromClipboard();
80 void DoCopyToClipboard();
81 #endif // wxUSE_CLIPBOARD
82
83 void DoMoveToEndOfText();
84 void DoMoveToEndOfEntry();
85
86 void OnSize( wxSizeEvent &event );
87
88 MyTextCtrl *m_text;
89 MyTextCtrl *m_password;
90 MyTextCtrl *m_enter;
91 MyTextCtrl *m_tab;
92 MyTextCtrl *m_readonly;
93
94 MyTextCtrl *m_multitext;
95 MyTextCtrl *m_horizontal;
96
97 wxTextCtrl *m_log;
98
99 private:
100 DECLARE_EVENT_TABLE()
101 };
102
103 class MyFrame: public wxFrame
104 {
105 public:
106 MyFrame(wxFrame *frame, const char *title, int x, int y, int w, int h);
107
108 void OnQuit(wxCommandEvent& event);
109 void OnAbout(wxCommandEvent& event);
110 #if wxUSE_TOOLTIPS
111 void OnSetTooltipDelay(wxCommandEvent& event);
112 void OnToggleTooltips(wxCommandEvent& event);
113 #endif // wxUSE_TOOLTIPS
114
115 #if wxUSE_CLIPBOARD
116 void OnPasteFromClipboard( wxCommandEvent &event )
117 { m_panel->DoPasteFromClipboard(); }
118 void OnCopyToClipboard( wxCommandEvent &event )
119 { m_panel->DoCopyToClipboard(); }
120 #endif // wxUSE_CLIPBOARD
121
122 void OnMoveToEndOfText( wxCommandEvent &event )
123 { m_panel->DoMoveToEndOfText(); }
124 void OnMoveToEndOfEntry( wxCommandEvent &event )
125 { m_panel->DoMoveToEndOfEntry(); }
126
127 void OnFileLoad(wxCommandEvent& event);
128
129 void OnIdle( wxIdleEvent& event );
130
131 private:
132 MyPanel *m_panel;
133
134 DECLARE_EVENT_TABLE()
135 };
136
137 //----------------------------------------------------------------------
138 // main()
139 //----------------------------------------------------------------------
140
141 IMPLEMENT_APP(MyApp)
142
143 //----------------------------------------------------------------------
144 // MyApp
145 //----------------------------------------------------------------------
146
147 enum
148 {
149 TEXT_QUIT = 100,
150 TEXT_ABOUT,
151 TEXT_LOAD,
152
153 // clipboard menu
154 TEXT_CLIPBOARD_COPY = 200,
155 TEXT_CLIPBOARD_PASTE,
156
157 // tooltip menu
158 TEXT_TOOLTIPS_SETDELAY = 300,
159 TEXT_TOOLTIPS_ENABLE,
160
161 // move menu
162 TEXT_MOVE_ENDTEXT = 400,
163 TEXT_MOVE_ENDENTRY
164 };
165
166 bool MyApp::OnInit()
167 {
168 // Create the main frame window
169 MyFrame *frame = new MyFrame((wxFrame *) NULL,
170 "Text wxWindows sample", 50, 50, 640, 420);
171 frame->SetSizeHints( 500, 400 );
172
173 wxMenu *file_menu = new wxMenu;
174 file_menu->Append(TEXT_LOAD, "&Load file\tCtrl-O",
175 "Load the sample file into text control");
176 file_menu->AppendSeparator();
177 file_menu->Append(TEXT_ABOUT, "&About\tAlt-A");
178 file_menu->AppendSeparator();
179 file_menu->Append(TEXT_QUIT, "E&xit\tAlt-X", "Quit controls sample");
180
181 wxMenuBar *menu_bar = new wxMenuBar( wxMB_DOCKABLE );
182 menu_bar->Append(file_menu, "&File");
183
184 #if wxUSE_TOOLTIPS
185 wxMenu *tooltip_menu = new wxMenu;
186 tooltip_menu->Append(TEXT_TOOLTIPS_SETDELAY, "Set &delay\tCtrl-D");
187 tooltip_menu->AppendSeparator();
188 tooltip_menu->Append(TEXT_TOOLTIPS_ENABLE, "&Toggle tooltips\tCtrl-T",
189 "enable/disable tooltips", TRUE);
190 tooltip_menu->Check(TEXT_TOOLTIPS_ENABLE, TRUE);
191 menu_bar->Append(tooltip_menu, "&Tooltips");
192 #endif // wxUSE_TOOLTIPS
193
194 #if wxUSE_CLIPBOARD
195 wxMenu *menuClipboard = new wxMenu;
196 menuClipboard->Append(TEXT_CLIPBOARD_COPY, "&Copy\tCtrl-C",
197 "Copy the first line to the clipboard");
198 menuClipboard->Append(TEXT_CLIPBOARD_PASTE, "&Paste\tCtrl-V",
199 "Paste from clipboard to the text control");
200 menu_bar->Append(menuClipboard, "&Clipboard");
201 #endif // wxUSE_CLIPBOARD
202
203 wxMenu *menuMove = new wxMenu;
204 menuMove->Append(TEXT_MOVE_ENDTEXT, "To the end of &text");
205 menuMove->Append(TEXT_MOVE_ENDENTRY, "To the end of &entry");
206 menu_bar->Append(menuMove, "&Move");
207
208 frame->SetMenuBar(menu_bar);
209
210 frame->Show(TRUE);
211
212 SetTopWindow(frame);
213
214 // report success
215 return TRUE;
216 }
217
218 //----------------------------------------------------------------------
219 // MyTextCtrl
220 //----------------------------------------------------------------------
221
222 BEGIN_EVENT_TABLE(MyTextCtrl, wxTextCtrl)
223 EVT_KEY_DOWN(MyTextCtrl::OnKeyDown)
224 EVT_KEY_UP(MyTextCtrl::OnKeyUp)
225 EVT_CHAR(MyTextCtrl::OnChar)
226 END_EVENT_TABLE()
227
228 void MyTextCtrl::LogEvent(const wxChar *name, wxKeyEvent& event) const
229 {
230 wxString key;
231 long keycode = event.KeyCode();
232 {
233 switch ( keycode )
234 {
235 case WXK_BACK: key = "BACK"; break;
236 case WXK_TAB: key = "TAB"; break;
237 case WXK_RETURN: key = "RETURN"; break;
238 case WXK_ESCAPE: key = "ESCAPE"; break;
239 case WXK_SPACE: key = "SPACE"; break;
240 case WXK_DELETE: key = "DELETE"; break;
241 case WXK_START: key = "START"; break;
242 case WXK_LBUTTON: key = "LBUTTON"; break;
243 case WXK_RBUTTON: key = "RBUTTON"; break;
244 case WXK_CANCEL: key = "CANCEL"; break;
245 case WXK_MBUTTON: key = "MBUTTON"; break;
246 case WXK_CLEAR: key = "CLEAR"; break;
247 case WXK_SHIFT: key = "SHIFT"; break;
248 case WXK_ALT: key = "ALT"; break;
249 case WXK_CONTROL: key = "CONTROL"; break;
250 case WXK_MENU: key = "MENU"; break;
251 case WXK_PAUSE: key = "PAUSE"; break;
252 case WXK_CAPITAL: key = "CAPITAL"; break;
253 case WXK_PRIOR: key = "PRIOR"; break;
254 case WXK_NEXT: key = "NEXT"; break;
255 case WXK_END: key = "END"; break;
256 case WXK_HOME: key = "HOME"; break;
257 case WXK_LEFT: key = "LEFT"; break;
258 case WXK_UP: key = "UP"; break;
259 case WXK_RIGHT: key = "RIGHT"; break;
260 case WXK_DOWN: key = "DOWN"; break;
261 case WXK_SELECT: key = "SELECT"; break;
262 case WXK_PRINT: key = "PRINT"; break;
263 case WXK_EXECUTE: key = "EXECUTE"; break;
264 case WXK_SNAPSHOT: key = "SNAPSHOT"; break;
265 case WXK_INSERT: key = "INSERT"; break;
266 case WXK_HELP: key = "HELP"; break;
267 case WXK_NUMPAD0: key = "NUMPAD0"; break;
268 case WXK_NUMPAD1: key = "NUMPAD1"; break;
269 case WXK_NUMPAD2: key = "NUMPAD2"; break;
270 case WXK_NUMPAD3: key = "NUMPAD3"; break;
271 case WXK_NUMPAD4: key = "NUMPAD4"; break;
272 case WXK_NUMPAD5: key = "NUMPAD5"; break;
273 case WXK_NUMPAD6: key = "NUMPAD6"; break;
274 case WXK_NUMPAD7: key = "NUMPAD7"; break;
275 case WXK_NUMPAD8: key = "NUMPAD8"; break;
276 case WXK_NUMPAD9: key = "NUMPAD9"; break;
277 case WXK_MULTIPLY: key = "MULTIPLY"; break;
278 case WXK_ADD: key = "ADD"; break;
279 case WXK_SEPARATOR: key = "SEPARATOR"; break;
280 case WXK_SUBTRACT: key = "SUBTRACT"; break;
281 case WXK_DECIMAL: key = "DECIMAL"; break;
282 case WXK_DIVIDE: key = "DIVIDE"; break;
283 case WXK_F1: key = "F1"; break;
284 case WXK_F2: key = "F2"; break;
285 case WXK_F3: key = "F3"; break;
286 case WXK_F4: key = "F4"; break;
287 case WXK_F5: key = "F5"; break;
288 case WXK_F6: key = "F6"; break;
289 case WXK_F7: key = "F7"; break;
290 case WXK_F8: key = "F8"; break;
291 case WXK_F9: key = "F9"; break;
292 case WXK_F10: key = "F10"; break;
293 case WXK_F11: key = "F11"; break;
294 case WXK_F12: key = "F12"; break;
295 case WXK_F13: key = "F13"; break;
296 case WXK_F14: key = "F14"; break;
297 case WXK_F15: key = "F15"; break;
298 case WXK_F16: key = "F16"; break;
299 case WXK_F17: key = "F17"; break;
300 case WXK_F18: key = "F18"; break;
301 case WXK_F19: key = "F19"; break;
302 case WXK_F20: key = "F20"; break;
303 case WXK_F21: key = "F21"; break;
304 case WXK_F22: key = "F22"; break;
305 case WXK_F23: key = "F23"; break;
306 case WXK_F24: key = "F24"; break;
307 case WXK_NUMLOCK: key = "NUMLOCK"; break;
308 case WXK_SCROLL: key = "SCROLL"; break;
309 case WXK_PAGEUP: key = "PAGEUP"; break;
310 case WXK_PAGEDOWN: key = "PAGEDOWN"; break;
311 case WXK_NUMPAD_SPACE: key = "NUMPAD_SPACE"; break;
312 case WXK_NUMPAD_TAB: key = "NUMPAD_TAB"; break;
313 case WXK_NUMPAD_ENTER: key = "NUMPAD_ENTER"; break;
314 case WXK_NUMPAD_F1: key = "NUMPAD_F1"; break;
315 case WXK_NUMPAD_F2: key = "NUMPAD_F2"; break;
316 case WXK_NUMPAD_F3: key = "NUMPAD_F3"; break;
317 case WXK_NUMPAD_F4: key = "NUMPAD_F4"; break;
318 case WXK_NUMPAD_HOME: key = "NUMPAD_HOME"; break;
319 case WXK_NUMPAD_LEFT: key = "NUMPAD_LEFT"; break;
320 case WXK_NUMPAD_UP: key = "NUMPAD_UP"; break;
321 case WXK_NUMPAD_RIGHT: key = "NUMPAD_RIGHT"; break;
322 case WXK_NUMPAD_DOWN: key = "NUMPAD_DOWN"; break;
323 case WXK_NUMPAD_PRIOR: key = "NUMPAD_PRIOR"; break;
324 case WXK_NUMPAD_PAGEUP: key = "NUMPAD_PAGEUP"; break;
325 case WXK_NUMPAD_PAGEDOWN: key = "NUMPAD_PAGEDOWN"; break;
326 case WXK_NUMPAD_END: key = "NUMPAD_END"; break;
327 case WXK_NUMPAD_BEGIN: key = "NUMPAD_BEGIN"; break;
328 case WXK_NUMPAD_INSERT: key = "NUMPAD_INSERT"; break;
329 case WXK_NUMPAD_DELETE: key = "NUMPAD_DELETE"; break;
330 case WXK_NUMPAD_EQUAL: key = "NUMPAD_EQUAL"; break;
331 case WXK_NUMPAD_MULTIPLY: key = "NUMPAD_MULTIPLY"; break;
332 case WXK_NUMPAD_ADD: key = "NUMPAD_ADD"; break;
333 case WXK_NUMPAD_SEPARATOR: key = "NUMPAD_SEPARATOR"; break;
334 case WXK_NUMPAD_SUBTRACT: key = "NUMPAD_SUBTRACT"; break;
335 case WXK_NUMPAD_DECIMAL: key = "NUMPAD_DECIMAL"; break;
336
337 default:
338 {
339 if ( wxIsprint((int)keycode) )
340 key.Printf( _T("'%c'") , (char)keycode);
341 else
342 key.Printf( _T("unknown (%ld)"), keycode);
343 }
344 }
345 }
346
347 wxLogMessage( _T("%s event: %s (flags = %c%c%c%c)"),
348 name,
349 key.c_str(),
350 GetChar( event.ControlDown(), _T('C') ),
351 GetChar( event.AltDown(), _T('A') ),
352 GetChar( event.ShiftDown(), _T('S') ),
353 GetChar( event.MetaDown(), _T('M') ) );
354
355 }
356
357 void MyTextCtrl::OnChar(wxKeyEvent& event)
358 {
359 LogEvent( _T("Char"), event);
360
361 /* How are we supposed to test wxTE_PROCESS_TAB with this code?
362
363 if ( event.KeyCode() == WXK_TAB )
364 {
365 WriteText("\t");
366 }
367 else
368 {
369 event.Skip();
370 }
371 */
372 event.Skip();
373 }
374
375 void MyTextCtrl::OnKeyUp(wxKeyEvent& event)
376 {
377 LogEvent( _("Key up"), event);
378
379 event.Skip();
380 }
381
382 void MyTextCtrl::OnKeyDown(wxKeyEvent& event)
383 {
384 switch ( event.KeyCode() )
385 {
386 case WXK_F1:
387 // show current position and text length
388 {
389 long line, column, pos = GetInsertionPoint();
390 PositionToXY(pos, &column, &line);
391
392 wxLogMessage( _T("Current position: %ld\n"
393 "Current line, column: (%ld, %ld)\n"
394 "Number of lines: %ld\n"
395 "Current line length: %ld\n"
396 "Total text length: %ld"),
397 pos,
398 line, column,
399 GetNumberOfLines(),
400 GetLineLength(line),
401 GetLastPosition());
402 }
403 break;
404
405 case WXK_F2:
406 // go to the end
407 SetInsertionPointEnd();
408 break;
409
410 case WXK_F3:
411 // go to position 10
412 SetInsertionPoint(10);
413 break;
414 }
415
416 LogEvent( _("Key down"), event);
417
418 event.Skip();
419 }
420
421 //----------------------------------------------------------------------
422 // MyPanel
423 //----------------------------------------------------------------------
424
425 BEGIN_EVENT_TABLE(MyPanel, wxPanel)
426 EVT_SIZE(MyPanel::OnSize)
427 END_EVENT_TABLE()
428
429 MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h )
430 : wxPanel( frame, -1, wxPoint(x, y), wxSize(w, h) )
431 {
432 m_log = new wxTextCtrl( this, -1, "This is the log window.\n", wxPoint(5,260), wxSize(630,100), wxTE_MULTILINE );
433
434 wxLog *old_log = wxLog::SetActiveTarget( new wxLogTextCtrl( m_log ) );
435
436 delete old_log;
437
438 // single line text controls
439
440 m_text = new MyTextCtrl( this, -1, "Single line.",
441 wxPoint(10,10), wxSize(140,-1), 0);
442 (*m_text) << " Appended.";
443 m_text->SetInsertionPoint(0);
444 m_text->WriteText( "Prepended. " );
445
446 m_password = new MyTextCtrl( this, -1, "",
447 wxPoint(10,50), wxSize(140,-1), wxTE_PASSWORD );
448
449 m_readonly = new MyTextCtrl( this, -1, "Read only",
450 wxPoint(10,90), wxSize(140,-1), wxTE_READONLY );
451
452 // multi line text controls
453
454 m_horizontal = new MyTextCtrl( this, -1, "Multiline text control with a horizontal scrollbar.",
455 wxPoint(10,170), wxSize(140,70), wxTE_MULTILINE | wxHSCROLL );
456 m_horizontal->SetFont(wxFont(18, wxSWISS, wxNORMAL, wxNORMAL,
457 FALSE, "", wxFONTENCODING_KOI8));
458
459 m_multitext = new MyTextCtrl( this, -1, "Multi line.",
460 wxPoint(180,10), wxSize(240,70), wxTE_MULTILINE );
461 (*m_multitext) << " Appended.";
462 m_multitext->SetInsertionPoint(0);
463 m_multitext->WriteText( "Prepended. " );
464
465 #if wxUSE_TOOLTIPS
466 m_multitext->SetToolTip("Press F1 here.");
467 #endif
468
469 m_tab = new MyTextCtrl( this, -1, "Multiline, allow <TAB> processing.",
470 wxPoint(180,90), wxSize(240,70), wxTE_MULTILINE | wxTE_PROCESS_TAB );
471
472 m_enter = new MyTextCtrl( this, -1, "Multiline, allow <ENTER> processing.",
473 wxPoint(180,170), wxSize(240,70), wxTE_MULTILINE);
474 }
475
476 void MyPanel::OnSize( wxSizeEvent &event )
477 {
478 wxSize client_area( GetClientSize() );
479 m_log->SetSize( 0, 260, client_area.x, client_area.y - 260 );
480 event.Skip();
481 }
482
483 #if wxUSE_CLIPBOARD
484 void MyPanel::DoPasteFromClipboard()
485 {
486 // On X11, we want to get the data from the primary selection instead
487 // of the normal clipboard (which isn't normal under X11 at all). This
488 // call has no effect under MSW.
489 wxTheClipboard->UsePrimarySelection();
490
491 if (!wxTheClipboard->Open())
492 {
493 *m_log << "Error opening the clipboard.\n";
494 return;
495 }
496 else
497 {
498 *m_log << "Successfully opened the clipboard.\n";
499 }
500
501 wxTextDataObject data;
502
503 if (wxTheClipboard->IsSupported( data.GetFormat() ))
504 {
505 *m_log << "Clipboard supports requested format.\n";
506
507 if (wxTheClipboard->GetData( data ))
508 {
509 *m_log << "Successfully retrieved data from the clipboard.\n";
510 *m_multitext << data.GetText() << "\n";
511 }
512 else
513 {
514 *m_log << "Error getting data from the clipboard.\n";
515 }
516 }
517 else
518 {
519 *m_log << "Clipboard doesn't support requested format.\n";
520 }
521
522 wxTheClipboard->Close();
523
524 *m_log << "Closed the clipboard.\n";
525 }
526
527 void MyPanel::DoCopyToClipboard()
528 {
529 wxString text( m_multitext->GetLineText(0) );
530
531 if (text.IsEmpty())
532 {
533 *m_log << "No text to copy.\n";
534
535 return;
536 }
537
538 if (!wxTheClipboard->Open())
539 {
540 *m_log << "Error opening the clipboard.\n";
541
542 return;
543 }
544 else
545 {
546 *m_log << "Successfully opened the clipboard.\n";
547 }
548
549 wxTextDataObject *data = new wxTextDataObject( text );
550
551 if (!wxTheClipboard->SetData( data ))
552 {
553 *m_log << "Error while copying to the clipboard.\n";
554 }
555 else
556 {
557 *m_log << "Successfully copied data to the clipboard.\n";
558 }
559
560 wxTheClipboard->Close();
561
562 *m_log << "Closed the clipboard.\n";
563 }
564
565 #endif // wxUSE_CLIPBOARD
566
567 void MyPanel::DoMoveToEndOfText()
568 {
569 m_multitext->SetInsertionPointEnd();
570 m_multitext->SetFocus();
571 }
572
573 void MyPanel::DoMoveToEndOfEntry()
574 {
575 m_text->SetInsertionPointEnd();
576 m_text->SetFocus();
577 }
578
579 //----------------------------------------------------------------------
580 // MyFrame
581 //----------------------------------------------------------------------
582
583 BEGIN_EVENT_TABLE(MyFrame, wxFrame)
584 EVT_MENU(TEXT_QUIT, MyFrame::OnQuit)
585 EVT_MENU(TEXT_ABOUT, MyFrame::OnAbout)
586 EVT_MENU(TEXT_LOAD, MyFrame::OnFileLoad)
587
588 #if wxUSE_TOOLTIPS
589 EVT_MENU(TEXT_TOOLTIPS_SETDELAY, MyFrame::OnSetTooltipDelay)
590 EVT_MENU(TEXT_TOOLTIPS_ENABLE, MyFrame::OnToggleTooltips)
591 #endif // wxUSE_TOOLTIPS
592
593 #if wxUSE_CLIPBOARD
594 EVT_MENU(TEXT_CLIPBOARD_PASTE, MyFrame::OnPasteFromClipboard)
595 EVT_MENU(TEXT_CLIPBOARD_COPY, MyFrame::OnCopyToClipboard)
596 #endif // wxUSE_CLIPBOARD
597
598 EVT_MENU(TEXT_MOVE_ENDTEXT, MyFrame::OnMoveToEndOfText)
599 EVT_MENU(TEXT_MOVE_ENDENTRY, MyFrame::OnMoveToEndOfEntry)
600
601 EVT_IDLE(MyFrame::OnIdle)
602 END_EVENT_TABLE()
603
604 MyFrame::MyFrame(wxFrame *frame, const char *title, int x, int y, int w, int h)
605 : wxFrame(frame, -1, title, wxPoint(x, y), wxSize(w, h) )
606 {
607 CreateStatusBar(2);
608
609 m_panel = new MyPanel( this, 10, 10, 300, 100 );
610 }
611
612 void MyFrame::OnQuit (wxCommandEvent& WXUNUSED(event) )
613 {
614 Close(TRUE);
615 }
616
617 void MyFrame::OnAbout( wxCommandEvent& WXUNUSED(event) )
618 {
619 wxBeginBusyCursor();
620
621 wxMessageDialog dialog(this,
622 "This is a text control sample. It demonstrates the many different\n"
623 "text control styles, the use of the clipboard, setting and handling\n"
624 "tooltips and intercepting key and char events.\n"
625 "\n"
626 "Copyright (c) 1999, Robert Roebling, Julian Smart, Vadim Zeitlin",
627 "About Text Controls",
628 wxOK | wxICON_INFORMATION);
629
630 dialog.ShowModal();
631
632 wxEndBusyCursor();
633 }
634
635 #if wxUSE_TOOLTIPS
636 void MyFrame::OnSetTooltipDelay(wxCommandEvent& event)
637 {
638 static long s_delay = 5000;
639
640 wxString delay;
641 delay.Printf( _T("%ld"), s_delay);
642
643 delay = wxGetTextFromUser("Enter delay (in milliseconds)",
644 "Set tooltip delay",
645 delay,
646 this);
647 if ( !delay )
648 return; // cancelled
649
650 wxSscanf(delay, _T("%ld"), &s_delay);
651
652 wxToolTip::SetDelay(s_delay);
653
654 wxLogStatus(this, _T("Tooltip delay set to %ld milliseconds"), s_delay);
655 }
656
657 void MyFrame::OnToggleTooltips(wxCommandEvent& event)
658 {
659 static bool s_enabled = TRUE;
660
661 s_enabled = !s_enabled;
662
663 wxToolTip::Enable(s_enabled);
664
665 wxLogStatus(this, _T("Tooltips %sabled"), s_enabled ? _T("en") : _T("dis") );
666 }
667 #endif // tooltips
668
669 void MyFrame::OnFileLoad(wxCommandEvent& event)
670 {
671 if ( m_panel->m_multitext->LoadFile("text.rc") )
672 wxLogStatus(this, _T("Successfully loaded file"));
673 else
674 wxLogStatus(this, _T("Couldn't load the file"));
675 }
676
677 void MyFrame::OnIdle( wxIdleEvent& event )
678 {
679 // track the window which has the focus in the status bar
680 static wxWindow *s_windowFocus = (wxWindow *)NULL;
681 wxWindow *focus = wxWindow::FindFocus();
682 if ( focus && (focus != s_windowFocus) )
683 {
684 s_windowFocus = focus;
685
686 wxString msg;
687 msg.Printf(
688 #ifdef __WXMSW__
689 _T("Focus: wxWindow = %p, HWND = %08x"),
690 #else
691 _T("Focus: wxWindow = %p"),
692 #endif
693 s_windowFocus
694 #ifdef __WXMSW__
695 , s_windowFocus->GetHWND()
696 #endif
697 );
698
699 SetStatusText(msg);
700 }
701 event.Skip();
702 }