]> git.saurik.com Git - wxWidgets.git/commitdiff
added wxTextEntry::DoGetValue() to allow returning empty string if the control curren...
authorVadim Zeitlin <vadim@wxwidgets.org>
Mon, 2 Mar 2009 13:31:29 +0000 (13:31 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Mon, 2 Mar 2009 13:31:29 +0000 (13:31 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@59265 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

13 files changed:
include/wx/generic/srchctlg.h
include/wx/gtk/textentry.h
include/wx/motif/textentry.h
include/wx/msw/textentry.h
include/wx/os2/textentry.h
include/wx/textentry.h
src/common/textentrycmn.cpp
src/generic/srchctlg.cpp
src/gtk/textentry.cpp
src/motif/textentry.cpp
src/msw/textctrl.cpp
src/msw/textentry.cpp
src/os2/textentry.cpp

index 407783f957169e767d636b019d36f29c63cf7af3..d71fdcc3ae5cd6279dae5071d49a4332358359a4 100644 (file)
@@ -69,9 +69,6 @@ public:
     // accessors
     // ---------
 
     // accessors
     // ---------
 
-    virtual wxString GetValue() const;
-    virtual void SetValue(const wxString& value);
-
     virtual wxString GetRange(long from, long to) const;
 
     virtual int GetLineLength(long lineNo) const;
     virtual wxString GetRange(long from, long to) const;
 
     virtual int GetLineLength(long lineNo) const;
@@ -204,6 +201,9 @@ public:
 
 protected:
     virtual void DoSetValue(const wxString& value, int flags);
 
 protected:
     virtual void DoSetValue(const wxString& value, int flags);
+    virtual wxString DoGetValue() const;
+    virtual void SetValue(const wxString& value);
+
     virtual bool DoLoadFile(const wxString& file, int fileType);
     virtual bool DoSaveFile(const wxString& file, int fileType);
 
     virtual bool DoLoadFile(const wxString& file, int fileType);
     virtual bool DoSaveFile(const wxString& file, int fileType);
 
index 91db71ae1117938ee63acbc4a160e04720bc958f..deab5219c41ef59b79dad2251a4701d3788c1762 100644 (file)
@@ -24,7 +24,6 @@ public:
 
     // implement wxTextEntryBase pure virtual methods
     virtual void WriteText(const wxString& text);
 
     // implement wxTextEntryBase pure virtual methods
     virtual void WriteText(const wxString& text);
-    virtual wxString GetValue() const;
     virtual void Remove(long from, long to);
 
     virtual void Copy();
     virtual void Remove(long from, long to);
 
     virtual void Copy();
@@ -53,6 +52,9 @@ public:
     // implementation only from now on
     void SendMaxLenEvent();
 
     // implementation only from now on
     void SendMaxLenEvent();
 
+protected:
+    virtual wxString DoGetValue() const;
+
 private:
     // implement this to return the associated GtkEntry or another widget
     // implementing GtkEditable
 private:
     // implement this to return the associated GtkEntry or another widget
     // implementing GtkEditable
index 5761116e0a9a682dd383efdd16071221f858028e..5a3a9577cb80b41f60f6c79d98793859d2ecffdd 100644 (file)
@@ -22,7 +22,6 @@ public:
 
     // implement wxTextEntryBase pure virtual methods
     virtual void WriteText(const wxString& text);
 
     // implement wxTextEntryBase pure virtual methods
     virtual void WriteText(const wxString& text);
-    virtual wxString GetValue() const;
     virtual void Replace(long from, long to, const wxString& value);
     virtual void Remove(long from, long to);
 
     virtual void Replace(long from, long to, const wxString& value);
     virtual void Remove(long from, long to);
 
@@ -46,6 +45,8 @@ public:
     virtual void SetEditable(bool editable);
 
 protected:
     virtual void SetEditable(bool editable);
 
 protected:
+    virtual wxString DoGetValue() const;
+
     // translate wx text position (which may be -1 meaning "last one") to a
     // valid Motif text position
     long GetMotifPos(long pos) const;
     // translate wx text position (which may be -1 meaning "last one") to a
     // valid Motif text position
     long GetMotifPos(long pos) const;
index 8f86d191b9658ce00b9c4a3da895208ec1a7d1b2..11141000a92838f1f348b33ab125a491ab60442c 100644 (file)
@@ -59,6 +59,8 @@ public:
 #endif // wxUSE_UXTHEME
 
 protected:
 #endif // wxUSE_UXTHEME
 
 protected:
+    virtual wxString DoGetValue() const;
+
     // this is really a hook for multiline text controls as the single line
     // ones don't need to ever scroll to show the selection but having it here
     // allows us to put Remove() in the base class
     // this is really a hook for multiline text controls as the single line
     // ones don't need to ever scroll to show the selection but having it here
     // allows us to put Remove() in the base class
index 33bb2320ce9f22f7f86b6a6c56a854f93d850be5..52d22bf463539f52d524832b0030d4a0b191dfa2 100644 (file)
@@ -22,7 +22,6 @@ public:
 
     // implement wxTextEntryBase pure virtual methods
     virtual void WriteText(const wxString& text);
 
     // implement wxTextEntryBase pure virtual methods
     virtual void WriteText(const wxString& text);
-    virtual wxString GetValue() const;
     virtual void Remove(long from, long to);
 
     virtual void Copy();
     virtual void Remove(long from, long to);
 
     virtual void Copy();
@@ -48,6 +47,8 @@ public:
     virtual void SetMaxLength(unsigned long len);
 
 protected:
     virtual void SetMaxLength(unsigned long len);
 
 protected:
+    virtual wxString DoGetValue() const;
+
     // this is really a hook for multiline text controls as the single line
     // ones don't need to ever scroll to show the selection but having it here
     // allows us to put Remove() in the base class
     // this is really a hook for multiline text controls as the single line
     // ones don't need to ever scroll to show the selection but having it here
     // allows us to put Remove() in the base class
index 1194b61f90f0cf0ef00baca474e37f814645c943..c0c116a433489754a2cbee5e0a6cdb2e6c8be594 100644 (file)
@@ -44,7 +44,7 @@ public:
     virtual void WriteText(const wxString& text) = 0;
     virtual void AppendText(const wxString& text);
 
     virtual void WriteText(const wxString& text) = 0;
     virtual void AppendText(const wxString& text);
 
-    virtual wxString GetValue() const = 0;
+    virtual wxString GetValue() const;
     virtual wxString GetRange(long from, long to) const;
     bool IsEmpty() const { return GetLastPosition() <= 0; }
 
     virtual wxString GetRange(long from, long to) const;
     bool IsEmpty() const { return GetLastPosition() <= 0; }
 
@@ -152,6 +152,7 @@ protected:
     };
 
     virtual void DoSetValue(const wxString& value, int flags);
     };
 
     virtual void DoSetValue(const wxString& value, int flags);
