]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/widgets/textctrl.cpp
fix for dmc compilation of projects with more than one obj
[wxWidgets.git] / samples / widgets / textctrl.cpp
index 94d0a322d73bdd1e9183b03d59980ff988aa621f..6c52e648257e1e81839cb860565b47ac6cbfebad 100644 (file)
@@ -29,6 +29,7 @@
     #include "wx/log.h"
     #include "wx/timer.h"
 
     #include "wx/log.h"
     #include "wx/timer.h"
 
+    #include "wx/bitmap.h"
     #include "wx/button.h"
     #include "wx/checkbox.h"
     #include "wx/radiobox.h"
     #include "wx/button.h"
     #include "wx/checkbox.h"
     #include "wx/radiobox.h"
@@ -70,6 +71,18 @@ enum TextLines
     TextLines_Multi
 };
 
     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
 {
 // default values for the controls
 static const struct ControlValues
 {
@@ -77,12 +90,18 @@ static const struct ControlValues
     bool password;
     bool wraplines;
     bool readonly;
     bool password;
     bool wraplines;
     bool readonly;
+#ifdef __WXMSW__
+    TextKind textKind;
+#endif // __WXMSW__
 } DEFAULTS =
 {
     TextLines_Multi,    // multiline
     FALSE,              // not password
     TRUE,               // do wrap lines
 } 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;
 
                *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;
     // 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_textPosLast,
                *m_textLineLast,
                *m_textSelFrom,
-               *m_textSelTo;
+               *m_textSelTo,
+               *m_textRange;
 
     // and the data to show in them
     long m_posCur,
 
     // 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
 
 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
     imaglist->Add(wxBitmap(text_xpm));
 
     // init everything
+#ifdef __WXMSW__
+    m_radioKind =
+#endif // __WXMSW__
     m_radioTextLines = (wxRadioBox *)NULL;
 
     m_chkPassword =
     m_radioTextLines = (wxRadioBox *)NULL;
 
     m_chkPassword =
@@ -240,7 +267,9 @@ TextWidgetsPage::TextWidgetsPage(wxNotebook *notebook, wxImageList *imaglist)
     m_textPosLast =
     m_textLineLast =
     m_textSelFrom =
     m_textPosLast =
     m_textLineLast =
     m_textSelFrom =
-    m_textSelTo = (wxTextCtrl *)NULL;
+    m_textSelTo =
+    m_textRange = (wxTextCtrl *)NULL;
+
     m_sizerText = (wxSizer *)NULL;
 
     m_posCur =
     m_sizerText = (wxSizer *)NULL;
 
     m_posCur =
@@ -276,7 +305,25 @@ TextWidgetsPage::TextWidgetsPage(wxNotebook *notebook, wxImageList *imaglist)
                         sizerLeft, _T("&Read-only mode")
                     );
 
                         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"));
     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
     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"));
     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"));
 
     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"));
 
     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"));
 
     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"));
 
     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);
 
     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
                      );
                         ),
                         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);
     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 = 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);
 
     // 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);
     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()
 }
 
 void TextWidgetsPage::CreateText()
@@ -437,7 +501,7 @@ void TextWidgetsPage::CreateText()
     switch ( m_radioTextLines->GetSelection() )
     {
         default:
     switch ( m_radioTextLines->GetSelection() )
     {
         default:
-            wxFAIL_MSG( _T("unexpected radio box selection") );
+            wxFAIL_MSG( _T("unexpected lines radio box selection") );
 
         case TextLines_Single:
             break;
 
         case TextLines_Single:
             break;
@@ -455,12 +519,31 @@ void TextWidgetsPage::CreateText()
     if ( !m_chkWrapLines->GetValue() )
         flags |= wxHSCROLL;
 
     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();
 
     wxString valueOld;
     if ( m_text )
     {
         valueOld = m_text->GetValue();
 
-        m_sizerText->Remove(m_text);
+        m_sizerText->Detach( m_text );
         delete m_text;
     }
     else
         delete m_text;
     }
     else
@@ -472,8 +555,10 @@ void TextWidgetsPage::CreateText()
                             valueOld,
                             wxDefaultPosition, wxDefaultSize,
                             flags);
                             valueOld,
                             wxDefaultPosition, wxDefaultSize,
                             flags);
+
+    // cast to int needed to silence gcc warning about different enums
     m_sizerText->Add(m_text, 1, wxALL |
     m_sizerText->Add(m_text, 1, wxALL |
-                     (flags & wxTE_MULTILINE ? wxGROW
+                     (flags & wxTE_MULTILINE ? (int)wxGROW
                                              : wxALIGN_TOP), 5);
     m_sizerText->Layout();
 }
                                              : wxALIGN_TOP), 5);
     m_sizerText->Layout();
 }
@@ -521,7 +606,7 @@ void TextWidgetsPage::OnIdle(wxIdleEvent& WXUNUSED(event))
     if ( m_textLineLast )
     {
         m_textLineLast->SetValue(
     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 )
     }
 
     if ( m_textSelFrom && m_textSelTo )
@@ -544,6 +629,11 @@ void TextWidgetsPage::OnIdle(wxIdleEvent& WXUNUSED(event))
             m_selTo = selTo;
         }
     }
             m_selTo = selTo;
         }
     }
+
+    if ( m_textRange )
+    {
+        m_textRange->SetValue(m_text->GetRange(10, 20));
+    }
 }
 
 void TextWidgetsPage::OnButtonReset(wxCommandEvent& WXUNUSED(event))
 }
 
 void TextWidgetsPage::OnButtonReset(wxCommandEvent& WXUNUSED(event))
@@ -555,20 +645,30 @@ void TextWidgetsPage::OnButtonReset(wxCommandEvent& WXUNUSED(event))
 
 void TextWidgetsPage::OnButtonSet(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->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))
 {
 }
 
 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))
 }
 
 void TextWidgetsPage::OnButtonClear(wxCommandEvent& WXUNUSED(event))
@@ -601,8 +701,9 @@ void TextWidgetsPage::OnButtonLoad(wxCommandEvent& WXUNUSED(event))
         else
         {
             long elapsed = sw.Time();
         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) ||
 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) );
                   (m_chkReadonly->GetValue() != DEFAULTS.readonly) ||
                   (m_chkPassword->GetValue() != DEFAULTS.password) ||
                   (m_chkWrapLines->GetValue() != DEFAULTS.wraplines) );