X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/286ff306d8ba79b72ebc34d9f1c6ae18ad8d45ea..01495abf8755b0be46b4c65d6c7c48e9460f102b:/samples/widgets/textctrl.cpp diff --git a/samples/widgets/textctrl.cpp b/samples/widgets/textctrl.cpp index 8377e4c079..ee87e1a6af 100644 --- a/samples/widgets/textctrl.cpp +++ b/samples/widgets/textctrl.cpp @@ -6,7 +6,7 @@ // Created: 27.03.01 // Id: $Id$ // Copyright: (c) 2001 Vadim Zeitlin -// License: wxWindows license +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// // ============================================================================ @@ -40,6 +40,7 @@ #endif #include "wx/sizer.h" +#include "wx/ioswrap.h" #include "widgets.h" @@ -52,7 +53,7 @@ // control ids enum { - TextPage_Reset = 100, + TextPage_Reset = wxID_HIGHEST, TextPage_Set, TextPage_Add, @@ -105,6 +106,8 @@ static const struct ControlValues bool password; bool readonly; + bool processEnter; + bool filename; WrapStyle wrapStyle; @@ -116,6 +119,8 @@ static const struct ControlValues TextLines_Multi, // multiline false, // not password false, // not readonly + true, // do process enter + false, // not filename WrapStyle_Word, // wrap on word boundaries #ifdef __WXMSW__ TextKind_Plain // plain EDIT control @@ -131,10 +136,15 @@ class TextWidgetsPage : public WidgetsPage { public: // ctor(s) and dtor - TextWidgetsPage(wxBookCtrl *book, wxImageList *imaglist); + TextWidgetsPage(WidgetsBookCtrl *book, wxImageList *imaglist); virtual ~TextWidgetsPage(){}; virtual wxControl *GetWidget() const { return m_text; } + virtual wxTextEntryBase *GetTextEntry() const { return m_text; } + virtual void RecreateWidget() { CreateText(); } + + // lazy creation of the content + virtual void CreateContent(); protected: // create an info text contorl @@ -196,7 +206,9 @@ protected: // the checkboxes controlling text ctrl styles wxCheckBox *m_chkPassword, - *m_chkReadonly; + *m_chkReadonly, + *m_chkProcessEnter, + *m_chkFilename; // under MSW we test rich edit controls as well here #ifdef __WXMSW__ @@ -254,32 +266,32 @@ protected: switch ( HitTest(event.GetPosition(), &x, &y) ) { default: - wxFAIL_MSG( _T("unexpected HitTest() result") ); + wxFAIL_MSG( wxT("unexpected HitTest() result") ); // fall through case wxTE_HT_UNKNOWN: x = y = -1; - where = _T("nowhere near"); + where = wxT("nowhere near"); break; case wxTE_HT_BEFORE: - where = _T("before"); + where = wxT("before"); break; case wxTE_HT_BELOW: - where = _T("below"); + where = wxT("below"); break; case wxTE_HT_BEYOND: - where = _T("beyond"); + where = wxT("beyond"); break; case wxTE_HT_ON_TEXT: - where = _T("at"); + where = wxT("at"); break; } - wxLogMessage(_T("Mouse is %s (%ld, %ld)"), where.c_str(), x, y); + wxLogMessage(wxT("Mouse is %s (%ld, %ld)"), where.c_str(), x, y); event.Skip(); } @@ -327,17 +339,25 @@ END_EVENT_TABLE() // implementation // ============================================================================ -IMPLEMENT_WIDGETS_PAGE(TextWidgetsPage, _T("Text")); +#if defined(__WXX11__) + #define FAMILY_CTRLS NATIVE_CTRLS +#elif defined(__WXUNIVERSAL__) + #define FAMILY_CTRLS UNIVERSAL_CTRLS +#else + #define FAMILY_CTRLS NATIVE_CTRLS +#endif + +IMPLEMENT_WIDGETS_PAGE(TextWidgetsPage, wxT("Text"), + FAMILY_CTRLS | EDITABLE_CTRLS + ); // ---------------------------------------------------------------------------- // TextWidgetsPage creation // ---------------------------------------------------------------------------- -TextWidgetsPage::TextWidgetsPage(wxBookCtrl *book, wxImageList *imaglist) - : WidgetsPage(book) +TextWidgetsPage::TextWidgetsPage(WidgetsBookCtrl *book, wxImageList *imaglist) + : WidgetsPage(book, imaglist, text_xpm) { - imaglist->Add(wxBitmap(text_xpm)); - // init everything #ifdef __WXMSW__ m_radioKind = @@ -346,7 +366,9 @@ TextWidgetsPage::TextWidgetsPage(wxBookCtrl *book, wxImageList *imaglist) m_radioTextLines = (wxRadioBox *)NULL; m_chkPassword = - m_chkReadonly = (wxCheckBox *)NULL; + m_chkReadonly = + m_chkProcessEnter = + m_chkFilename = (wxCheckBox *)NULL; m_text = m_textPosCur = @@ -364,16 +386,19 @@ TextWidgetsPage::TextWidgetsPage(wxBookCtrl *book, wxImageList *imaglist) m_posLast = m_selFrom = m_selTo = -2; // not -1 which means "no selection" +} +void TextWidgetsPage::CreateContent() +{ // left pane static const wxString modes[] = { - _T("single line"), - _T("multi line"), + wxT("single line"), + wxT("multi line"), }; - wxStaticBox *box = new wxStaticBox(this, wxID_ANY, _T("&Set textctrl parameters")); - m_radioTextLines = new wxRadioBox(this, wxID_ANY, _T("&Number of lines:"), + wxStaticBox *box = new wxStaticBox(this, wxID_ANY, wxT("&Set textctrl parameters")); + m_radioTextLines = new wxRadioBox(this, wxID_ANY, wxT("&Number of lines:"), wxDefaultPosition, wxDefaultSize, WXSIZEOF(modes), modes, 1, wxRA_SPECIFY_COLS); @@ -384,22 +409,29 @@ TextWidgetsPage::TextWidgetsPage(wxBookCtrl *book, wxImageList *imaglist) sizerLeft->AddSpacer(5); m_chkPassword = CreateCheckBoxAndAddToSizer( - sizerLeft, _T("&Password control"), TextPage_Password + sizerLeft, wxT("&Password control"), TextPage_Password ); m_chkReadonly = CreateCheckBoxAndAddToSizer( - sizerLeft, _T("&Read-only mode") + sizerLeft, wxT("&Read-only mode") + ); + m_chkProcessEnter = CreateCheckBoxAndAddToSizer( + sizerLeft, wxT("Process &Enter") ); + m_chkFilename = CreateCheckBoxAndAddToSizer( + sizerLeft, wxT("&Filename control") + ); + m_chkFilename->Disable(); // not implemented yet sizerLeft->AddSpacer(5); static const wxString wrap[] = { - _T("no wrap"), - _T("word wrap"), - _T("char wrap"), - _T("best wrap"), + wxT("no wrap"), + wxT("word wrap"), + wxT("char wrap"), + wxT("best wrap"), }; - m_radioWrap = new wxRadioBox(this, wxID_ANY, _T("&Wrap style:"), + m_radioWrap = new wxRadioBox(this, wxID_ANY, wxT("&Wrap style:"), wxDefaultPosition, wxDefaultSize, WXSIZEOF(wrap), wrap, 1, wxRA_SPECIFY_COLS); @@ -408,12 +440,12 @@ TextWidgetsPage::TextWidgetsPage(wxBookCtrl *book, wxImageList *imaglist) #ifdef __WXMSW__ static const wxString kinds[] = { - _T("plain edit"), - _T("rich edit"), - _T("rich edit 2.0"), + wxT("plain edit"), + wxT("rich edit"), + wxT("rich edit 2.0"), }; - m_radioKind = new wxRadioBox(this, wxID_ANY, _T("Control &kind"), + m_radioKind = new wxRadioBox(this, wxID_ANY, wxT("Control &kind"), wxDefaultPosition, wxDefaultSize, WXSIZEOF(kinds), kinds, 1, wxRA_SPECIFY_COLS); @@ -422,33 +454,33 @@ TextWidgetsPage::TextWidgetsPage(wxBookCtrl *book, wxImageList *imaglist) sizerLeft->Add(m_radioKind, 0, wxGROW | wxALL, 5); #endif // __WXMSW__ - wxButton *btn = new wxButton(this, TextPage_Reset, _T("&Reset")); + wxButton *btn = new wxButton(this, TextPage_Reset, wxT("&Reset")); sizerLeft->Add(2, 2, 0, wxGROW | wxALL, 1); // spacer sizerLeft->Add(btn, 0, wxALIGN_CENTRE_HORIZONTAL | wxALL, 15); // middle pane - wxStaticBox *box2 = new wxStaticBox(this, wxID_ANY, _T("&Change contents:")); + wxStaticBox *box2 = new wxStaticBox(this, wxID_ANY, wxT("&Change contents:")); wxSizer *sizerMiddleUp = new wxStaticBoxSizer(box2, wxVERTICAL); - btn = new wxButton(this, TextPage_Set, _T("&Set text value")); + btn = new wxButton(this, TextPage_Set, wxT("&Set text value")); sizerMiddleUp->Add(btn, 0, wxALL | wxGROW, 1); - btn = new wxButton(this, TextPage_Add, _T("&Append text")); + btn = new wxButton(this, TextPage_Add, wxT("&Append text")); sizerMiddleUp->Add(btn, 0, wxALL | wxGROW, 1); - btn = new wxButton(this, TextPage_Insert, _T("&Insert text")); + btn = new wxButton(this, TextPage_Insert, wxT("&Insert text")); sizerMiddleUp->Add(btn, 0, wxALL | wxGROW, 1); - btn = new wxButton(this, TextPage_Load, _T("&Load file")); + btn = new wxButton(this, TextPage_Load, wxT("&Load file")); sizerMiddleUp->Add(btn, 0, wxALL | wxGROW, 1); - btn = new wxButton(this, TextPage_Clear, _T("&Clear")); + btn = new wxButton(this, TextPage_Clear, wxT("&Clear")); sizerMiddleUp->Add(btn, 0, wxALL | wxGROW, 1); - btn = new wxButton(this, TextPage_StreamRedirector, _T("St&ream redirection")); + btn = new wxButton(this, TextPage_StreamRedirector, wxT("St&ream redirection")); sizerMiddleUp->Add(btn, 0, wxALL | wxGROW, 1); - wxStaticBox *box4 = new wxStaticBox(this, wxID_ANY, _T("&Info:")); + wxStaticBox *box4 = new wxStaticBox(this, wxID_ANY, wxT("&Info:")); wxSizer *sizerMiddleDown = new wxStaticBoxSizer(box4, wxVERTICAL); m_textPosCur = CreateInfoText(); @@ -458,19 +490,19 @@ TextWidgetsPage::TextWidgetsPage(wxBookCtrl *book, wxImageList *imaglist) wxSizer *sizerRow = new wxBoxSizer(wxHORIZONTAL); sizerRow->Add(CreateTextWithLabelSizer ( - _T("Current pos:"), + wxT("Current pos:"), m_textPosCur ), 0, wxRIGHT, 5); sizerRow->Add(CreateTextWithLabelSizer ( - _T("Col:"), + wxT("Col:"), m_textColCur ), 0, wxLEFT | wxRIGHT, 5); sizerRow->Add(CreateTextWithLabelSizer ( - _T("Row:"), + wxT("Row:"), m_textRowCur ), 0, wxLEFT, 5); @@ -482,9 +514,9 @@ TextWidgetsPage::TextWidgetsPage(wxBookCtrl *book, wxImageList *imaglist) ( CreateTextWithLabelSizer ( - _T("Number of lines:"), + wxT("Number of lines:"), m_textLineLast, - _T("Last position:"), + wxT("Last position:"), m_textPosLast ), 0, wxALL, 5 @@ -496,9 +528,9 @@ TextWidgetsPage::TextWidgetsPage(wxBookCtrl *book, wxImageList *imaglist) ( CreateTextWithLabelSizer ( - _T("Selection: from"), + wxT("Selection: from"), m_textSelFrom, - _T("to"), + wxT("to"), m_textSelTo ), 0, wxALL, 5 @@ -511,7 +543,7 @@ TextWidgetsPage::TextWidgetsPage(wxBookCtrl *book, wxImageList *imaglist) ( CreateTextWithLabelSizer ( - _T("Range 10..20:"), + wxT("Range 10..20:"), m_textRange ), 0, wxALL, 5 @@ -522,7 +554,7 @@ TextWidgetsPage::TextWidgetsPage(wxBookCtrl *book, wxImageList *imaglist) sizerMiddle->Add(sizerMiddleDown, 1, wxGROW | wxTOP, 5); // right pane - wxStaticBox *box3 = new wxStaticBox(this, wxID_ANY, _T("&Text:")); + wxStaticBox *box3 = new wxStaticBox(this, wxID_ANY, wxT("&Text:")); m_sizerText = new wxStaticBoxSizer(box3, wxHORIZONTAL); Reset(); CreateText(); @@ -535,8 +567,6 @@ TextWidgetsPage::TextWidgetsPage(wxBookCtrl *book, wxImageList *imaglist) sizerTop->Add(m_sizerText, 1, wxGROW | (wxALL & ~wxRIGHT), 10); SetSizer(sizerTop); - - sizerTop->Fit(this); } // ---------------------------------------------------------------------------- @@ -549,12 +579,12 @@ wxTextCtrl *TextWidgetsPage::CreateInfoText() if ( !s_maxWidth ) { // calc it once only - GetTextExtent(_T("9999999"), &s_maxWidth, NULL); + GetTextExtent(wxT("9999999"), &s_maxWidth, NULL); } wxTextCtrl *text = new wxTextCtrl(this, wxID_ANY, wxEmptyString, wxDefaultPosition, - wxSize(s_maxWidth, -1), + wxSize(s_maxWidth, wxDefaultCoord), wxTE_READONLY); return text; } @@ -588,6 +618,8 @@ void TextWidgetsPage::Reset() m_chkPassword->SetValue(DEFAULTS.password); m_chkReadonly->SetValue(DEFAULTS.readonly); + m_chkProcessEnter->SetValue(DEFAULTS.processEnter); + m_chkFilename->SetValue(DEFAULTS.filename); m_radioWrap->SetSelection(DEFAULTS.wrapStyle); @@ -598,11 +630,11 @@ void TextWidgetsPage::Reset() void TextWidgetsPage::CreateText() { - int flags = 0; + int flags = ms_defaultFlags; switch ( m_radioTextLines->GetSelection() ) { default: - wxFAIL_MSG( _T("unexpected lines radio box selection") ); + wxFAIL_MSG( wxT("unexpected lines radio box selection") ); case TextLines_Single: break; @@ -617,11 +649,13 @@ void TextWidgetsPage::CreateText() flags |= wxTE_PASSWORD; if ( m_chkReadonly->GetValue() ) flags |= wxTE_READONLY; + if ( m_chkProcessEnter->GetValue() ) + flags |= wxTE_PROCESS_ENTER; switch ( m_radioWrap->GetSelection() ) { default: - wxFAIL_MSG( _T("unexpected wrap style radio box selection") ); + wxFAIL_MSG( wxT("unexpected wrap style radio box selection") ); case WrapStyle_None: flags |= wxTE_DONTWRAP; // same as wxHSCROLL @@ -632,7 +666,7 @@ void TextWidgetsPage::CreateText() break; case WrapStyle_Char: - flags |= wxTE_LINEWRAP; + flags |= wxTE_CHARWRAP; break; case WrapStyle_Best: @@ -645,7 +679,7 @@ void TextWidgetsPage::CreateText() switch ( m_radioKind->GetSelection() ) { default: - wxFAIL_MSG( _T("unexpected kind radio box selection") ); + wxFAIL_MSG( wxT("unexpected kind radio box selection") ); case TextKind_Plain: break; @@ -670,11 +704,16 @@ void TextWidgetsPage::CreateText() } else { - valueOld = _T("Hello, Universe!"); + valueOld = wxT("Hello, Universe!"); } m_text = new WidgetsTextCtrl(this, TextPage_Textctrl, valueOld, flags); +#if 0 + if ( m_chkFilename->GetValue() ) + ; +#endif // TODO + // cast to int needed to silence gcc warning about different enums m_sizerText->Add(m_text, 1, wxALL | (flags & wxTE_MULTILINE ? (int)wxGROW @@ -725,7 +764,7 @@ void TextWidgetsPage::OnIdle(wxIdleEvent& WXUNUSED(event)) if ( m_textLineLast ) { m_textLineLast->SetValue( - wxString::Format(_T("%d"), m_text->GetNumberOfLines()) ); + wxString::Format(wxT("%d"), m_text->GetNumberOfLines()) ); } if ( m_textSelFrom && m_textSelTo ) @@ -770,8 +809,8 @@ void TextWidgetsPage::OnButtonReset(wxCommandEvent& WXUNUSED(event)) void TextWidgetsPage::OnButtonSet(wxCommandEvent& WXUNUSED(event)) { m_text->SetValue(m_text->GetWindowStyle() & wxTE_MULTILINE - ? _T("Here,\nthere and\neverywhere") - : _T("Yellow submarine")); + ? wxT("Here,\nthere and\neverywhere") + : wxT("Yellow submarine")); m_text->SetFocus(); } @@ -780,18 +819,18 @@ void TextWidgetsPage::OnButtonAdd(wxCommandEvent& WXUNUSED(event)) { if ( m_text->GetWindowStyle() & wxTE_MULTILINE ) { - m_text->AppendText(_T("We all live in a\n")); + m_text->AppendText(wxT("We all live in a\n")); } - m_text->AppendText(_T("Yellow submarine")); + m_text->AppendText(wxT("Yellow submarine")); } void TextWidgetsPage::OnButtonInsert(wxCommandEvent& WXUNUSED(event)) { - m_text->WriteText(_T("Is there anybody going to listen to my story")); + m_text->WriteText(wxT("Is there anybody going to listen to my story")); if ( m_text->GetWindowStyle() & wxTE_MULTILINE ) { - m_text->WriteText(_T("\nall about the girl who came to stay")); + m_text->WriteText(wxT("\nall about the girl who came to stay")); } } @@ -805,14 +844,14 @@ void TextWidgetsPage::OnButtonLoad(wxCommandEvent& WXUNUSED(event)) { // search for the file in several dirs where it's likely to be wxPathList pathlist; - pathlist.Add(_T(".")); - pathlist.Add(_T("..")); - pathlist.Add(_T("../../../samples/widgets")); + pathlist.Add(wxT(".")); + pathlist.Add(wxT("..")); + pathlist.Add(wxT("../../../samples/widgets")); - wxString filename = pathlist.FindValidPath(_T("textctrl.cpp")); + wxString filename = pathlist.FindValidPath(wxT("textctrl.cpp")); if ( !filename ) { - wxLogError(_T("File textctrl.cpp not found.")); + wxLogError(wxT("File textctrl.cpp not found.")); } else // load it { @@ -820,12 +859,12 @@ void TextWidgetsPage::OnButtonLoad(wxCommandEvent& WXUNUSED(event)) if ( !m_text->LoadFile(filename) ) { // this is not supposed to happen ... - wxLogError(_T("Error loading file.")); + wxLogError(wxT("Error loading file.")); } else { long elapsed = sw.Time(); - wxLogMessage(_T("Loaded file '%s' in %lu.%us"), + wxLogMessage(wxT("Loaded file '%s' in %lu.%us"), filename.c_str(), elapsed / 1000, (unsigned int) elapsed % 1000); } @@ -854,8 +893,10 @@ void TextWidgetsPage::OnUpdateUIResetButton(wxUpdateUIEvent& event) #ifdef __WXMSW__ (m_radioKind->GetSelection() != DEFAULTS.textKind) || #endif // __WXMSW__ - (m_chkReadonly->GetValue() != DEFAULTS.readonly) || (m_chkPassword->GetValue() != DEFAULTS.password) || + (m_chkReadonly->GetValue() != DEFAULTS.readonly) || + (m_chkProcessEnter->GetValue() != DEFAULTS.processEnter) || + (m_chkFilename->GetValue() != DEFAULTS.filename) || (m_radioWrap->GetSelection() != DEFAULTS.wrapStyle) ); } @@ -871,12 +912,12 @@ void TextWidgetsPage::OnText(wxCommandEvent& WXUNUSED(event)) return; } - wxLogMessage(_T("Text ctrl value changed")); + wxLogMessage(wxT("Text ctrl value changed")); } void TextWidgetsPage::OnTextEnter(wxCommandEvent& event) { - wxLogMessage(_T("Text entered: '%s'"), event.GetString().c_str()); + wxLogMessage(wxT("Text entered: '%s'"), event.GetString().c_str()); event.Skip(); } @@ -887,13 +928,11 @@ void TextWidgetsPage::OnCheckOrRadioBox(wxCommandEvent& WXUNUSED(event)) void TextWidgetsPage::OnStreamRedirector(wxCommandEvent& WXUNUSED(event)) { -// Note, NO_TEXT_WINDOW_STREAM is private flag of wxWidgets header -// it's simpler to check it rather than duplicate whole -#ifdef NO_TEXT_WINDOW_STREAM - wxMessageBox(_T("This wxWidgets build does not support wxStreamToTextRedirector")); -#else +#if wxHAS_TEXT_WINDOW_STREAM wxStreamToTextRedirector redirect(m_text); - wxString str( _T("Outputed to cout, appears in wxTextCtrl!") ); - cout << str << endl; + wxString str( wxT("Outputed to cout, appears in wxTextCtrl!") ); + wxSTD cout << str << wxSTD endl; +#else + wxMessageBox(wxT("This wxWidgets build does not support wxStreamToTextRedirector")); #endif }