+    virtual wxString DoGetValue() const = 0;
 
     // class which should be used to temporarily disable text change events
     //
 
     // class which should be used to temporarily disable text change events
     //
index a0e31da051ed15c4719ce20d9dd5eb228d5a503d..cb81ea0779d33bd4f3d61077ae475936fbdb5824 100644 (file)
@@ -48,15 +48,21 @@ public:
                                 wxTextEntryHintData::OnSetFocus, this);
         wxBIND_OR_CONNECT_HACK(win, wxEVT_KILL_FOCUS, wxFocusEventHandler,
                                 wxTextEntryHintData::OnKillFocus, this);
                                 wxTextEntryHintData::OnSetFocus, this);
         wxBIND_OR_CONNECT_HACK(win, wxEVT_KILL_FOCUS, wxFocusEventHandler,
                                 wxTextEntryHintData::OnKillFocus, this);
+
+        // we don't have any hint yet
+        m_showsHint = false;
     }
 
     // default dtor is ok
 
     }
 
     // default dtor is ok
 
+    // are we showing the hint right now?
+    bool ShowsHint() const { return m_showsHint; }
+
     void SetHintString(const wxString& hint)
     {
         m_hint = hint;
 
     void SetHintString(const wxString& hint)
     {
         m_hint = hint;
 
-        if ( ShowsHint() )
+        if ( m_showsHint )
         {
             // update it immediately
             m_entry->ChangeValue(hint);
         {
             // update it immediately
             m_entry->ChangeValue(hint);
@@ -67,21 +73,17 @@ public:
     const wxString& GetHintString() const { return m_hint; }
 
 private:
     const wxString& GetHintString() const { return m_hint; }
 
 private:
-    // are we showing the hint right now?
-    bool ShowsHint() const
-    {
-        return m_entry->GetValue() == m_hint;
-    }
-
     void OnSetFocus(wxFocusEvent& event)
     {
         // hide the hint if we were showing it
     void OnSetFocus(wxFocusEvent& event)
     {
         // hide the hint if we were showing it
-        if ( ShowsHint() )
+        if ( m_showsHint )
         {
             // Clear() would send an event which we don't want, so do it like
             // this
             m_entry->ChangeValue(wxString());
             m_win->SetForegroundColour(m_colFg);
         {
             // Clear() would send an event which we don't want, so do it like
             // this
             m_entry->ChangeValue(wxString());
             m_win->SetForegroundColour(m_colFg);
+
+            m_showsHint = false;
         }
 
         event.Skip();
         }
 
         event.Skip();
@@ -96,19 +98,27 @@ private:
 
             m_colFg = m_win->GetForegroundColour();
             m_win->SetForegroundColour(*wxLIGHT_GREY);
 
             m_colFg = m_win->GetForegroundColour();
             m_win->SetForegroundColour(*wxLIGHT_GREY);
+
+            m_showsHint = true;
         }
 
         event.Skip();
     }
 
         }
 
         event.Skip();
     }
 
-
+    // the text control we're associated with (as its interface and its window)
     wxTextEntryBase * const m_entry;
     wxWindow * const m_win;
 
     wxTextEntryBase * const m_entry;
     wxWindow * const m_win;
 
+    // the original foreground colour of m_win before we changed it
     wxColour m_colFg;
 
     wxColour m_colFg;
 
+    // the hint passed to wxTextEntry::SetHint()
     wxString m_hint;
 
     wxString m_hint;
 
+    // true if we're currently showing it, for this we must be empty and not
+    // have focus
+    bool m_showsHint;
+
     wxDECLARE_NO_COPY_CLASS(wxTextEntryHintData);
 };
 
     wxDECLARE_NO_COPY_CLASS(wxTextEntryHintData);
 };
 
