@@ -70,7 +70,7 @@ public:
void OnText ( wxCommandEvent & event ) ;
void OnMouseEvent ( wxMouseEvent & event ) ;
bool m_hasCapture ;
bool m_hasCapture ;
private :
static inline wxChar GetChar ( bool on , wxChar c ) { return on ? c : _T ( ' - ' ) ; }
@@ -139,6 +139,9 @@ public:
void OnFileSave ( wxCommandEvent & event ) ;
void OnFileLoad ( wxCommandEvent & event ) ;
void OnSetEditable ( wxCommandEvent & event ) ;
void OnSetEnabled ( wxCommandEvent & event ) ;
void OnIdle ( wxIdleEvent & event ) ;
private :
@@ -173,9 +176,11 @@ enum
TEXT_TOOLTIPS_SETDELAY = 300 ,
TEXT_TOOLTIPS_ENABLE ,
// move menu
// text menu
TEXT_MOVE_ENDTEXT = 400 ,
TEXT_MOVE_ENDENTRY
TEXT_MOVE_ENDENTRY ,
TEXT_SET_EDITABLE ,
TEXT_SET_ENABLED
} ;
bool MyApp : : OnInit ( )
@@ -219,10 +224,14 @@ bool MyApp::OnInit()
menu_bar - > Append ( menuClipboard , " &Clipboard " ) ;
# endif // wxUSE_CLIPBOARD
wxMenu * menuMove = new wxMenu ;
menuMove - > Append ( TEXT_MOVE_ENDTEXT , " T o the end of &text" ) ;
menuMove - > Append ( TEXT_MOVE_ENDENTRY , " T o the end of &entry" ) ;
menu_bar - > Append ( menuMove , " &Move " ) ;
wxMenu * menuText = new wxMenu ;
menuText - > Append ( TEXT_MOVE_ENDTEXT , " Move cursor t o the end of &text" ) ;
menuText - > Append ( TEXT_MOVE_ENDENTRY , " Move cursor t o the end of &entry" ) ;
menuText - > Append ( TEXT_SET_EDITABLE , " Toggle &editable state " , " " , TRUE ) ;
menuText - > Append ( TEXT_SET_ENABLED , " Toggle e&nabled state " , " " , TRUE ) ;
menuText - > Check ( TEXT_SET_EDITABLE , TRUE ) ;
menuText - > Check ( TEXT_SET_ENABLED , TRUE ) ;
menu_bar - > Append ( menuText , " &Text " ) ;
frame - > SetMenuBar ( menu_bar ) ;
@@ -447,6 +456,10 @@ void MyTextCtrl::OnText(wxCommandEvent& event)
{
wxLogMessage ( _T ( " Text changed in control '%s' " ) , data ) ;
}
else
{
wxLogMessage ( _T ( " Text changed in some control " ) ) ;
}
}
void MyTextCtrl : : OnChar ( wxKeyEvent & event )
@@ -488,11 +501,12 @@ void MyTextCtrl::OnKeyDown(wxKeyEvent& event)
" Current line, column: (%ld, %ld) \n "
" Number of lines: %ld \n "
" Current line length: %ld \n "
" Total text length: %ld " ) ,
" Total text length: %u ( %ld) " ) ,
pos ,
line , column ,
GetNumberOfLines ( ) ,
GetLineLength ( line ) ,
GetValue ( ) . length ( ) ,
GetLastPosition ( ) ) ;
}
break ;
@@ -527,10 +541,17 @@ void MyTextCtrl::OnKeyDown(wxKeyEvent& event)
WriteText ( " \n " ) ;
break ;
default :
LogEvent ( wxT ( " Key down " ) , event ) ;
case WXK_F6 :
SetValue ( " F6 was just pressed. " ) ;
break ;
case WXK_F7 :
ShowPosition ( 10 ) ;
break ;
}
LogEvent ( wxT ( " Key down " ) , event ) ;
event . Skip ( ) ;
}
@@ -554,7 +575,8 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h )
// single line text controls
m_text = new MyTextCtrl ( this , - 1 , " Single line. " ,
wxPoint ( 10 , 10 ) , wxSize ( 140 , - 1 ) , 0 ) ;
wxPoint ( 10 , 10 ) , wxSize ( 140 , - 1 ) ,
wxTE_PROCESS_ENTER ) ;
m_text - > SetForegroundColour ( * wxBLUE ) ;
m_text - > SetBackgroundColour ( * wxLIGHT_GREY ) ;
( * m_text ) < < " Appended. " ;
@@ -571,16 +593,39 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h )
m_horizontal = new MyTextCtrl ( this , - 1 , " Multiline text control with a horizontal scrollbar. " ,
wxPoint ( 10 , 170 ) , wxSize ( 140 , 70 ) , wxTE_MULTILINE | wxHSCROLL ) ;
m_horizontal - > SetFont ( wxFont ( 18 , wxSWISS , wxNORMAL , wxNORMAL ,
FALSE , " " , wxFONTENCODING_ISO8859_2 ) ) ; //wxFONTENCODING_KOI8));
//m_horizontal->SetValue("<22> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ");
m_horizontal - > SetValue ( " <EFBFBD> lu<EFBFBD> ou<EFBFBD> k<EFBFBD> k<> <6B> zb<7A> sile <20> e<EFBFBD> tina <20> <> " ) ;
// a little hack to use the command line argument for encoding testing
if ( wxTheApp - > argc = = 2 )
{
switch ( wxTheApp - > argv [ 1 ] [ 0 ] )
{
case ' 2 ' :
m_horizontal - > SetFont ( wxFont ( 18 , wxSWISS , wxNORMAL , wxNORMAL ,
FALSE , " " ,
wxFONTENCODING_ISO8859_2 ) ) ;
m_horizontal - > SetValue ( " <EFBFBD> lu<EFBFBD> ou<EFBFBD> k<EFBFBD> k<> <6B> zb<7A> sile <20> e<EFBFBD> tina <20> <> " ) ;
break ;
default :
m_horizontal - > SetFont ( wxFont ( 18 , wxSWISS , wxNORMAL , wxNORMAL ,
FALSE , " " ,
wxFONTENCODING_KOI8 ) ) ;
m_horizontal - > SetValue ( " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " ) ;
}
}
else
{
m_horizontal - > SetValue ( " Text in default encoding " ) ;
}
m_multitext = new MyTextCtrl ( this , - 1 , " Multi line. " ,
wxPoint ( 180 , 10 ) , wxSize ( 240 , 70 ) , wxTE_MULTILINE ) ;
m_multitext - > SetFont ( * wxITALIC_FONT ) ;
( * m_multitext ) < < " Appended. " ;
m_multitext - > SetInsertionPoint ( 0 ) ;
m_multitext - > WriteText ( " Prepended. " ) ;
m_multitext - > SetForegroundColour ( * wxRED ) ;
m_multitext - > SetBackgroundColour ( * wxLIGHT_GREY ) ;
# if wxUSE_TOOLTIPS
m_multitext - > SetToolTip ( " Press F1 here for statitics, F4 for capture and uncapture mouse. " ) ;
@@ -595,9 +640,14 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h )
m_enter - > SetClientData ( ( void * ) _T ( " enter " ) ) ;
m_textrich = new MyTextCtrl ( this , - 1 , " Allows more than 30Kb of text \n "
" (even under broken Win9x) ",
" (even under broken Win9x) \n "
" and a very very very very very "
" very very very long line to test "
" wxHSCROLL style " ,
wxPoint ( 450 , 10 ) , wxSize ( 200 , 230 ) ,
wxTE_RICH | wxTE_MULTILINE ) ;
wxTE_RICH | wxTE_MULTILINE | wxHSCROLL ) ;
m_textrich - > SetForegroundColour ( wxColour ( 0 , 255 , 255 ) ) ;
m_textrich - > SetBackgroundColour ( * wxBLUE ) ;
}
void MyPanel : : OnSize ( wxSizeEvent & event )
@@ -732,6 +782,9 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_MENU ( TEXT_MOVE_ENDTEXT , MyFrame : : OnMoveToEndOfText )
EVT_MENU ( TEXT_MOVE_ENDENTRY , MyFrame : : OnMoveToEndOfEntry )
EVT_MENU ( TEXT_SET_EDITABLE , MyFrame : : OnSetEditable )
EVT_MENU ( TEXT_SET_ENABLED , MyFrame : : OnSetEnabled )
EVT_IDLE ( MyFrame : : OnIdle )
END_EVENT_TABLE ( )
@@ -805,6 +858,29 @@ void MyFrame::OnLogClear(wxCommandEvent& WXUNUSED(event))
m_panel - > m_log - > Clear ( ) ;
}
void MyFrame : : OnSetEditable ( wxCommandEvent & WXUNUSED ( event ) )
{
static bool s_editable = TRUE ;
s_editable = ! s_editable ;
m_panel - > m_text - > SetEditable ( s_editable ) ;
m_panel - > m_password - > SetEditable ( s_editable ) ;
m_panel - > m_multitext - > SetEditable ( s_editable ) ;
m_panel - > m_textrich - > SetEditable ( s_editable ) ;
}
void MyFrame : : OnSetEnabled ( wxCommandEvent & WXUNUSED ( event ) )
{
bool enabled = m_panel - > m_text - > IsEnabled ( ) ;
enabled = ! enabled ;
m_panel - > m_text - > Enable ( enabled ) ;
m_panel - > m_password - > Enable ( enabled ) ;
m_panel - > m_multitext - > Enable ( enabled ) ;
m_panel - > m_readonly - > Enable ( enabled ) ;
m_panel - > m_textrich - > Enable ( enabled ) ;
}
void MyFrame : : OnFileSave ( wxCommandEvent & event )
{
if ( m_panel - > m_textrich - > SaveFile ( " dummy.txt " ) )