]>
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 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
);
70 void OnMouseEvent(wxMouseEvent
& event
);
75 static inline wxChar
GetChar(bool on
, wxChar c
) { return on
? c
: _T('-'); }
76 void LogEvent(const wxChar
*name
, wxKeyEvent
& event
) const;
81 class MyPanel
: public wxPanel
84 MyPanel(wxFrame
*frame
, int x
, int y
, int w
, int h
);
87 void DoPasteFromClipboard();
88 void DoCopyToClipboard();
89 #endif // wxUSE_CLIPBOARD
91 void DoMoveToEndOfText();
92 void DoMoveToEndOfEntry();
94 void OnSize( wxSizeEvent
&event
);
97 MyTextCtrl
*m_password
;
100 MyTextCtrl
*m_readonly
;
102 MyTextCtrl
*m_multitext
;
103 MyTextCtrl
*m_horizontal
;
105 MyTextCtrl
*m_textrich
;
110 DECLARE_EVENT_TABLE()
113 class MyFrame
: public wxFrame
116 MyFrame(wxFrame
*frame
, const char *title
, int x
, int y
, int w
, int h
);
118 void OnQuit(wxCommandEvent
& event
);
119 void OnAbout(wxCommandEvent
& event
);
121 void OnSetTooltipDelay(wxCommandEvent
& event
);
122 void OnToggleTooltips(wxCommandEvent
& event
);
123 #endif // wxUSE_TOOLTIPS
126 void OnPasteFromClipboard( wxCommandEvent
&event
)
127 { m_panel
->DoPasteFromClipboard(); }
128 void OnCopyToClipboard( wxCommandEvent
&event
)
129 { m_panel
->DoCopyToClipboard(); }
130 #endif // wxUSE_CLIPBOARD
132 void OnMoveToEndOfText( wxCommandEvent
&event
)
133 { m_panel
->DoMoveToEndOfText(); }
134 void OnMoveToEndOfEntry( wxCommandEvent
&event
)
135 { m_panel
->DoMoveToEndOfEntry(); }
137 void OnLogClear(wxCommandEvent
& event
);
138 void OnFileSave(wxCommandEvent
& event
);
139 void OnFileLoad(wxCommandEvent
& event
);
141 void OnIdle( wxIdleEvent
& event
);
146 DECLARE_EVENT_TABLE()
149 //----------------------------------------------------------------------
151 //----------------------------------------------------------------------
155 //----------------------------------------------------------------------
157 //----------------------------------------------------------------------
168 TEXT_CLIPBOARD_COPY
= 200,
169 TEXT_CLIPBOARD_PASTE
,
172 TEXT_TOOLTIPS_SETDELAY
= 300,
173 TEXT_TOOLTIPS_ENABLE
,
176 TEXT_MOVE_ENDTEXT
= 400,
182 // Create the main frame window
183 MyFrame
*frame
= new MyFrame((wxFrame
*) NULL
,
184 "Text wxWindows sample", 50, 50, 660, 420);
185 frame
->SetSizeHints( 500, 400 );
187 wxMenu
*file_menu
= new wxMenu
;
188 file_menu
->Append(TEXT_CLEAR
, "&Clear the log\tCtrl-C",
189 "Clear the log window contents");
190 file_menu
->Append(TEXT_SAVE
, "&Save file\tCtrl-S",
191 "Save the text control contents to file");
192 file_menu
->Append(TEXT_LOAD
, "&Load file\tCtrl-O",
193 "Load the sample file into text control");
194 file_menu
->AppendSeparator();
195 file_menu
->Append(TEXT_ABOUT
, "&About\tAlt-A");
196 file_menu
->AppendSeparator();
197 file_menu
->Append(TEXT_QUIT
, "E&xit\tAlt-X", "Quit controls sample");
199 wxMenuBar
*menu_bar
= new wxMenuBar( wxMB_DOCKABLE
);
200 menu_bar
->Append(file_menu
, "&File");
203 wxMenu
*tooltip_menu
= new wxMenu
;
204 tooltip_menu
->Append(TEXT_TOOLTIPS_SETDELAY
, "Set &delay\tCtrl-D");
205 tooltip_menu
->AppendSeparator();
206 tooltip_menu
->Append(TEXT_TOOLTIPS_ENABLE
, "&Toggle tooltips\tCtrl-T",
207 "enable/disable tooltips", TRUE
);
208 tooltip_menu
->Check(TEXT_TOOLTIPS_ENABLE
, TRUE
);
209 menu_bar
->Append(tooltip_menu
, "&Tooltips");
210 #endif // wxUSE_TOOLTIPS
213 wxMenu
*menuClipboard
= new wxMenu
;
214 menuClipboard
->Append(TEXT_CLIPBOARD_COPY
, "&Copy\tCtrl-C",
215 "Copy the first line to the clipboard");
216 menuClipboard
->Append(TEXT_CLIPBOARD_PASTE
, "&Paste\tCtrl-V",
217 "Paste from clipboard to the text control");
218 menu_bar
->Append(menuClipboard
, "&Clipboard");
219 #endif // wxUSE_CLIPBOARD
221 wxMenu
*menuMove
= new wxMenu
;
222 menuMove
->Append(TEXT_MOVE_ENDTEXT
, "To the end of &text");
223 menuMove
->Append(TEXT_MOVE_ENDENTRY
, "To the end of &entry");
224 menu_bar
->Append(menuMove
, "&Move");
226 frame
->SetMenuBar(menu_bar
);
236 //----------------------------------------------------------------------
238 //----------------------------------------------------------------------
240 BEGIN_EVENT_TABLE(MyTextCtrl
, wxTextCtrl
)
241 EVT_KEY_DOWN(MyTextCtrl::OnKeyDown
)
242 EVT_KEY_UP(MyTextCtrl::OnKeyUp
)
243 EVT_CHAR(MyTextCtrl::OnChar
)
244 EVT_TEXT(-1, MyTextCtrl::OnText
)
245 EVT_MOUSE_EVENTS(MyTextCtrl::OnMouseEvent
)
248 void MyTextCtrl::LogEvent(const wxChar
*name
, wxKeyEvent
& event
) const
251 long keycode
= event
.KeyCode();
255 case WXK_BACK
: key
= "BACK"; break;
256 case WXK_TAB
: key
= "TAB"; break;
257 case WXK_RETURN
: key
= "RETURN"; break;
258 case WXK_ESCAPE
: key
= "ESCAPE"; break;
259 case WXK_SPACE
: key
= "SPACE"; break;
260 case WXK_DELETE
: key
= "DELETE"; break;
261 case WXK_START
: key
= "START"; break;
262 case WXK_LBUTTON
: key
= "LBUTTON"; break;
263 case WXK_RBUTTON
: key
= "RBUTTON"; break;
264 case WXK_CANCEL
: key
= "CANCEL"; break;
265 case WXK_MBUTTON
: key
= "MBUTTON"; break;
266 case WXK_CLEAR
: key
= "CLEAR"; break;
267 case WXK_SHIFT
: key
= "SHIFT"; break;
268 case WXK_ALT
: key
= "ALT"; break;
269 case WXK_CONTROL
: key
= "CONTROL"; break;
270 case WXK_MENU
: key
= "MENU"; break;
271 case WXK_PAUSE
: key
= "PAUSE"; break;
272 case WXK_CAPITAL
: key
= "CAPITAL"; break;
273 case WXK_PRIOR
: key
= "PRIOR"; break;
274 case WXK_NEXT
: key
= "NEXT"; break;
275 case WXK_END
: key
= "END"; break;
276 case WXK_HOME
: key
= "HOME"; break;
277 case WXK_LEFT
: key
= "LEFT"; break;
278 case WXK_UP
: key
= "UP"; break;
279 case WXK_RIGHT
: key
= "RIGHT"; break;
280 case WXK_DOWN
: key
= "DOWN"; break;
281 case WXK_SELECT
: key
= "SELECT"; break;
282 case WXK_PRINT
: key
= "PRINT"; break;
283 case WXK_EXECUTE
: key
= "EXECUTE"; break;
284 case WXK_SNAPSHOT
: key
= "SNAPSHOT"; break;
285 case WXK_INSERT
: key
= "INSERT"; break;
286 case WXK_HELP
: key
= "HELP"; break;
287 case WXK_NUMPAD0
: key
= "NUMPAD0"; break;
288 case WXK_NUMPAD1
: key
= "NUMPAD1"; break;
289 case WXK_NUMPAD2
: key
= "NUMPAD2"; break;
290 case WXK_NUMPAD3
: key
= "NUMPAD3"; break;
291 case WXK_NUMPAD4
: key
= "NUMPAD4"; break;
292 case WXK_NUMPAD5
: key
= "NUMPAD5"; break;
293 case WXK_NUMPAD6
: key
= "NUMPAD6"; break;
294 case WXK_NUMPAD7
: key
= "NUMPAD7"; break;
295 case WXK_NUMPAD8
: key
= "NUMPAD8"; break;
296 case WXK_NUMPAD9
: key
= "NUMPAD9"; break;
297 case WXK_MULTIPLY
: key
= "MULTIPLY"; break;
298 case WXK_ADD
: key
= "ADD"; break;
299 case WXK_SEPARATOR
: key
= "SEPARATOR"; break;
300 case WXK_SUBTRACT
: key
= "SUBTRACT"; break;
301 case WXK_DECIMAL
: key
= "DECIMAL"; break;
302 case WXK_DIVIDE
: key
= "DIVIDE"; break;
303 case WXK_F1
: key
= "F1"; break;
304 case WXK_F2
: key
= "F2"; break;
305 case WXK_F3
: key
= "F3"; break;
306 case WXK_F4
: key
= "F4"; break;
307 case WXK_F5
: key
= "F5"; break;
308 case WXK_F6
: key
= "F6"; break;
309 case WXK_F7
: key
= "F7"; break;
310 case WXK_F8
: key
= "F8"; break;
311 case WXK_F9
: key
= "F9"; break;
312 case WXK_F10
: key
= "F10"; break;
313 case WXK_F11
: key
= "F11"; break;
314 case WXK_F12
: key
= "F12"; break;
315 case WXK_F13
: key
= "F13"; break;
316 case WXK_F14
: key
= "F14"; break;
317 case WXK_F15
: key
= "F15"; break;
318 case WXK_F16
: key
= "F16"; break;
319 case WXK_F17
: key
= "F17"; break;
320 case WXK_F18
: key
= "F18"; break;
321 case WXK_F19
: key
= "F19"; break;
322 case WXK_F20
: key
= "F20"; break;
323 case WXK_F21
: key
= "F21"; break;
324 case WXK_F22
: key
= "F22"; break;
325 case WXK_F23
: key
= "F23"; break;
326 case WXK_F24
: key
= "F24"; break;
327 case WXK_NUMLOCK
: key
= "NUMLOCK"; break;
328 case WXK_SCROLL
: key
= "SCROLL"; break;
329 case WXK_PAGEUP
: key
= "PAGEUP"; break;
330 case WXK_PAGEDOWN
: key
= "PAGEDOWN"; break;
331 case WXK_NUMPAD_SPACE
: key
= "NUMPAD_SPACE"; break;
332 case WXK_NUMPAD_TAB
: key
= "NUMPAD_TAB"; break;
333 case WXK_NUMPAD_ENTER
: key
= "NUMPAD_ENTER"; break;
334 case WXK_NUMPAD_F1
: key
= "NUMPAD_F1"; break;
335 case WXK_NUMPAD_F2
: key
= "NUMPAD_F2"; break;
336 case WXK_NUMPAD_F3
: key
= "NUMPAD_F3"; break;
337 case WXK_NUMPAD_F4
: key
= "NUMPAD_F4"; break;
338 case WXK_NUMPAD_HOME
: key
= "NUMPAD_HOME"; break;
339 case WXK_NUMPAD_LEFT
: key
= "NUMPAD_LEFT"; break;
340 case WXK_NUMPAD_UP
: key
= "NUMPAD_UP"; break;
341 case WXK_NUMPAD_RIGHT
: key
= "NUMPAD_RIGHT"; break;
342 case WXK_NUMPAD_DOWN
: key
= "NUMPAD_DOWN"; break;
343 case WXK_NUMPAD_PRIOR
: key
= "NUMPAD_PRIOR"; break;
344 case WXK_NUMPAD_PAGEUP
: key
= "NUMPAD_PAGEUP"; break;
345 case WXK_NUMPAD_PAGEDOWN
: key
= "NUMPAD_PAGEDOWN"; break;
346 case WXK_NUMPAD_END
: key
= "NUMPAD_END"; break;
347 case WXK_NUMPAD_BEGIN
: key
= "NUMPAD_BEGIN"; break;
348 case WXK_NUMPAD_INSERT
: key
= "NUMPAD_INSERT"; break;
349 case WXK_NUMPAD_DELETE
: key
= "NUMPAD_DELETE"; break;
350 case WXK_NUMPAD_EQUAL
: key
= "NUMPAD_EQUAL"; break;
351 case WXK_NUMPAD_MULTIPLY
: key
= "NUMPAD_MULTIPLY"; break;
352 case WXK_NUMPAD_ADD
: key
= "NUMPAD_ADD"; break;
353 case WXK_NUMPAD_SEPARATOR
: key
= "NUMPAD_SEPARATOR"; break;
354 case WXK_NUMPAD_SUBTRACT
: key
= "NUMPAD_SUBTRACT"; break;
355 case WXK_NUMPAD_DECIMAL
: key
= "NUMPAD_DECIMAL"; break;
359 if ( wxIsprint((int)keycode
) )
360 key
.Printf( _T("'%c'") , (char)keycode
);
362 key
.Printf( _T("unknown (%ld)"), keycode
);
367 wxLogMessage( _T("%s event: %s (flags = %c%c%c%c)"),
370 GetChar( event
.ControlDown(), _T('C') ),
371 GetChar( event
.AltDown(), _T('A') ),
372 GetChar( event
.ShiftDown(), _T('S') ),
373 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
.LeftDown(), _T('1') )
428 << GetChar( ev
.MiddleDown(), _T('2') )
429 << GetChar( ev
.RightDown(), _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
440 void MyTextCtrl::OnText(wxCommandEvent
& event
)
442 MyTextCtrl
*win
= (MyTextCtrl
*)event
.GetEventObject();
443 const wxChar
*data
= (const wxChar
*)(win
->GetClientData());
446 wxLogMessage(_T("text changed in control '%s'"), data
);
450 void MyTextCtrl::OnChar(wxKeyEvent
& event
)
452 LogEvent( _T("Char"), event
);
454 /* How are we supposed to test wxTE_PROCESS_TAB with this code?
456 if ( event.KeyCode() == WXK_TAB )
468 void MyTextCtrl::OnKeyUp(wxKeyEvent
& event
)
470 LogEvent( _T("Key up"), event
);
475 void MyTextCtrl::OnKeyDown(wxKeyEvent
& event
)
477 switch ( event
.KeyCode() )
480 // show current position and text length
482 long line
, column
, pos
= GetInsertionPoint();
483 PositionToXY(pos
, &column
, &line
);
485 wxLogMessage( _T("Current position: %ld\n"
486 "Current line, column: (%ld, %ld)\n"
487 "Number of lines: %ld\n"
488 "Current line length: %ld\n"
489 "Total text length: %ld"),
500 SetInsertionPointEnd();
505 SetInsertionPoint(10);
511 wxLogDebug( wxT("Now capturing mouse and events.") );
517 wxLogDebug( wxT("Stopped capturing mouse and events.") );
524 // insert a blank line
529 LogEvent( wxT("Key down"), event
);
535 //----------------------------------------------------------------------
537 //----------------------------------------------------------------------
539 BEGIN_EVENT_TABLE(MyPanel
, wxPanel
)
540 EVT_SIZE(MyPanel::OnSize
)
543 MyPanel::MyPanel( wxFrame
*frame
, int x
, int y
, int w
, int h
)
544 : wxPanel( frame
, -1, wxPoint(x
, y
), wxSize(w
, h
) )
546 m_log
= new wxTextCtrl( this, -1, "This is the log window.\n", wxPoint(5,260), wxSize(630,100), wxTE_MULTILINE
);
548 wxLog
*old_log
= wxLog::SetActiveTarget( new wxLogTextCtrl( m_log
) );
552 // single line text controls
554 m_text
= new MyTextCtrl( this, -1, "Single line.",
555 wxPoint(10,10), wxSize(140,-1), 0);
556 (*m_text
) << " Appended.";
557 m_text
->SetInsertionPoint(0);
558 m_text
->WriteText( "Prepended. " );
560 m_password
= new MyTextCtrl( this, -1, "",
561 wxPoint(10,50), wxSize(140,-1), wxTE_PASSWORD
);
563 m_readonly
= new MyTextCtrl( this, -1, "Read only",
564 wxPoint(10,90), wxSize(140,-1), wxTE_READONLY
);
566 // multi line text controls
568 m_horizontal
= new MyTextCtrl( this, -1, "Multiline text control with a horizontal scrollbar.",
569 wxPoint(10,170), wxSize(140,70), wxTE_MULTILINE
| wxHSCROLL
);
570 m_horizontal
->SetFont(wxFont(18, wxSWISS
, wxNORMAL
, wxNORMAL
,
571 FALSE
, "", wxFONTENCODING_KOI8
));
573 m_multitext
= new MyTextCtrl( this, -1, "Multi line.",
574 wxPoint(180,10), wxSize(240,70), wxTE_MULTILINE
);
575 (*m_multitext
) << " Appended.";
576 m_multitext
->SetInsertionPoint(0);
577 m_multitext
->WriteText( "Prepended. " );
580 m_multitext
->SetToolTip("Press F1 here for statitics, F4 for capture and uncapture mouse.");
583 m_tab
= new MyTextCtrl( this, 100, "Multiline, allow <TAB> processing.",
584 wxPoint(180,90), wxSize(240,70), wxTE_MULTILINE
| wxTE_PROCESS_TAB
);
585 m_tab
->SetClientData(_T("tab"));
587 m_enter
= new MyTextCtrl( this, 100, "Multiline, allow <ENTER> processing.",
588 wxPoint(180,170), wxSize(240,70), wxTE_MULTILINE
);
589 m_enter
->SetClientData(_T("enter"));
591 m_textrich
= new MyTextCtrl(this, -1, "Allows more than 30Kb of text\n"
592 "(even under broken Win9x)",
593 wxPoint(450, 10), wxSize(200, 230),
594 wxTE_RICH
| wxTE_MULTILINE
);
597 void MyPanel::OnSize( wxSizeEvent
&event
)
599 wxSize
client_area( GetClientSize() );
600 m_log
->SetSize( 0, 260, client_area
.x
, client_area
.y
- 260 );
605 void MyPanel::DoPasteFromClipboard()
607 // On X11, we want to get the data from the primary selection instead
608 // of the normal clipboard (which isn't normal under X11 at all). This
609 // call has no effect under MSW.
610 wxTheClipboard
->UsePrimarySelection();
612 if (!wxTheClipboard
->Open())
614 *m_log
<< "Error opening the clipboard.\n";
619 *m_log
<< "Successfully opened the clipboard.\n";
622 wxTextDataObject data
;
624 if (wxTheClipboard
->IsSupported( data
.GetFormat() ))
626 *m_log
<< "Clipboard supports requested format.\n";
628 if (wxTheClipboard
->GetData( data
))
630 *m_log
<< "Successfully retrieved data from the clipboard.\n";
631 *m_multitext
<< data
.GetText() << "\n";
635 *m_log
<< "Error getting data from the clipboard.\n";
640 *m_log
<< "Clipboard doesn't support requested format.\n";
643 wxTheClipboard
->Close();
645 *m_log
<< "Closed the clipboard.\n";
648 void MyPanel::DoCopyToClipboard()
650 // On X11, we want to get the data from the primary selection instead
651 // of the normal clipboard (which isn't normal under X11 at all). This
652 // call has no effect under MSW.
653 wxTheClipboard
->UsePrimarySelection();
655 wxString
text( m_multitext
->GetLineText(0) );
659 *m_log
<< "No text to copy.\n";
664 if (!wxTheClipboard
->Open())
666 *m_log
<< "Error opening the clipboard.\n";
672 *m_log
<< "Successfully opened the clipboard.\n";
675 wxTextDataObject
*data
= new wxTextDataObject( text
);
677 if (!wxTheClipboard
->SetData( data
))
679 *m_log
<< "Error while copying to the clipboard.\n";
683 *m_log
<< "Successfully copied data to the clipboard.\n";
686 wxTheClipboard
->Close();
688 *m_log
<< "Closed the clipboard.\n";
691 #endif // wxUSE_CLIPBOARD
693 void MyPanel::DoMoveToEndOfText()
695 m_multitext
->SetInsertionPointEnd();
696 m_multitext
->SetFocus();
699 void MyPanel::DoMoveToEndOfEntry()
701 m_text
->SetInsertionPointEnd();
705 //----------------------------------------------------------------------
707 //----------------------------------------------------------------------
709 BEGIN_EVENT_TABLE(MyFrame
, wxFrame
)
710 EVT_MENU(TEXT_QUIT
, MyFrame::OnQuit
)
711 EVT_MENU(TEXT_ABOUT
, MyFrame::OnAbout
)
712 EVT_MENU(TEXT_SAVE
, MyFrame::OnFileSave
)
713 EVT_MENU(TEXT_LOAD
, MyFrame::OnFileLoad
)
714 EVT_MENU(TEXT_CLEAR
, MyFrame::OnLogClear
)
717 EVT_MENU(TEXT_TOOLTIPS_SETDELAY
, MyFrame::OnSetTooltipDelay
)
718 EVT_MENU(TEXT_TOOLTIPS_ENABLE
, MyFrame::OnToggleTooltips
)
719 #endif // wxUSE_TOOLTIPS
722 EVT_MENU(TEXT_CLIPBOARD_PASTE
, MyFrame::OnPasteFromClipboard
)
723 EVT_MENU(TEXT_CLIPBOARD_COPY
, MyFrame::OnCopyToClipboard
)
724 #endif // wxUSE_CLIPBOARD
726 EVT_MENU(TEXT_MOVE_ENDTEXT
, MyFrame::OnMoveToEndOfText
)
727 EVT_MENU(TEXT_MOVE_ENDENTRY
, MyFrame::OnMoveToEndOfEntry
)
729 EVT_IDLE(MyFrame::OnIdle
)
732 MyFrame::MyFrame(wxFrame
*frame
, const char *title
, int x
, int y
, int w
, int h
)
733 : wxFrame(frame
, -1, title
, wxPoint(x
, y
), wxSize(w
, h
) )
737 m_panel
= new MyPanel( this, 10, 10, 300, 100 );
740 void MyFrame::OnQuit (wxCommandEvent
& WXUNUSED(event
) )
745 void MyFrame::OnAbout( wxCommandEvent
& WXUNUSED(event
) )
749 wxMessageDialog
dialog(this,
750 "This is a text control sample. It demonstrates the many different\n"
751 "text control styles, the use of the clipboard, setting and handling\n"
752 "tooltips and intercepting key and char events.\n"
754 "Copyright (c) 1999, Robert Roebling, Julian Smart, Vadim Zeitlin",
755 "About Text Controls",
756 wxOK
| wxICON_INFORMATION
);
764 void MyFrame::OnSetTooltipDelay(wxCommandEvent
& event
)
766 static long s_delay
= 5000;
769 delay
.Printf( _T("%ld"), s_delay
);
771 delay
= wxGetTextFromUser("Enter delay (in milliseconds)",
778 wxSscanf(delay
, _T("%ld"), &s_delay
);
780 wxToolTip::SetDelay(s_delay
);
782 wxLogStatus(this, _T("Tooltip delay set to %ld milliseconds"), s_delay
);
785 void MyFrame::OnToggleTooltips(wxCommandEvent
& event
)
787 static bool s_enabled
= TRUE
;
789 s_enabled
= !s_enabled
;
791 wxToolTip::Enable(s_enabled
);
793 wxLogStatus(this, _T("Tooltips %sabled"), s_enabled
? _T("en") : _T("dis") );
797 void MyFrame::OnLogClear(wxCommandEvent
& WXUNUSED(event
))
799 m_panel
->m_log
->Clear();
802 void MyFrame::OnFileSave(wxCommandEvent
& event
)
804 if ( m_panel
->m_textrich
->SaveFile("dummy.txt") )
807 // verify that the fil length is correct (it wasn't under Win95)
808 wxFile
file("dummy.txt");
809 wxLogStatus(this, _T("Successfully saved file "
810 "(text len = %ld, file size = %ld)"),
811 m_panel
->m_textrich
->GetValue().length(),
816 wxLogStatus(this, _T("Couldn't save the file"));
819 void MyFrame::OnFileLoad(wxCommandEvent
& event
)
821 if ( m_panel
->m_textrich
->LoadFile("dummy.txt") )
822 wxLogStatus(this, _T("Successfully loaded file"));
824 wxLogStatus(this, _T("Couldn't load the file"));
827 void MyFrame::OnIdle( wxIdleEvent
& event
)
829 // track the window which has the focus in the status bar
830 static wxWindow
*s_windowFocus
= (wxWindow
*)NULL
;
831 wxWindow
*focus
= wxWindow::FindFocus();
832 if ( focus
&& (focus
!= s_windowFocus
) )
834 s_windowFocus
= focus
;
839 _T("Focus: wxWindow = %p, HWND = %08x"),
841 _T("Focus: wxWindow = %p"),
845 , s_windowFocus
->GetHWND()