]>
git.saurik.com Git - wxWidgets.git/blob - samples/text/text.cpp
1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: TextCtrl 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"
27 #include "wx/dataobj.h"
28 #include "wx/clipbrd.h"
36 #include "wx/tooltip.h"
39 // We test for wxUSE_DRAG_AND_DROP also, because data objects may not be
40 // implemented for compilers that can't cope with the OLE parts in
41 // wxUSE_DRAG_AND_DROP.
42 #if !wxUSE_DRAG_AND_DROP
43 #undef wxUSE_CLIPBOARD
44 #define wxUSE_CLIPBOARD 0
47 //----------------------------------------------------------------------
49 //----------------------------------------------------------------------
51 class MyApp
: public wxApp
57 // a text ctrl which allows to call different wxTextCtrl functions
58 // interactively by pressing function keys in it
59 class MyTextCtrl
: public wxTextCtrl
62 MyTextCtrl(wxWindow
*parent
, wxWindowID id
, const wxString
&value
,
63 const wxPoint
&pos
, const wxSize
&size
, int style
= 0)
64 : wxTextCtrl(parent
, id
, value
, pos
, size
, style
) { m_hasCapture
= FALSE
; }
66 void OnKeyDown(wxKeyEvent
& event
);
67 void OnKeyUp(wxKeyEvent
& event
);
68 void OnChar(wxKeyEvent
& event
);
69 void OnText(wxCommandEvent
& event
);
74 static inline wxChar
GetChar(bool on
, wxChar c
) { return on
? c
: _T('-'); }
75 void LogEvent(const wxChar
*name
, wxKeyEvent
& event
) const;
80 class MyPanel
: public wxPanel
83 MyPanel(wxFrame
*frame
, int x
, int y
, int w
, int h
);
86 void DoPasteFromClipboard();
87 void DoCopyToClipboard();
88 #endif // wxUSE_CLIPBOARD
90 void DoMoveToEndOfText();
91 void DoMoveToEndOfEntry();
93 void OnSize( wxSizeEvent
&event
);
96 MyTextCtrl
*m_password
;
99 MyTextCtrl
*m_readonly
;
101 MyTextCtrl
*m_multitext
;
102 MyTextCtrl
*m_horizontal
;
104 MyTextCtrl
*m_textrich
;
109 DECLARE_EVENT_TABLE()
112 class MyFrame
: public wxFrame
115 MyFrame(wxFrame
*frame
, const char *title
, int x
, int y
, int w
, int h
);
117 void OnQuit(wxCommandEvent
& event
);
118 void OnAbout(wxCommandEvent
& event
);
120 void OnSetTooltipDelay(wxCommandEvent
& event
);
121 void OnToggleTooltips(wxCommandEvent
& event
);
122 #endif // wxUSE_TOOLTIPS
125 void OnPasteFromClipboard( wxCommandEvent
&event
)
126 { m_panel
->DoPasteFromClipboard(); }
127 void OnCopyToClipboard( wxCommandEvent
&event
)
128 { m_panel
->DoCopyToClipboard(); }
129 #endif // wxUSE_CLIPBOARD
131 void OnMoveToEndOfText( wxCommandEvent
&event
)
132 { m_panel
->DoMoveToEndOfText(); }
133 void OnMoveToEndOfEntry( wxCommandEvent
&event
)
134 { m_panel
->DoMoveToEndOfEntry(); }
136 void OnLogClear(wxCommandEvent
& event
);
137 void OnFileSave(wxCommandEvent
& event
);
138 void OnFileLoad(wxCommandEvent
& event
);
140 void OnIdle( wxIdleEvent
& event
);
145 DECLARE_EVENT_TABLE()
148 //----------------------------------------------------------------------
150 //----------------------------------------------------------------------
154 //----------------------------------------------------------------------
156 //----------------------------------------------------------------------
167 TEXT_CLIPBOARD_COPY
= 200,
168 TEXT_CLIPBOARD_PASTE
,
171 TEXT_TOOLTIPS_SETDELAY
= 300,
172 TEXT_TOOLTIPS_ENABLE
,
175 TEXT_MOVE_ENDTEXT
= 400,
181 // Create the main frame window
182 MyFrame
*frame
= new MyFrame((wxFrame
*) NULL
,
183 "Text wxWindows sample", 50, 50, 660, 420);
184 frame
->SetSizeHints( 500, 400 );
186 wxMenu
*file_menu
= new wxMenu
;
187 file_menu
->Append(TEXT_CLEAR
, "&Clear the log\tCtrl-C",
188 "Clear the log window contents");
189 file_menu
->Append(TEXT_SAVE
, "&Save file\tCtrl-S",
190 "Save the text control contents to file");
191 file_menu
->Append(TEXT_LOAD
, "&Load file\tCtrl-O",
192 "Load the sample file into text control");
193 file_menu
->AppendSeparator();
194 file_menu
->Append(TEXT_ABOUT
, "&About\tAlt-A");
195 file_menu
->AppendSeparator();
196 file_menu
->Append(TEXT_QUIT
, "E&xit\tAlt-X", "Quit controls sample");
198 wxMenuBar
*menu_bar
= new wxMenuBar( wxMB_DOCKABLE
);
199 menu_bar
->Append(file_menu
, "&File");
202 wxMenu
*tooltip_menu
= new wxMenu
;
203 tooltip_menu
->Append(TEXT_TOOLTIPS_SETDELAY
, "Set &delay\tCtrl-D");
204 tooltip_menu
->AppendSeparator();
205 tooltip_menu
->Append(TEXT_TOOLTIPS_ENABLE
, "&Toggle tooltips\tCtrl-T",
206 "enable/disable tooltips", TRUE
);
207 tooltip_menu
->Check(TEXT_TOOLTIPS_ENABLE
, TRUE
);
208 menu_bar
->Append(tooltip_menu
, "&Tooltips");
209 #endif // wxUSE_TOOLTIPS
212 wxMenu
*menuClipboard
= new wxMenu
;
213 menuClipboard
->Append(TEXT_CLIPBOARD_COPY
, "&Copy\tCtrl-C",
214 "Copy the first line to the clipboard");
215 menuClipboard
->Append(TEXT_CLIPBOARD_PASTE
, "&Paste\tCtrl-V",
216 "Paste from clipboard to the text control");
217 menu_bar
->Append(menuClipboard
, "&Clipboard");
218 #endif // wxUSE_CLIPBOARD
220 wxMenu
*menuMove
= new wxMenu
;
221 menuMove
->Append(TEXT_MOVE_ENDTEXT
, "To the end of &text");
222 menuMove
->Append(TEXT_MOVE_ENDENTRY
, "To the end of &entry");
223 menu_bar
->Append(menuMove
, "&Move");
225 frame
->SetMenuBar(menu_bar
);
235 //----------------------------------------------------------------------
237 //----------------------------------------------------------------------
239 BEGIN_EVENT_TABLE(MyTextCtrl
, wxTextCtrl
)
240 EVT_KEY_DOWN(MyTextCtrl::OnKeyDown
)
241 EVT_KEY_UP(MyTextCtrl::OnKeyUp
)
242 EVT_CHAR(MyTextCtrl::OnChar
)
243 EVT_TEXT(-1, MyTextCtrl::OnText
)
246 void MyTextCtrl::LogEvent(const wxChar
*name
, wxKeyEvent
& event
) const
249 long keycode
= event
.KeyCode();
253 case WXK_BACK
: key
= "BACK"; break;
254 case WXK_TAB
: key
= "TAB"; break;
255 case WXK_RETURN
: key
= "RETURN"; break;
256 case WXK_ESCAPE
: key
= "ESCAPE"; break;
257 case WXK_SPACE
: key
= "SPACE"; break;
258 case WXK_DELETE
: key
= "DELETE"; break;
259 case WXK_START
: key
= "START"; break;
260 case WXK_LBUTTON
: key
= "LBUTTON"; break;
261 case WXK_RBUTTON
: key
= "RBUTTON"; break;
262 case WXK_CANCEL
: key
= "CANCEL"; break;
263 case WXK_MBUTTON
: key
= "MBUTTON"; break;
264 case WXK_CLEAR
: key
= "CLEAR"; break;
265 case WXK_SHIFT
: key
= "SHIFT"; break;
266 case WXK_ALT
: key
= "ALT"; break;
267 case WXK_CONTROL
: key
= "CONTROL"; break;
268 case WXK_MENU
: key
= "MENU"; break;
269 case WXK_PAUSE
: key
= "PAUSE"; break;
270 case WXK_CAPITAL
: key
= "CAPITAL"; break;
271 case WXK_PRIOR
: key
= "PRIOR"; break;
272 case WXK_NEXT
: key
= "NEXT"; break;
273 case WXK_END
: key
= "END"; break;
274 case WXK_HOME
: key
= "HOME"; break;
275 case WXK_LEFT
: key
= "LEFT"; break;
276 case WXK_UP
: key
= "UP"; break;
277 case WXK_RIGHT
: key
= "RIGHT"; break;
278 case WXK_DOWN
: key
= "DOWN"; break;
279 case WXK_SELECT
: key
= "SELECT"; break;
280 case WXK_PRINT
: key
= "PRINT"; break;
281 case WXK_EXECUTE
: key
= "EXECUTE"; break;
282 case WXK_SNAPSHOT
: key
= "SNAPSHOT"; break;
283 case WXK_INSERT
: key
= "INSERT"; break;
284 case WXK_HELP
: key
= "HELP"; break;
285 case WXK_NUMPAD0
: key
= "NUMPAD0"; break;
286 case WXK_NUMPAD1
: key
= "NUMPAD1"; break;
287 case WXK_NUMPAD2
: key
= "NUMPAD2"; break;
288 case WXK_NUMPAD3
: key
= "NUMPAD3"; break;
289 case WXK_NUMPAD4
: key
= "NUMPAD4"; break;
290 case WXK_NUMPAD5
: key
= "NUMPAD5"; break;
291 case WXK_NUMPAD6
: key
= "NUMPAD6"; break;
292 case WXK_NUMPAD7
: key
= "NUMPAD7"; break;
293 case WXK_NUMPAD8
: key
= "NUMPAD8"; break;
294 case WXK_NUMPAD9
: key
= "NUMPAD9"; break;
295 case WXK_MULTIPLY
: key
= "MULTIPLY"; break;
296 case WXK_ADD
: key
= "ADD"; break;
297 case WXK_SEPARATOR
: key
= "SEPARATOR"; break;
298 case WXK_SUBTRACT
: key
= "SUBTRACT"; break;
299 case WXK_DECIMAL
: key
= "DECIMAL"; break;
300 case WXK_DIVIDE
: key
= "DIVIDE"; break;
301 case WXK_F1
: key
= "F1"; break;
302 case WXK_F2
: key
= "F2"; break;
303 case WXK_F3
: key
= "F3"; break;
304 case WXK_F4
: key
= "F4"; break;
305 case WXK_F5
: key
= "F5"; break;
306 case WXK_F6
: key
= "F6"; break;
307 case WXK_F7
: key
= "F7"; break;
308 case WXK_F8
: key
= "F8"; break;
309 case WXK_F9
: key
= "F9"; break;
310 case WXK_F10
: key
= "F10"; break;
311 case WXK_F11
: key
= "F11"; break;
312 case WXK_F12
: key
= "F12"; break;
313 case WXK_F13
: key
= "F13"; break;
314 case WXK_F14
: key
= "F14"; break;
315 case WXK_F15
: key
= "F15"; break;
316 case WXK_F16
: key
= "F16"; break;
317 case WXK_F17
: key
= "F17"; break;
318 case WXK_F18
: key
= "F18"; break;
319 case WXK_F19
: key
= "F19"; break;
320 case WXK_F20
: key
= "F20"; break;
321 case WXK_F21
: key
= "F21"; break;
322 case WXK_F22
: key
= "F22"; break;
323 case WXK_F23
: key
= "F23"; break;
324 case WXK_F24
: key
= "F24"; break;
325 case WXK_NUMLOCK
: key
= "NUMLOCK"; break;
326 case WXK_SCROLL
: key
= "SCROLL"; break;
327 case WXK_PAGEUP
: key
= "PAGEUP"; break;
328 case WXK_PAGEDOWN
: key
= "PAGEDOWN"; break;
329 case WXK_NUMPAD_SPACE
: key
= "NUMPAD_SPACE"; break;
330 case WXK_NUMPAD_TAB
: key
= "NUMPAD_TAB"; break;
331 case WXK_NUMPAD_ENTER
: key
= "NUMPAD_ENTER"; break;
332 case WXK_NUMPAD_F1
: key
= "NUMPAD_F1"; break;
333 case WXK_NUMPAD_F2
: key
= "NUMPAD_F2"; break;
334 case WXK_NUMPAD_F3
: key
= "NUMPAD_F3"; break;
335 case WXK_NUMPAD_F4
: key
= "NUMPAD_F4"; break;
336 case WXK_NUMPAD_HOME
: key
= "NUMPAD_HOME"; break;
337 case WXK_NUMPAD_LEFT
: key
= "NUMPAD_LEFT"; break;
338 case WXK_NUMPAD_UP
: key
= "NUMPAD_UP"; break;
339 case WXK_NUMPAD_RIGHT
: key
= "NUMPAD_RIGHT"; break;
340 case WXK_NUMPAD_DOWN
: key
= "NUMPAD_DOWN"; break;
341 case WXK_NUMPAD_PRIOR
: key
= "NUMPAD_PRIOR"; break;
342 case WXK_NUMPAD_PAGEUP
: key
= "NUMPAD_PAGEUP"; break;
343 case WXK_NUMPAD_PAGEDOWN
: key
= "NUMPAD_PAGEDOWN"; break;
344 case WXK_NUMPAD_END
: key
= "NUMPAD_END"; break;
345 case WXK_NUMPAD_BEGIN
: key
= "NUMPAD_BEGIN"; break;
346 case WXK_NUMPAD_INSERT
: key
= "NUMPAD_INSERT"; break;
347 case WXK_NUMPAD_DELETE
: key
= "NUMPAD_DELETE"; break;
348 case WXK_NUMPAD_EQUAL
: key
= "NUMPAD_EQUAL"; break;
349 case WXK_NUMPAD_MULTIPLY
: key
= "NUMPAD_MULTIPLY"; break;
350 case WXK_NUMPAD_ADD
: key
= "NUMPAD_ADD"; break;
351 case WXK_NUMPAD_SEPARATOR
: key
= "NUMPAD_SEPARATOR"; break;
352 case WXK_NUMPAD_SUBTRACT
: key
= "NUMPAD_SUBTRACT"; break;
353 case WXK_NUMPAD_DECIMAL
: key
= "NUMPAD_DECIMAL"; break;
357 if ( wxIsprint((int)keycode
) )
358 key
.Printf( _T("'%c'") , (char)keycode
);
360 key
.Printf( _T("unknown (%ld)"), keycode
);
365 wxLogMessage( _T("%s event: %s (flags = %c%c%c%c)"),
368 GetChar( event
.ControlDown(), _T('C') ),
369 GetChar( event
.AltDown(), _T('A') ),
370 GetChar( event
.ShiftDown(), _T('S') ),
371 GetChar( event
.MetaDown(), _T('M') ) );
375 void MyTextCtrl::OnText(wxCommandEvent
& event
)
377 MyTextCtrl
*win
= (MyTextCtrl
*)event
.GetEventObject();
378 const wxChar
*data
= (const wxChar
*)(win
->GetClientData());
381 wxLogMessage(_T("text changed in control '%s'"), data
);
385 void MyTextCtrl::OnChar(wxKeyEvent
& event
)
387 LogEvent( _T("Char"), event
);
389 /* How are we supposed to test wxTE_PROCESS_TAB with this code?
391 if ( event.KeyCode() == WXK_TAB )
403 void MyTextCtrl::OnKeyUp(wxKeyEvent
& event
)
405 LogEvent( _T("Key up"), event
);
410 void MyTextCtrl::OnKeyDown(wxKeyEvent
& event
)
412 switch ( event
.KeyCode() )
415 // show current position and text length
417 long line
, column
, pos
= GetInsertionPoint();
418 PositionToXY(pos
, &column
, &line
);
420 wxLogMessage( _T("Current position: %ld\n"
421 "Current line, column: (%ld, %ld)\n"
422 "Number of lines: %ld\n"
423 "Current line length: %ld\n"
424 "Total text length: %ld"),
435 SetInsertionPointEnd();
440 SetInsertionPoint(10);
446 wxLogDebug( wxT("Now capturing mouse and events.") );
452 wxLogDebug( wxT("Stopped capturing mouse and events.") );
459 // insert a blank line
464 LogEvent( wxT("Key down"), event
);
470 //----------------------------------------------------------------------
472 //----------------------------------------------------------------------
474 BEGIN_EVENT_TABLE(MyPanel
, wxPanel
)
475 EVT_SIZE(MyPanel::OnSize
)
478 MyPanel::MyPanel( wxFrame
*frame
, int x
, int y
, int w
, int h
)
479 : wxPanel( frame
, -1, wxPoint(x
, y
), wxSize(w
, h
) )
481 m_log
= new wxTextCtrl( this, -1, "This is the log window.\n", wxPoint(5,260), wxSize(630,100), wxTE_MULTILINE
);
483 wxLog
*old_log
= wxLog::SetActiveTarget( new wxLogTextCtrl( m_log
) );
487 // single line text controls
489 m_text
= new MyTextCtrl( this, -1, "Single line.",
490 wxPoint(10,10), wxSize(140,-1), 0);
491 (*m_text
) << " Appended.";
492 m_text
->SetInsertionPoint(0);
493 m_text
->WriteText( "Prepended. " );
495 m_password
= new MyTextCtrl( this, -1, "",
496 wxPoint(10,50), wxSize(140,-1), wxTE_PASSWORD
);
498 m_readonly
= new MyTextCtrl( this, -1, "Read only",
499 wxPoint(10,90), wxSize(140,-1), wxTE_READONLY
);
501 // multi line text controls
503 m_horizontal
= new MyTextCtrl( this, -1, "Multiline text control with a horizontal scrollbar.",
504 wxPoint(10,170), wxSize(140,70), wxTE_MULTILINE
| wxHSCROLL
);
505 m_horizontal
->SetFont(wxFont(18, wxSWISS
, wxNORMAL
, wxNORMAL
,
506 FALSE
, "", wxFONTENCODING_KOI8
));
508 m_multitext
= new MyTextCtrl( this, -1, "Multi line.",
509 wxPoint(180,10), wxSize(240,70), wxTE_MULTILINE
);
510 (*m_multitext
) << " Appended.";
511 m_multitext
->SetInsertionPoint(0);
512 m_multitext
->WriteText( "Prepended. " );
515 m_multitext
->SetToolTip("Press F1 here for statitics, F4 for capture and uncapture mouse.");
518 m_tab
= new MyTextCtrl( this, 100, "Multiline, allow <TAB> processing.",
519 wxPoint(180,90), wxSize(240,70), wxTE_MULTILINE
| wxTE_PROCESS_TAB
);
520 m_tab
->SetClientData(_T("tab"));
522 m_enter
= new MyTextCtrl( this, 100, "Multiline, allow <ENTER> processing.",
523 wxPoint(180,170), wxSize(240,70), wxTE_MULTILINE
);
524 m_enter
->SetClientData(_T("enter"));
526 m_textrich
= new MyTextCtrl(this, -1, "Allows more than 30Kb of text\n"
527 "(even under broken Win9x)",
528 wxPoint(450, 10), wxSize(200, 230),
529 wxTE_RICH
| wxTE_MULTILINE
);
532 void MyPanel::OnSize( wxSizeEvent
&event
)
534 wxSize
client_area( GetClientSize() );
535 m_log
->SetSize( 0, 260, client_area
.x
, client_area
.y
- 260 );
540 void MyPanel::DoPasteFromClipboard()
542 // On X11, we want to get the data from the primary selection instead
543 // of the normal clipboard (which isn't normal under X11 at all). This
544 // call has no effect under MSW.
545 wxTheClipboard
->UsePrimarySelection();
547 if (!wxTheClipboard
->Open())
549 *m_log
<< "Error opening the clipboard.\n";
554 *m_log
<< "Successfully opened the clipboard.\n";
557 wxTextDataObject data
;
559 if (wxTheClipboard
->IsSupported( data
.GetFormat() ))
561 *m_log
<< "Clipboard supports requested format.\n";
563 if (wxTheClipboard
->GetData( data
))
565 *m_log
<< "Successfully retrieved data from the clipboard.\n";
566 *m_multitext
<< data
.GetText() << "\n";
570 *m_log
<< "Error getting data from the clipboard.\n";
575 *m_log
<< "Clipboard doesn't support requested format.\n";
578 wxTheClipboard
->Close();
580 *m_log
<< "Closed the clipboard.\n";
583 void MyPanel::DoCopyToClipboard()
585 // On X11, we want to get the data from the primary selection instead
586 // of the normal clipboard (which isn't normal under X11 at all). This
587 // call has no effect under MSW.
588 wxTheClipboard
->UsePrimarySelection();
590 wxString
text( m_multitext
->GetLineText(0) );
594 *m_log
<< "No text to copy.\n";
599 if (!wxTheClipboard
->Open())
601 *m_log
<< "Error opening the clipboard.\n";
607 *m_log
<< "Successfully opened the clipboard.\n";
610 wxTextDataObject
*data
= new wxTextDataObject( text
);
612 if (!wxTheClipboard
->SetData( data
))
614 *m_log
<< "Error while copying to the clipboard.\n";
618 *m_log
<< "Successfully copied data to the clipboard.\n";
621 wxTheClipboard
->Close();
623 *m_log
<< "Closed the clipboard.\n";
626 #endif // wxUSE_CLIPBOARD
628 void MyPanel::DoMoveToEndOfText()
630 m_multitext
->SetInsertionPointEnd();
631 m_multitext
->SetFocus();
634 void MyPanel::DoMoveToEndOfEntry()
636 m_text
->SetInsertionPointEnd();
640 //----------------------------------------------------------------------
642 //----------------------------------------------------------------------
644 BEGIN_EVENT_TABLE(MyFrame
, wxFrame
)
645 EVT_MENU(TEXT_QUIT
, MyFrame::OnQuit
)
646 EVT_MENU(TEXT_ABOUT
, MyFrame::OnAbout
)
647 EVT_MENU(TEXT_SAVE
, MyFrame::OnFileSave
)
648 EVT_MENU(TEXT_LOAD
, MyFrame::OnFileLoad
)
649 EVT_MENU(TEXT_CLEAR
, MyFrame::OnLogClear
)
652 EVT_MENU(TEXT_TOOLTIPS_SETDELAY
, MyFrame::OnSetTooltipDelay
)
653 EVT_MENU(TEXT_TOOLTIPS_ENABLE
, MyFrame::OnToggleTooltips
)
654 #endif // wxUSE_TOOLTIPS
657 EVT_MENU(TEXT_CLIPBOARD_PASTE
, MyFrame::OnPasteFromClipboard
)
658 EVT_MENU(TEXT_CLIPBOARD_COPY
, MyFrame::OnCopyToClipboard
)
659 #endif // wxUSE_CLIPBOARD
661 EVT_MENU(TEXT_MOVE_ENDTEXT
, MyFrame::OnMoveToEndOfText
)
662 EVT_MENU(TEXT_MOVE_ENDENTRY
, MyFrame::OnMoveToEndOfEntry
)
664 EVT_IDLE(MyFrame::OnIdle
)
667 MyFrame::MyFrame(wxFrame
*frame
, const char *title
, int x
, int y
, int w
, int h
)
668 : wxFrame(frame
, -1, title
, wxPoint(x
, y
), wxSize(w
, h
) )
672 m_panel
= new MyPanel( this, 10, 10, 300, 100 );
675 void MyFrame::OnQuit (wxCommandEvent
& WXUNUSED(event
) )
680 void MyFrame::OnAbout( wxCommandEvent
& WXUNUSED(event
) )
684 wxMessageDialog
dialog(this,
685 "This is a text control sample. It demonstrates the many different\n"
686 "text control styles, the use of the clipboard, setting and handling\n"
687 "tooltips and intercepting key and char events.\n"
689 "Copyright (c) 1999, Robert Roebling, Julian Smart, Vadim Zeitlin",
690 "About Text Controls",
691 wxOK
| wxICON_INFORMATION
);
699 void MyFrame::OnSetTooltipDelay(wxCommandEvent
& event
)
701 static long s_delay
= 5000;
704 delay
.Printf( _T("%ld"), s_delay
);
706 delay
= wxGetTextFromUser("Enter delay (in milliseconds)",
713 wxSscanf(delay
, _T("%ld"), &s_delay
);
715 wxToolTip::SetDelay(s_delay
);
717 wxLogStatus(this, _T("Tooltip delay set to %ld milliseconds"), s_delay
);
720 void MyFrame::OnToggleTooltips(wxCommandEvent
& event
)
722 static bool s_enabled
= TRUE
;
724 s_enabled
= !s_enabled
;
726 wxToolTip::Enable(s_enabled
);
728 wxLogStatus(this, _T("Tooltips %sabled"), s_enabled
? _T("en") : _T("dis") );
732 void MyFrame::OnLogClear(wxCommandEvent
& WXUNUSED(event
))
734 m_panel
->m_log
->Clear();
737 void MyFrame::OnFileSave(wxCommandEvent
& event
)
739 if ( m_panel
->m_textrich
->SaveFile("dummy.txt") )
742 // verify that the fil length is correct (it wasn't under Win95)
743 wxFile
file("dummy.txt");
744 wxLogStatus(this, _T("Successfully saved file "
745 "(text len = %ld, file size = %ld)"),
746 m_panel
->m_textrich
->GetValue().length(),
751 wxLogStatus(this, _T("Couldn't save the file"));
754 void MyFrame::OnFileLoad(wxCommandEvent
& event
)
756 if ( m_panel
->m_textrich
->LoadFile("dummy.txt") )
757 wxLogStatus(this, _T("Successfully loaded file"));
759 wxLogStatus(this, _T("Couldn't load the file"));
762 void MyFrame::OnIdle( wxIdleEvent
& event
)
764 // track the window which has the focus in the status bar
765 static wxWindow
*s_windowFocus
= (wxWindow
*)NULL
;
766 wxWindow
*focus
= wxWindow::FindFocus();
767 if ( focus
&& (focus
!= s_windowFocus
) )
769 s_windowFocus
= focus
;
774 _T("Focus: wxWindow = %p, HWND = %08x"),
776 _T("Focus: wxWindow = %p"),
780 , s_windowFocus
->GetHWND()