]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/widgets/textctrl.cpp
fixing infinite recursion for rotated text, introduced in cleanup r57915
[wxWidgets.git] / samples / widgets / textctrl.cpp
index e7fbc257181567c37564c304143476e2e4b4c95c..f0ad274d1baca8d0aa3ae7d311a5509e2abe9bfe 100644 (file)
     #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,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
@@ -153,6 +164,7 @@ protected:
     void OnButtonClear(wxCommandEvent& event);
     void OnButtonLoad(wxCommandEvent& event);
 
+    void OnStreamRedirector(wxCommandEvent& event);
     void OnButtonQuit(wxCommandEvent& event);
 
     void OnText(wxCommandEvent& event);
@@ -192,7 +204,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 +306,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 +336,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 +363,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 +382,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 +410,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 +470,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 +560,6 @@ TextWidgetsPage::TextWidgetsPage(wxBookCtrl *book, wxImageList *imaglist)
     sizerTop->Add(m_sizerText, 1, wxGROW | (wxALL & ~wxRIGHT), 10);
 
     SetSizer(sizerTop);
-
-    sizerTop->Fit(this);
 }
 
 // ----------------------------------------------------------------------------
@@ -545,7 +577,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 +611,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 +622,7 @@ void TextWidgetsPage::Reset()
 
 void TextWidgetsPage::CreateText()
 {
-    int flags = 0;
+    int flags = ms_defaultFlags;
     switch ( m_radioTextLines->GetSelection() )
     {
         default:
@@ -623,7 +656,7 @@ void TextWidgetsPage::CreateText()
             break;
 
         case WrapStyle_Char:
-            flags |= wxTE_LINEWRAP;
+            flags |= wxTE_CHARWRAP;
             break;
 
         case WrapStyle_Best:
@@ -666,6 +699,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 +883,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 +915,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
+}