X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/fb4888a650065c9a24572d6867345f34adafaa37..bb650010c8200174ce824aaadac44e8e5ead194d:/samples/widgets/textctrl.cpp diff --git a/samples/widgets/textctrl.cpp b/samples/widgets/textctrl.cpp index e7fbc25718..e3f6c7845e 100644 --- a/samples/widgets/textctrl.cpp +++ b/samples/widgets/textctrl.cpp @@ -36,9 +36,11 @@ #include "wx/statbox.h" #include "wx/stattext.h" #include "wx/textctrl.h" + #include "wx/msgdlg.h" #endif #include "wx/sizer.h" +#include "wx/ioswrap.h" #include "widgets.h" @@ -51,7 +53,7 @@ // control ids enum { - TextPage_Reset = 100, + TextPage_Reset = wxID_HIGHEST, TextPage_Set, TextPage_Add, @@ -59,6 +61,8 @@ enum TextPage_Clear, TextPage_Load, + TextPage_StreamRedirector, + TextPage_Password, TextPage_WrapLines, TextPage_Textctrl @@ -102,6 +106,7 @@ static const struct ControlValues bool password; bool readonly; + bool filename; WrapStyle wrapStyle; @@ -113,6 +118,7 @@ static const struct ControlValues TextLines_Multi, // multiline false, // not password false, // not readonly + false, // not filename WrapStyle_Word, // wrap on word boundaries #ifdef __WXMSW__ TextKind_Plain // plain EDIT control @@ -128,10 +134,14 @@ 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 void RecreateWidget() { CreateText(); } + + // lazy creation of the content + virtual void CreateContent(); protected: // create an info text contorl @@ -153,6 +163,7 @@ protected: void OnButtonClear(wxCommandEvent& event); void OnButtonLoad(wxCommandEvent& event); + void OnStreamRedirector(wxCommandEvent& event); void OnButtonQuit(wxCommandEvent& event); void OnText(wxCommandEvent& event); @@ -192,7 +203,8 @@ protected: // the checkboxes controlling text ctrl styles wxCheckBox *m_chkPassword, - *m_chkReadonly; + *m_chkReadonly, + *m_chkFilename; // under MSW we test rich edit controls as well here #ifdef __WXMSW__ @@ -293,6 +305,8 @@ BEGIN_EVENT_TABLE(TextWidgetsPage, WidgetsPage) EVT_BUTTON(TextPage_Reset, TextWidgetsPage::OnButtonReset) + EVT_BUTTON(TextPage_StreamRedirector, TextWidgetsPage::OnStreamRedirector) + EVT_BUTTON(TextPage_Clear, TextWidgetsPage::OnButtonClear) EVT_BUTTON(TextPage_Set, TextWidgetsPage::OnButtonSet) EVT_BUTTON(TextPage_Add, TextWidgetsPage::OnButtonAdd) @@ -321,17 +335,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, _T("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 = @@ -340,7 +362,8 @@ TextWidgetsPage::TextWidgetsPage(wxBookCtrl *book, wxImageList *imaglist) m_radioTextLines = (wxRadioBox *)NULL; m_chkPassword = - m_chkReadonly = (wxCheckBox *)NULL; + m_chkReadonly = + m_chkFilename = (wxCheckBox *)NULL; m_text = m_textPosCur = @@ -358,7 +381,10 @@ 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[] = { @@ -383,6 +409,10 @@ TextWidgetsPage::TextWidgetsPage(wxBookCtrl *book, wxImageList *imaglist) m_chkReadonly = CreateCheckBoxAndAddToSizer( sizerLeft, _T("&Read-only mode") ); + m_chkFilename = CreateCheckBoxAndAddToSizer( + sizerLeft, _T("&Filename control") + ); + m_chkFilename->Disable(); // not implemented yet sizerLeft->AddSpacer(5); static const wxString wrap[] = @@ -439,6 +469,9 @@ TextWidgetsPage::TextWidgetsPage(wxBookCtrl *book, wxImageList *imaglist) btn = new wxButton(this, TextPage_Clear, _T("&Clear")); sizerMiddleUp->Add(btn, 0, wxALL | wxGROW, 1); + btn = new wxButton(this, TextPage_StreamRedirector, _T("St&ream redirection")); + sizerMiddleUp->Add(btn, 0, wxALL | wxGROW, 1); + wxStaticBox *box4 = new wxStaticBox(this, wxID_ANY, _T("&Info:")); wxSizer *sizerMiddleDown = new wxStaticBoxSizer(box4, wxVERTICAL); @@ -526,8 +559,6 @@ TextWidgetsPage::TextWidgetsPage(wxBookCtrl *book, wxImageList *imaglist) sizerTop->Add(m_sizerText, 1, wxGROW | (wxALL & ~wxRIGHT), 10); SetSizer(sizerTop); - - sizerTop->Fit(this); } // ---------------------------------------------------------------------------- @@ -545,7 +576,7 @@ wxTextCtrl *TextWidgetsPage::CreateInfoText() wxTextCtrl *text = new wxTextCtrl(this, wxID_ANY, wxEmptyString, wxDefaultPosition, - wxSize(s_maxWidth, -1), + wxSize(s_maxWidth, wxDefaultCoord), wxTE_READONLY); return text; } @@ -579,6 +610,7 @@ void TextWidgetsPage::Reset() m_chkPassword->SetValue(DEFAULTS.password); m_chkReadonly->SetValue(DEFAULTS.readonly); + m_chkFilename->SetValue(DEFAULTS.filename); m_radioWrap->SetSelection(DEFAULTS.wrapStyle); @@ -589,7 +621,7 @@ void TextWidgetsPage::Reset() void TextWidgetsPage::CreateText() { - int flags = 0; + int flags = ms_defaultFlags; switch ( m_radioTextLines->GetSelection() ) { default: @@ -623,7 +655,7 @@ void TextWidgetsPage::CreateText() break; case WrapStyle_Char: - flags |= wxTE_LINEWRAP; + flags |= wxTE_CHARWRAP; break; case WrapStyle_Best: @@ -666,6 +698,11 @@ void TextWidgetsPage::CreateText() 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 @@ -845,8 +882,9 @@ 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_chkFilename->GetValue() != DEFAULTS.filename) || (m_radioWrap->GetSelection() != DEFAULTS.wrapStyle) ); } @@ -876,3 +914,13 @@ void TextWidgetsPage::OnCheckOrRadioBox(wxCommandEvent& WXUNUSED(event)) CreateText(); } +void TextWidgetsPage::OnStreamRedirector(wxCommandEvent& WXUNUSED(event)) +{ +#if wxHAS_TEXT_WINDOW_STREAM + wxStreamToTextRedirector redirect(m_text); + wxString str( _T("Outputed to cout, appears in wxTextCtrl!") ); + wxSTD cout << str << wxSTD endl; +#else + wxMessageBox(_T("This wxWidgets build does not support wxStreamToTextRedirector")); +#endif +}