]>
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, Vadim Zeitlin
8 // Licence: wxWindows license
9 /////////////////////////////////////////////////////////////////////////////
12 #pragma interface "text.cpp"
13 #pragma implementation "text.cpp"
16 // For compilers that support precompilation, includes "wx/wx.h".
17 #include "wx/wxprec.h"
28 #include "wx/dataobj.h"
29 #include "wx/clipbrd.h"
37 #include "wx/tooltip.h"
40 // We test for wxUSE_DRAG_AND_DROP also, because data objects may not be
41 // implemented for compilers that can't cope with the OLE parts in
42 // wxUSE_DRAG_AND_DROP.
43 #if !wxUSE_DRAG_AND_DROP
44 #undef wxUSE_CLIPBOARD
45 #define wxUSE_CLIPBOARD 0
48 //----------------------------------------------------------------------
50 //----------------------------------------------------------------------
52 class MyApp
: public wxApp
58 // a text ctrl which allows to call different wxTextCtrl functions
59 // interactively by pressing function keys in it
60 class MyTextCtrl
: public wxTextCtrl
63 MyTextCtrl(wxWindow
*parent
, wxWindowID id
, const wxString
&value
,
64 const wxPoint
&pos
, const wxSize
&size
, int style
= 0)
65 : wxTextCtrl(parent
, id
, value
, pos
, size
, style
) { m_hasCapture
= FALSE
; }
67 void OnKeyDown(wxKeyEvent
& event
);
68 void OnKeyUp(wxKeyEvent
& event
);
69 void OnChar(wxKeyEvent
& event
);
70 void OnText(wxCommandEvent
& event
);
71 void OnMouseEvent(wxMouseEvent
& event
);
76 static inline wxChar
GetChar(bool on
, wxChar c
) { return on
? c
: _T('-'); }
77 void LogEvent(const wxChar
*name
, wxKeyEvent
& event
) const;
82 class MyPanel
: public wxPanel
85 MyPanel(wxFrame
*frame
, int x
, int y
, int w
, int h
);
88 void DoPasteFromClipboard();
89 void DoCopyToClipboard();
90 #endif // wxUSE_CLIPBOARD
92 void DoMoveToEndOfText();
93 void DoMoveToEndOfEntry();
95 void OnSize( wxSizeEvent
&event
);
98 MyTextCtrl
*m_password
;
101 MyTextCtrl
*m_readonly
;
103 MyTextCtrl
*m_multitext
;
104 MyTextCtrl
*m_horizontal
;
106 MyTextCtrl
*m_textrich
;
111 DECLARE_EVENT_TABLE()
114 class MyFrame
: public wxFrame
117 MyFrame(wxFrame
*frame
, const char *title
, int x
, int y
, int w
, int h
);
119 void OnQuit(wxCommandEvent
& event
);
120 void OnAbout(wxCommandEvent
& event
);
122 void OnSetTooltipDelay(wxCommandEvent
& event
);
123 void OnToggleTooltips(wxCommandEvent
& event
);
124 #endif // wxUSE_TOOLTIPS
127 void OnPasteFromClipboard( wxCommandEvent
&event
)
128 { m_panel
->DoPasteFromClipboard(); }
129 void OnCopyToClipboard( wxCommandEvent
&event
)
130 { m_panel
->DoCopyToClipboard(); }
131 #endif // wxUSE_CLIPBOARD
133 void OnMoveToEndOfText( wxCommandEvent
&event
)
134 { m_panel
->DoMoveToEndOfText(); }
135 void OnMoveToEndOfEntry( wxCommandEvent
&event
)
136 { m_panel
->DoMoveToEndOfEntry(); }
138 void OnLogClear(wxCommandEvent
& event
);
139 void OnFileSave(wxCommandEvent
& event
);
140 void OnFileLoad(wxCommandEvent
& event
);
142 void OnIdle( wxIdleEvent
& event
);
147 DECLARE_EVENT_TABLE()
150 //----------------------------------------------------------------------
152 //----------------------------------------------------------------------
156 //----------------------------------------------------------------------
158 //----------------------------------------------------------------------
169 TEXT_CLIPBOARD_COPY
= 200,
170 TEXT_CLIPBOARD_PASTE
,
173 TEXT_TOOLTIPS_SETDELAY
= 300,
174 TEXT_TOOLTIPS_ENABLE
,
177 TEXT_MOVE_ENDTEXT
= 400,
183 // Create the main frame window
184 MyFrame
*frame
= new MyFrame((wxFrame
*) NULL
,
185 "Text wxWindows sample", 50, 50, 660, 420);
186 frame
->SetSizeHints( 500, 400 );
188 wxMenu
*file_menu
= new wxMenu
;
189 file_menu
->Append(TEXT_CLEAR
, "&Clear the log\tCtrl-C",
190 "Clear the log window contents");
191 file_menu
->Append(TEXT_SAVE
, "&Save file\tCtrl-S",
192 "Save the text control contents to file");
193 file_menu
->Append(TEXT_LOAD
, "&Load file\tCtrl-O",
194 "Load the sample file into text control");
195 file_menu
->AppendSeparator();
196 file_menu
->Append(TEXT_ABOUT
, "&About\tAlt-A");
197 file_menu
->AppendSeparator();
198 file_menu
->Append(TEXT_QUIT
, "E&xit\tAlt-X", "Quit this sample");
200 wxMenuBar
*menu_bar
= new wxMenuBar( wxMB_DOCKABLE
);
201 menu_bar
->Append(file_menu
, "&File");
204 wxMenu
*tooltip_menu
= new wxMenu
;
205 tooltip_menu
->Append(TEXT_TOOLTIPS_SETDELAY
, "Set &delay\tCtrl-D");
206 tooltip_menu
->AppendSeparator();
207 tooltip_menu
->Append(TEXT_TOOLTIPS_ENABLE
, "&Toggle tooltips\tCtrl-T",
208 "enable/disable tooltips", TRUE
);
209 tooltip_menu
->Check(TEXT_TOOLTIPS_ENABLE
, TRUE
);
210 menu_bar
->Append(tooltip_menu
, "&Tooltips");
211 #endif // wxUSE_TOOLTIPS
214 wxMenu
*menuClipboard
= new wxMenu
;
215 menuClipboard
->Append(TEXT_CLIPBOARD_COPY
, "&Copy\tCtrl-C",
216 "Copy the first line to the clipboard");
217 menuClipboard
->Append(TEXT_CLIPBOARD_PASTE
, "&Paste\tCtrl-V",
218 "Paste from clipboard to the text control");
219 menu_bar
->Append(menuClipboard
, "&Clipboard");
220 #endif // wxUSE_CLIPBOARD
222 wxMenu
*menuMove
= new wxMenu
;
223 menuMove
->Append(TEXT_MOVE_ENDTEXT
, "To the end of &text");
224 menuMove
->Append(TEXT_MOVE_ENDENTRY
, "To the end of &entry");
225 menu_bar
->Append(menuMove
, "&Move");
227 frame
->SetMenuBar(menu_bar
);
237 //----------------------------------------------------------------------
239 //----------------------------------------------------------------------
241 BEGIN_EVENT_TABLE(MyTextCtrl
, wxTextCtrl
)
242 EVT_KEY_DOWN(MyTextCtrl::OnKeyDown
)
243 EVT_KEY_UP(MyTextCtrl::OnKeyUp
)
244 EVT_CHAR(MyTextCtrl::OnChar
)
245 EVT_TEXT(-1, MyTextCtrl::OnText
)
246 EVT_MOUSE_EVENTS(MyTextCtrl::OnMouseEvent
)
249 void MyTextCtrl::LogEvent(const wxChar
*name
, wxKeyEvent
& event
) const
252 long keycode
= event
.KeyCode();
256 case WXK_BACK
: key
= "BACK"; break;
257 case WXK_TAB
: key
= "TAB"; break;
258 case WXK_RETURN
: key
= "RETURN"; break;
259 case WXK_ESCAPE
: key
= "ESCAPE"; break;
260 case WXK_SPACE
: key
= "SPACE"; break;
261 case WXK_DELETE
: key
= "DELETE"; break;
262 case WXK_START
: key
= "START"; break;
263 case WXK_LBUTTON
: key
= "LBUTTON"; break;
264 case WXK_RBUTTON
: key
= "RBUTTON"; break;
265 case WXK_CANCEL
: key
= "CANCEL"; break;
266 case WXK_MBUTTON
: key
= "MBUTTON"; break;
267 case WXK_CLEAR
: key
= "CLEAR"; break;
268 case WXK_SHIFT
: key
= "SHIFT"; break;
269 case WXK_ALT
: key
= "ALT"; break;
270 case WXK_CONTROL
: key
= "CONTROL"; break;
271 case WXK_MENU
: key
= "MENU"; break;
272 case WXK_PAUSE
: key
= "PAUSE"; break;
273 case WXK_CAPITAL
: key
= "CAPITAL"; break;
274 case WXK_PRIOR
: key
= "PRIOR"; break;
275 case WXK_NEXT
: key
= "NEXT"; break;
276 case WXK_END
: key
= "END"; break;
277 case WXK_HOME
: key
= "HOME"; break;
278 case WXK_LEFT
: key
= "LEFT"; break;
279 case WXK_UP
: key
= "UP"; break;
280 case WXK_RIGHT
: key
= "RIGHT"; break;
281 case WXK_DOWN
: key
= "DOWN"; break;
282 case WXK_SELECT
: key
= "SELECT"; break;
283 case WXK_PRINT
: key
= "PRINT"; break;
284 case WXK_EXECUTE
: key
= "EXECUTE"; break;
285 case WXK_SNAPSHOT
: key
= "SNAPSHOT"; break;
286 case WXK_INSERT
: key
= "INSERT"; break;
287 case WXK_HELP
: key
= "HELP"; break;
288 case WXK_NUMPAD0
: key
= "NUMPAD0"; break;
289 case WXK_NUMPAD1
: key
= "NUMPAD1"; break;
290 case WXK_NUMPAD2
: key
= "NUMPAD2"; break;
291 case WXK_NUMPAD3
: key
= "NUMPAD3"; break;
292 case WXK_NUMPAD4
: key
= "NUMPAD4"; break;
293 case WXK_NUMPAD5
: key
= "NUMPAD5"; break;
294 case WXK_NUMPAD6
: key
= "NUMPAD6"; break;
295 case WXK_NUMPAD7
: key
= "NUMPAD7"; break;
296 case WXK_NUMPAD8
: key
= "NUMPAD8"; break;
297 case WXK_NUMPAD9
: key
= "NUMPAD9"; break;
298 case WXK_MULTIPLY
: key
= "MULTIPLY"; break;
299 case WXK_ADD
: key
= "ADD"; break;
300 case WXK_SEPARATOR
: key
= "SEPARATOR"; break;
301 case WXK_SUBTRACT
: key
= "SUBTRACT"; break;
302 case WXK_DECIMAL
: key
= "DECIMAL"; break;
303 case WXK_DIVIDE
: key
= "DIVIDE"; break;
304 case WXK_F1
: key
= "F1"; break;
305 case WXK_F2
: key
= "F2"; break;
306 case WXK_F3
: key
= "F3"; break;
307 case WXK_F4
: key
= "F4"; break;
308 case WXK_F5
: key
= "F5"; break;
309 case WXK_F6
: key
= "F6"; break;
310 case WXK_F7
: key
= "F7"; break;
311 case WXK_F8
: key
= "F8"; break;
312 case WXK_F9
: key
= "F9"; break;
313 case WXK_F10
: key
= "F10"; break;
314 case WXK_F11
: key
= "F11"; break;
315 case WXK_F12
: key
= "F12"; break;
316 case WXK_F13
: key
= "F13"; break;
317 case WXK_F14
: key
= "F14"; break;
318 case WXK_F15
: key
= "F15"; break;
319 case WXK_F16
: key
= "F16"; break;
320 case WXK_F17
: key
= "F17"; break;
321 case WXK_F18
: key
= "F18"; break;
322 case WXK_F19
: key
= "F19"; break;
323 case WXK_F20
: key
= "F20"; break;
324 case WXK_F21
: key
= "F21"; break;
325 case WXK_F22
: key
= "F22"; break;
326 case WXK_F23
: key
= "F23"; break;
327 case WXK_F24
: key
= "F24"; break;
328 case WXK_NUMLOCK
: key
= "NUMLOCK"; break;
329 case WXK_SCROLL
: key
= "SCROLL"; break;
330 case WXK_PAGEUP
: key
= "PAGEUP"; break;
331 case WXK_PAGEDOWN
: key
= "PAGEDOWN"; break;
332 case WXK_NUMPAD_SPACE
: key
= "NUMPAD_SPACE"; break;
333 case WXK_NUMPAD_TAB
: key
= "NUMPAD_TAB"; break;
334 case WXK_NUMPAD_ENTER
: key
= "NUMPAD_ENTER"; break;
335 case WXK_NUMPAD_F1
: key
= "NUMPAD_F1"; break;
336 case WXK_NUMPAD_F2
: key
= "NUMPAD_F2"; break;
337 case WXK_NUMPAD_F3
: key
= "NUMPAD_F3"; break;
338 case WXK_NUMPAD_F4
: key
= "NUMPAD_F4"; break;
339 case WXK_NUMPAD_HOME
: key
= "NUMPAD_HOME"; break;
340 case WXK_NUMPAD_LEFT
: key
= "NUMPAD_LEFT"; break;
341 case WXK_NUMPAD_UP
: key
= "NUMPAD_UP"; break;
342 case WXK_NUMPAD_RIGHT
: key
= "NUMPAD_RIGHT"; break;
343 case WXK_NUMPAD_DOWN
: key
= "NUMPAD_DOWN"; break;
344 case WXK_NUMPAD_PRIOR
: key
= "NUMPAD_PRIOR"; break;
345 case WXK_NUMPAD_PAGEUP
: key
= "NUMPAD_PAGEUP"; break;
346 case WXK_NUMPAD_PAGEDOWN
: key
= "NUMPAD_PAGEDOWN"; break;
347 case WXK_NUMPAD_END
: key
= "NUMPAD_END"; break;
348 case WXK_NUMPAD_BEGIN
: key
= "NUMPAD_BEGIN"; break;
349 case WXK_NUMPAD_INSERT
: key
= "NUMPAD_INSERT"; break;
350 case WXK_NUMPAD_DELETE
: key
= "NUMPAD_DELETE"; break;
351 case WXK_NUMPAD_EQUAL
: key
= "NUMPAD_EQUAL"; break;
352 case WXK_NUMPAD_MULTIPLY
: key
= "NUMPAD_MULTIPLY"; break;
353 case WXK_NUMPAD_ADD
: key
= "NUMPAD_ADD"; break;
354 case WXK_NUMPAD_SEPARATOR
: key
= "NUMPAD_SEPARATOR"; break;
355 case WXK_NUMPAD_SUBTRACT
: key
= "NUMPAD_SUBTRACT"; break;
356 case WXK_NUMPAD_DECIMAL
: key
= "NUMPAD_DECIMAL"; break;
360 if ( wxIsprint((int)keycode
) )
361 key
.Printf( _T("'%c'") , (char)keycode
);
363 key
.Printf( _T("unknown (%ld)"), keycode
);
368 wxLogMessage( _T("%s event: %s (flags = %c%c%c%c)"),
371 GetChar( event
.ControlDown(), _T('C') ),
372 GetChar( event
.AltDown(), _T('A') ),
373 GetChar( event
.ShiftDown(), _T('S') ),
374 GetChar( event
.MetaDown(), _T('M') ) );
377 void MyTextCtrl::OnMouseEvent(wxMouseEvent
& ev
)
384 msg
= _T("Mouse entered the window");
386 else if ( ev
.Leaving() )
388 msg
= _T("Mouse left the window");
395 if ( ev
.LeftDown() || ev
.LeftUp() || ev
.LeftDClick() )
398 dbl
= ev
.LeftDClick();
401 else if ( ev
.MiddleDown() || ev
.MiddleUp() || ev
.MiddleDClick() )
403 button
= _T("Middle");
404 dbl
= ev
.MiddleDClick();
407 else if ( ev
.RightDown() || ev
.RightUp() || ev
.RightDClick() )
409 button
= _T("Right");
410 dbl
= ev
.RightDClick();
415 wxLogStatus(_T("Unknown mouse event"));
419 msg
.Printf(_T("%s mouse button %s"),
421 dbl
? _T("double clicked")
422 : up
? _T("released") : _T("clicked"));
425 msg
<< _T(" at (") << ev
.GetX() << _T(", ") << ev
.GetY() << _T(") ")
427 << GetChar( ev
.LeftIsDown(), _T('1') )
428 << GetChar( ev
.MiddleIsDown(), _T('2') )
429 << GetChar( ev
.RightIsDown(), _T('3') )
430 << GetChar( ev
.ControlDown(), _T('C') )
431 << GetChar( ev
.AltDown(), _T('A') )
432 << GetChar( ev
.ShiftDown(), _T('S') )
433 << GetChar( ev
.MetaDown(), _T('M') );
437 //else: we're not interested in mouse move events
442 void MyTextCtrl::OnText(wxCommandEvent
& event
)
444 MyTextCtrl
*win
= (MyTextCtrl
*)event
.GetEventObject();
445 const wxChar
*data
= (const wxChar
*)(win
->GetClientData());
448 wxLogMessage(_T("Text changed in control '%s'"), data
);
452 void MyTextCtrl::OnChar(wxKeyEvent
& event
)
454 LogEvent( _T("Char"), event
);
456 /* How are we supposed to test wxTE_PROCESS_TAB with this code?
458 if ( event.KeyCode() == WXK_TAB )
470 void MyTextCtrl::OnKeyUp(wxKeyEvent
& event
)
472 LogEvent( _T("Key up"), event
);
477 void MyTextCtrl::OnKeyDown(wxKeyEvent
& event
)
479 switch ( event
.KeyCode() )
482 // show current position and text length
484 long line
, column
, pos
= GetInsertionPoint();
485 PositionToXY(pos
, &column
, &line
);
487 wxLogMessage( _T("Current position: %ld\n"
488 "Current line, column: (%ld, %ld)\n"
489 "Number of lines: %ld\n"
490 "Current line length: %ld\n"
491 "Total text length: %ld"),
502 SetInsertionPointEnd();
507 SetInsertionPoint(10);
513 wxLogDebug( wxT("Now capturing mouse and events.") );
519 wxLogDebug( wxT("Stopped capturing mouse and events.") );
526 // insert a blank line
531 LogEvent( wxT("Key down"), event
);
537 //----------------------------------------------------------------------
539 //----------------------------------------------------------------------
541 BEGIN_EVENT_TABLE(MyPanel
, wxPanel
)
542 EVT_SIZE(MyPanel::OnSize
)
545 MyPanel::MyPanel( wxFrame
*frame
, int x
, int y
, int w
, int h
)
546 : wxPanel( frame
, -1, wxPoint(x
, y
), wxSize(w
, h
) )
548 m_log
= new wxTextCtrl( this, -1, "This is the log window.\n", wxPoint(5,260), wxSize(630,100), wxTE_MULTILINE
);
550 wxLog
*old_log
= wxLog::SetActiveTarget( new wxLogTextCtrl( m_log
) );
554 // single line text controls
556 m_text
= new MyTextCtrl( this, -1, "Single line.",
557 wxPoint(10,10), wxSize(140,-1), 0);
558 m_text
->SetForegroundColour(*wxBLUE
);
559 m_text
->SetBackgroundColour(*wxLIGHT_GREY
);
560 (*m_text
) << " Appended.";
561 m_text
->SetInsertionPoint(0);
562 m_text
->WriteText( "Prepended. " );
564 m_password
= new MyTextCtrl( this, -1, "",
565 wxPoint(10,50), wxSize(140,-1), wxTE_PASSWORD
);
567 m_readonly
= new MyTextCtrl( this, -1, "Read only",
568 wxPoint(10,90), wxSize(140,-1), wxTE_READONLY
);
570 // multi line text controls
572 m_horizontal
= new MyTextCtrl( this, -1, "Multiline text control with a horizontal scrollbar.",
573 wxPoint(10,170), wxSize(140,70), wxTE_MULTILINE
| wxHSCROLL
);
574 m_horizontal
->SetFont(wxFont(18, wxSWISS
, wxNORMAL
, wxNORMAL
,
575 FALSE
, "", wxFONTENCODING_KOI8
));
577 m_multitext
= new MyTextCtrl( this, -1, "Multi line.",
578 wxPoint(180,10), wxSize(240,70), wxTE_MULTILINE
);
579 (*m_multitext
) << " Appended.";
580 m_multitext
->SetInsertionPoint(0);
581 m_multitext
->WriteText( "Prepended. " );
584 m_multitext
->SetToolTip("Press F1 here for statitics, F4 for capture and uncapture mouse.");
587 m_tab
= new MyTextCtrl( this, 100, "Multiline, allow <TAB> processing.",
588 wxPoint(180,90), wxSize(240,70), wxTE_MULTILINE
| wxTE_PROCESS_TAB
);
589 m_tab
->SetClientData((void *)_T("tab"));
591 m_enter
= new MyTextCtrl( this, 100, "Multiline, allow <ENTER> processing.",
592 wxPoint(180,170), wxSize(240,70), wxTE_MULTILINE
);
593 m_enter
->SetClientData((void *)_T("enter"));
595 m_textrich
= new MyTextCtrl(this, -1, "Allows more than 30Kb of text\n"
596 "(even under broken Win9x)",
597 wxPoint(450, 10), wxSize(200, 230),
598 wxTE_RICH
| wxTE_MULTILINE
);
601 void MyPanel::OnSize( wxSizeEvent
&event
)
603 wxSize
client_area( GetClientSize() );
604 m_log
->SetSize( 0, 260, client_area
.x
, client_area
.y
- 260 );
609 void MyPanel::DoPasteFromClipboard()
611 // On X11, we want to get the data from the primary selection instead
612 // of the normal clipboard (which isn't normal under X11 at all). This
613 // call has no effect under MSW.
614 wxTheClipboard
->UsePrimarySelection();
616 if (!wxTheClipboard
->Open())
618 *m_log
<< "Error opening the clipboard.\n";
623 *m_log
<< "Successfully opened the clipboard.\n";
626 wxTextDataObject data
;
628 if (wxTheClipboard
->IsSupported( data
.GetFormat() ))
630 *m_log
<< "Clipboard supports requested format.\n";
632 if (wxTheClipboard
->GetData( data
))
634 *m_log
<< "Successfully retrieved data from the clipboard.\n";
635 *m_multitext
<< data
.GetText() << "\n";
639 *m_log
<< "Error getting data from the clipboard.\n";
644 *m_log
<< "Clipboard doesn't support requested format.\n";
647 wxTheClipboard
->Close();
649 *m_log
<< "Closed the clipboard.\n";
652 void MyPanel::DoCopyToClipboard()
654 // On X11, we want to get the data from the primary selection instead
655 // of the normal clipboard (which isn't normal under X11 at all). This
656 // call has no effect under MSW.
657 wxTheClipboard
->UsePrimarySelection();
659 wxString
text( m_multitext
->GetLineText(0) );
663 *m_log
<< "No text to copy.\n";
668 if (!wxTheClipboard
->Open())
670 *m_log
<< "Error opening the clipboard.\n";
676 *m_log
<< "Successfully opened the clipboard.\n";
679 wxTextDataObject
*data
= new wxTextDataObject( text
);
681 if (!wxTheClipboard
->SetData( data
))
683 *m_log
<< "Error while copying to the clipboard.\n";
687 *m_log
<< "Successfully copied data to the clipboard.\n";
690 wxTheClipboard
->Close();
692 *m_log
<< "Closed the clipboard.\n";
695 #endif // wxUSE_CLIPBOARD
697 void MyPanel::DoMoveToEndOfText()
699 m_multitext
->SetInsertionPointEnd();
700 m_multitext
->SetFocus();
703 void MyPanel::DoMoveToEndOfEntry()
705 m_text
->SetInsertionPointEnd();
709 //----------------------------------------------------------------------
711 //----------------------------------------------------------------------
713 BEGIN_EVENT_TABLE(MyFrame
, wxFrame
)
714 EVT_MENU(TEXT_QUIT
, MyFrame::OnQuit
)
715 EVT_MENU(TEXT_ABOUT
, MyFrame::OnAbout
)
716 EVT_MENU(TEXT_SAVE
, MyFrame::OnFileSave
)
717 EVT_MENU(TEXT_LOAD
, MyFrame::OnFileLoad
)
718 EVT_MENU(TEXT_CLEAR
, MyFrame::OnLogClear
)
721 EVT_MENU(TEXT_TOOLTIPS_SETDELAY
, MyFrame::OnSetTooltipDelay
)
722 EVT_MENU(TEXT_TOOLTIPS_ENABLE
, MyFrame::OnToggleTooltips
)
723 #endif // wxUSE_TOOLTIPS
726 EVT_MENU(TEXT_CLIPBOARD_PASTE
, MyFrame::OnPasteFromClipboard
)
727 EVT_MENU(TEXT_CLIPBOARD_COPY
, MyFrame::OnCopyToClipboard
)
728 #endif // wxUSE_CLIPBOARD
730 EVT_MENU(TEXT_MOVE_ENDTEXT
, MyFrame::OnMoveToEndOfText
)
731 EVT_MENU(TEXT_MOVE_ENDENTRY
, MyFrame::OnMoveToEndOfEntry
)
733 EVT_IDLE(MyFrame::OnIdle
)
736 MyFrame::MyFrame(wxFrame
*frame
, const char *title
, int x
, int y
, int w
, int h
)
737 : wxFrame(frame
, -1, title
, wxPoint(x
, y
), wxSize(w
, h
) )
741 m_panel
= new MyPanel( this, 10, 10, 300, 100 );
744 void MyFrame::OnQuit (wxCommandEvent
& WXUNUSED(event
) )
749 void MyFrame::OnAbout( wxCommandEvent
& WXUNUSED(event
) )
753 wxMessageDialog
dialog(this,
754 "This is a text control sample. It demonstrates the many different\n"
755 "text control styles, the use of the clipboard, setting and handling\n"
756 "tooltips and intercepting key and char events.\n"
758 "Copyright (c) 1999, Robert Roebling, Julian Smart, Vadim Zeitlin",
759 "About wxTextCtrl Sample",
760 wxOK
| wxICON_INFORMATION
);
768 void MyFrame::OnSetTooltipDelay(wxCommandEvent
& event
)
770 static long s_delay
= 5000;
773 delay
.Printf( _T("%ld"), s_delay
);
775 delay
= wxGetTextFromUser("Enter delay (in milliseconds)",
782 wxSscanf(delay
, _T("%ld"), &s_delay
);
784 wxToolTip::SetDelay(s_delay
);
786 wxLogStatus(this, _T("Tooltip delay set to %ld milliseconds"), s_delay
);
789 void MyFrame::OnToggleTooltips(wxCommandEvent
& event
)
791 static bool s_enabled
= TRUE
;
793 s_enabled
= !s_enabled
;
795 wxToolTip::Enable(s_enabled
);
797 wxLogStatus(this, _T("Tooltips %sabled"), s_enabled
? _T("en") : _T("dis") );
801 void MyFrame::OnLogClear(wxCommandEvent
& WXUNUSED(event
))
803 m_panel
->m_log
->Clear();
806 void MyFrame::OnFileSave(wxCommandEvent
& event
)
808 if ( m_panel
->m_textrich
->SaveFile("dummy.txt") )
811 // verify that the fil length is correct (it wasn't under Win95)
812 wxFile
file("dummy.txt");
813 wxLogStatus(this, _T("Successfully saved file "
814 "(text len = %ld, file size = %ld)"),
815 m_panel
->m_textrich
->GetValue().length(),
820 wxLogStatus(this, _T("Couldn't save the file"));
823 void MyFrame::OnFileLoad(wxCommandEvent
& event
)
825 if ( m_panel
->m_textrich
->LoadFile("dummy.txt") )
826 wxLogStatus(this, _T("Successfully loaded file"));
828 wxLogStatus(this, _T("Couldn't load the file"));
831 void MyFrame::OnIdle( wxIdleEvent
& event
)
833 // track the window which has the focus in the status bar
834 static wxWindow
*s_windowFocus
= (wxWindow
*)NULL
;
835 wxWindow
*focus
= wxWindow::FindFocus();
836 if ( focus
&& (focus
!= s_windowFocus
) )
838 s_windowFocus
= focus
;
843 _T("Focus: wxWindow = %p, HWND = %08x"),
845 _T("Focus: wxWindow = %p"),
849 , s_windowFocus
->GetHWND()