X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/32b8ec418aee4e38877d4cb79e2984c766dcc358..6344162a81f74b3fbab0803405eebc0c0b83e797:/samples/widgets/textctrl.cpp diff --git a/samples/widgets/textctrl.cpp b/samples/widgets/textctrl.cpp index 94d0a322d7..6c52e64825 100644 --- a/samples/widgets/textctrl.cpp +++ b/samples/widgets/textctrl.cpp @@ -29,6 +29,7 @@ #include "wx/log.h" #include "wx/timer.h" + #include "wx/bitmap.h" #include "wx/button.h" #include "wx/checkbox.h" #include "wx/radiobox.h" @@ -70,6 +71,18 @@ enum TextLines TextLines_Multi }; +#ifdef __WXMSW__ + +// textctrl kind values +enum TextKind +{ + TextKind_Plain, + TextKind_Rich, + TextKind_Rich2 +}; + +#endif // __WXMSW__ + // default values for the controls static const struct ControlValues { @@ -77,12 +90,18 @@ static const struct ControlValues bool password; bool wraplines; bool readonly; +#ifdef __WXMSW__ + TextKind textKind; +#endif // __WXMSW__ } DEFAULTS = { TextLines_Multi, // multiline FALSE, // not password TRUE, // do wrap lines - FALSE // not readonly + FALSE, // not readonly +#ifdef __WXMSW__ + TextKind_Plain // plain EDIT control +#endif // __WXMSW__ }; // ---------------------------------------------------------------------------- @@ -156,6 +175,11 @@ protected: *m_chkWrapLines, *m_chkReadonly; + // under MSW we test rich edit controls as well here +#ifdef __WXMSW__ + wxRadioBox *m_radioKind; +#endif // __WXMSW__ + // the textctrl itself and the sizer it is in wxTextCtrl *m_text; wxSizer *m_sizerText; @@ -167,7 +191,8 @@ protected: *m_textPosLast, *m_textLineLast, *m_textSelFrom, - *m_textSelTo; + *m_textSelTo, + *m_textRange; // and the data to show in them long m_posCur, @@ -177,9 +202,8 @@ protected: private: // any class wishing to process wxWindows events must use this macro - DECLARE_EVENT_TABLE(); - - DECLARE_WIDGETS_PAGE(TextWidgetsPage); + DECLARE_EVENT_TABLE() + DECLARE_WIDGETS_PAGE(TextWidgetsPage) }; // ---------------------------------------------------------------------------- @@ -227,6 +251,9 @@ TextWidgetsPage::TextWidgetsPage(wxNotebook *notebook, wxImageList *imaglist) imaglist->Add(wxBitmap(text_xpm)); // init everything +#ifdef __WXMSW__ + m_radioKind = +#endif // __WXMSW__ m_radioTextLines = (wxRadioBox *)NULL; m_chkPassword = @@ -240,7 +267,9 @@ TextWidgetsPage::TextWidgetsPage(wxNotebook *notebook, wxImageList *imaglist) m_textPosLast = m_textLineLast = m_textSelFrom = - m_textSelTo = (wxTextCtrl *)NULL; + m_textSelTo = + m_textRange = (wxTextCtrl *)NULL; + m_sizerText = (wxSizer *)NULL; m_posCur = @@ -276,7 +305,25 @@ TextWidgetsPage::TextWidgetsPage(wxNotebook *notebook, wxImageList *imaglist) sizerLeft, _T("&Read-only mode") ); +#ifdef __WXMSW__ + static const wxString kinds[] = + { + _T("plain edit"), + _T("rich edit"), + _T("rich edit 2.0"), + }; + + m_radioKind = new wxRadioBox(this, -1, _T("Control &kind"), + wxDefaultPosition, wxDefaultSize, + WXSIZEOF(kinds), kinds, + 1, wxRA_SPECIFY_COLS); + + sizerLeft->Add(5, 5, 0, wxGROW | wxALL, 5); // spacer + sizerLeft->Add(m_radioKind, 0, wxGROW | wxALL, 5); +#endif // __WXMSW__ + wxButton *btn = new wxButton(this, TextPage_Reset, _T("&Reset")); + sizerLeft->Add(2, 2, 0, wxGROW | wxALL, 1); // spacer sizerLeft->Add(btn, 0, wxALIGN_CENTRE_HORIZONTAL | wxALL, 15); // middle pane @@ -284,19 +331,19 @@ TextWidgetsPage::TextWidgetsPage(wxNotebook *notebook, wxImageList *imaglist) wxSizer *sizerMiddleUp = new wxStaticBoxSizer(box2, wxVERTICAL); btn = new wxButton(this, TextPage_Set, _T("&Set text value")); - sizerMiddleUp->Add(btn, 0, wxALL | wxGROW, 5); + sizerMiddleUp->Add(btn, 0, wxALL | wxGROW, 1); btn = new wxButton(this, TextPage_Add, _T("&Append text")); - sizerMiddleUp->Add(btn, 0, wxALL | wxGROW, 5); + sizerMiddleUp->Add(btn, 0, wxALL | wxGROW, 1); btn = new wxButton(this, TextPage_Insert, _T("&Insert text")); - sizerMiddleUp->Add(btn, 0, wxALL | wxGROW, 5); + sizerMiddleUp->Add(btn, 0, wxALL | wxGROW, 1); btn = new wxButton(this, TextPage_Load, _T("&Load file")); - sizerMiddleUp->Add(btn, 0, wxALL | wxGROW, 5); + sizerMiddleUp->Add(btn, 0, wxALL | wxGROW, 1); btn = new wxButton(this, TextPage_Clear, _T("&Clear")); - sizerMiddleUp->Add(btn, 0, wxALL | wxGROW, 5); + sizerMiddleUp->Add(btn, 0, wxALL | wxGROW, 1); wxStaticBox *box4 = new wxStaticBox(this, -1, _T("&Info:")); wxSizer *sizerMiddleDown = new wxStaticBoxSizer(box4, wxVERTICAL); @@ -353,6 +400,20 @@ TextWidgetsPage::TextWidgetsPage(wxNotebook *notebook, wxImageList *imaglist) ), 0, wxALL, 5 ); + + m_textRange = new wxTextCtrl(this, -1, _T(""), + wxDefaultPosition, wxDefaultSize, + wxTE_READONLY); + sizerMiddleDown->Add + ( + CreateTextWithLabelSizer + ( + _T("Range 10..20:"), + m_textRange + ), + 0, wxALL, 5 + ); + wxSizer *sizerMiddle = new wxBoxSizer(wxVERTICAL); sizerMiddle->Add(sizerMiddleUp, 0, wxGROW); sizerMiddle->Add(sizerMiddleDown, 1, wxGROW | wxTOP, 5); @@ -362,7 +423,7 @@ TextWidgetsPage::TextWidgetsPage(wxNotebook *notebook, wxImageList *imaglist) m_sizerText = new wxStaticBoxSizer(box3, wxHORIZONTAL); Reset(); CreateText(); - m_sizerText->SetMinSize(250, 0); + m_sizerText->SetMinSize(150, 0); // the 3 panes panes compose the upper part of the window wxSizer *sizerTop = new wxBoxSizer(wxHORIZONTAL); @@ -429,6 +490,9 @@ void TextWidgetsPage::Reset() m_chkPassword->SetValue(DEFAULTS.password); m_chkWrapLines->SetValue(DEFAULTS.wraplines); m_chkReadonly->SetValue(DEFAULTS.readonly); +#ifdef __WXMSW__ + m_radioKind->SetSelection(DEFAULTS.textKind); +#endif // __WXMSW__ } void TextWidgetsPage::CreateText() @@ -437,7 +501,7 @@ void TextWidgetsPage::CreateText() switch ( m_radioTextLines->GetSelection() ) { default: - wxFAIL_MSG( _T("unexpected radio box selection") ); + wxFAIL_MSG( _T("unexpected lines radio box selection") ); case TextLines_Single: break; @@ -455,12 +519,31 @@ void TextWidgetsPage::CreateText() if ( !m_chkWrapLines->GetValue() ) flags |= wxHSCROLL; +#ifdef __WXMSW__ + switch ( m_radioKind->GetSelection() ) + { + default: + wxFAIL_MSG( _T("unexpected kind radio box selection") ); + + case TextKind_Plain: + break; + + case TextKind_Rich: + flags |= wxTE_RICH; + break; + + case TextKind_Rich2: + flags |= wxTE_RICH2; + break; + } +#endif // __WXMSW__ + wxString valueOld; if ( m_text ) { valueOld = m_text->GetValue(); - m_sizerText->Remove(m_text); + m_sizerText->Detach( m_text ); delete m_text; } else @@ -472,8 +555,10 @@ void TextWidgetsPage::CreateText() valueOld, wxDefaultPosition, wxDefaultSize, flags); + + // cast to int needed to silence gcc warning about different enums m_sizerText->Add(m_text, 1, wxALL | - (flags & wxTE_MULTILINE ? wxGROW + (flags & wxTE_MULTILINE ? (int)wxGROW : wxALIGN_TOP), 5); m_sizerText->Layout(); } @@ -521,7 +606,7 @@ void TextWidgetsPage::OnIdle(wxIdleEvent& WXUNUSED(event)) if ( m_textLineLast ) { m_textLineLast->SetValue( - wxString::Format(_T("%ld"), m_text->GetNumberOfLines())); + wxString::Format(_T("%d"), m_text->GetNumberOfLines()) ); } if ( m_textSelFrom && m_textSelTo ) @@ -544,6 +629,11 @@ void TextWidgetsPage::OnIdle(wxIdleEvent& WXUNUSED(event)) m_selTo = selTo; } } + + if ( m_textRange ) + { + m_textRange->SetValue(m_text->GetRange(10, 20)); + } } void TextWidgetsPage::OnButtonReset(wxCommandEvent& WXUNUSED(event)) @@ -555,20 +645,30 @@ void TextWidgetsPage::OnButtonReset(wxCommandEvent& WXUNUSED(event)) void TextWidgetsPage::OnButtonSet(wxCommandEvent& WXUNUSED(event)) { - m_text->SetValue(_T("Yellow submarine")); + m_text->SetValue(m_text->GetWindowStyle() & wxTE_MULTILINE + ? _T("Here,\nthere and\neverywhere") + : _T("Yellow submarine")); + m_text->SetFocus(); } void TextWidgetsPage::OnButtonAdd(wxCommandEvent& WXUNUSED(event)) { - m_text->AppendText(_T("here, there and everywhere")); - m_text->SetFocus(); + if ( m_text->GetWindowStyle() & wxTE_MULTILINE ) + { + m_text->AppendText(_T("We all live in a\n")); + } + + m_text->AppendText(_T("Yellow submarine")); } void TextWidgetsPage::OnButtonInsert(wxCommandEvent& WXUNUSED(event)) { - m_text->WriteText(_T("is there anybody going to listen to my story")); - m_text->SetFocus(); + m_text->WriteText(_T("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")); + } } void TextWidgetsPage::OnButtonClear(wxCommandEvent& WXUNUSED(event)) @@ -601,8 +701,9 @@ void TextWidgetsPage::OnButtonLoad(wxCommandEvent& WXUNUSED(event)) else { long elapsed = sw.Time(); - wxLogMessage(_T("Loaded file '%s' in %u.%us"), - filename.c_str(), elapsed / 1000, elapsed % 1000); + wxLogMessage(_T("Loaded file '%s' in %lu.%us"), + filename.c_str(), elapsed / 1000, + (unsigned int) elapsed % 1000); } } } @@ -626,6 +727,9 @@ void TextWidgetsPage::OnUpdateUIPasswordCheckbox(wxUpdateUIEvent& event) void TextWidgetsPage::OnUpdateUIResetButton(wxUpdateUIEvent& event) { event.Enable( (m_radioTextLines->GetSelection() != DEFAULTS.textLines) || +#ifdef __WXMSW__ + (m_radioKind->GetSelection() != DEFAULTS.textKind) || +#endif // __WXMSW__ (m_chkReadonly->GetValue() != DEFAULTS.readonly) || (m_chkPassword->GetValue() != DEFAULTS.password) || (m_chkWrapLines->GetValue() != DEFAULTS.wraplines) );