@@ -122,9 +132,14 @@ wxTextEntryBase::~wxTextEntryBase()
 }
 
 // ----------------------------------------------------------------------------
 }
 
 // ----------------------------------------------------------------------------
-// text operations
+// text accessors
 // ----------------------------------------------------------------------------
 
 // ----------------------------------------------------------------------------
 
+wxString wxTextEntryBase::GetValue() const
+{
+    return m_hintData && m_hintData->ShowsHint() ? wxString() : DoGetValue();
+}
+
 wxString wxTextEntryBase::GetRange(long from, long to) const
 {
     wxString sel;
 wxString wxTextEntryBase::GetRange(long from, long to) const
 {
     wxString sel;
@@ -138,6 +153,10 @@ wxString wxTextEntryBase::GetRange(long from, long to) const
     return sel;
 }
 
     return sel;
 }
 
+// ----------------------------------------------------------------------------
+// text operations
+// ----------------------------------------------------------------------------
+
 void wxTextEntryBase::AppendText(const wxString& text)
 {
     SetInsertionPointEnd();
 void wxTextEntryBase::AppendText(const wxString& text)
 {
     SetInsertionPointEnd();
index e520c7dd24099f8223ff22c634e53a3ebd5bccf0..494ae1537f76d125fe5c95537a517ea974be1949 100644 (file)
@@ -577,7 +577,7 @@ void wxSearchCtrl::LayoutControls(int x, int y, int width, int height)
 // accessors
 // ---------
 
 // accessors
 // ---------
 
-wxString wxSearchCtrl::GetValue() const
+wxString wxSearchCtrl::DoGetValue() const
 {
     wxString value = m_text->GetValue();
     if (value == m_text->GetDescriptiveText())
 {
     wxString value = m_text->GetValue();
     if (value == m_text->GetDescriptiveText())
@@ -585,11 +585,6 @@ wxString wxSearchCtrl::GetValue() const
     else
         return value;
 }
     else
         return value;
 }
-void wxSearchCtrl::SetValue(const wxString& value)
-{
-    m_text->SetValue(value);
-}
-
 wxString wxSearchCtrl::GetRange(long from, long to) const
 {
     return m_text->GetRange(from, to);
 wxString wxSearchCtrl::GetRange(long from, long to) const
 {
     return m_text->GetRange(from, to);
index 99d0f129435aaf986dec8f978960c85a1d72207d..7c9b9e8dee6f707f1d82a04aecc807f87bfd8bb9 100644 (file)
@@ -103,7 +103,7 @@ void wxTextEntry::WriteText(const wxString& value)
     gtk_editable_set_position(edit, len);
 }
 
     gtk_editable_set_position(edit, len);
 }
 
-wxString wxTextEntry::GetValue() const
+wxString wxTextEntry::DoGetValue() const
 {
     const wxGtkString value(gtk_editable_get_chars(GetEditable(), 0, -1));
 
 {
     const wxGtkString value(gtk_editable_get_chars(GetEditable(), 0, -1));
 
index 9ba70b8df3b73e1ec2d97ce28e2b1f443ebfe64d..d2b4cb27f645d5222441db5cd16817227b152c77 100644 (file)
@@ -59,7 +59,7 @@ long wxTextEntry::GetMotifPos(long pos) const
 // operations on control text
 // ----------------------------------------------------------------------------
 
 // operations on control text
 // ----------------------------------------------------------------------------
 
-wxString wxTextEntry::GetValue() const
+wxString wxTextEntry::DoGetValue() const
 {
     wxString str;
 
 {
     wxString str;
 
index 3b9129f0a4bd94cd62abd3b3be5f5a0464ddb5a9..f394ce44e2f8e751c25b20cd93e073ec8d4aa73d 100644 (file)
@@ -858,8 +858,9 @@ wxString wxTextCtrl::GetRange(long from, long to) const
     else
 #endif // wxUSE_RICHEDIT
     {
     else
 #endif // wxUSE_RICHEDIT
     {
-        // retrieve all text
-        str = wxGetWindowText(GetHWND());
+        // retrieve all text: wxTextEntry method works even for multiline
+        // controls and must be used for single line ones to account for hints
+        str = wxTextEntry::GetValue();
 
         // need only a range?
         if ( from < to )
 
         // need only a range?
         if ( from < to )
@@ -882,7 +883,7 @@ void wxTextCtrl::DoSetValue(const wxString& value, int flags)
     // comparing it with the old one (chances are that it will be different
     // anyhow, this comparison is there to avoid flicker for small single-line
     // edit controls mostly)
     // comparing it with the old one (chances are that it will be different
     // anyhow, this comparison is there to avoid flicker for small single-line
     // edit controls mostly)
-    if ( (value.length() > 0x400) || (value != GetValue()) )
+    if ( (value.length() > 0x400) || (value != DoGetValue()) )
     {
         DoWriteText(value, flags /* doesn't include SelectionOnly here */);
 
     {
         DoWriteText(value, flags /* doesn't include SelectionOnly here */);
 
index 968f913fd17d583f1814d0fc8217cae4d3b6ffd0..b39db7f12ca1d5ce27ae46835355cb50335e5093 100644 (file)
@@ -184,7 +184,7 @@ void wxTextEntry::WriteText(const wxString& text)
     ::SendMessage(GetEditHwnd(), EM_REPLACESEL, 0, (LPARAM)text.wx_str());
 }
 
     ::SendMessage(GetEditHwnd(), EM_REPLACESEL, 0, (LPARAM)text.wx_str());
 }
 
-wxString wxTextEntry::GetValue() const
+wxString wxTextEntry::DoGetValue() const
 {
     return wxGetWindowText(GetEditHWND());
 }
 {
     return wxGetWindowText(GetEditHWND());
 }
index 817390980da9930eb26fcd58e0b40d97ec831053..9190bc8ee5d6e0b4b9f9efc96c99ac289ccc04f1 100644 (file)
@@ -61,7 +61,7 @@ void wxTextEntry::WriteText(const wxString& text)
     ::WinSetWindowText(GetEditHwnd(), text.c_str());
 }
 
     ::WinSetWindowText(GetEditHwnd(), text.c_str());
 }
 
-wxString wxTextEntry::GetValue() const
+wxString wxTextEntry::DoGetValue() const
 {
     return wxGetWindowText(GetEditHWND());
 }
 {
     return wxGetWindowText(GetEditHWND());
 }