]> git.saurik.com Git - wxWidgets.git/commitdiff
Move SendTextUpdatedEvent() down to wxTextEntryBase from wxTextCtrlBase.
authorVadim Zeitlin <vadim@wxwidgets.org>
Tue, 6 Apr 2010 18:46:24 +0000 (18:46 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Tue, 6 Apr 2010 18:46:24 +0000 (18:46 +0000)
This will allow reusing it in wxComboBox implementation as well.

Also add SendTextUpdatedEventIfAllowed() which can be used to only send the
events if they were not blocked at wxTextEntry level.

No real changes otherwise.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@63880 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/textctrl.h
include/wx/textentry.h
src/cocoa/textctrl.mm
src/common/textcmn.cpp
src/common/textentrycmn.cpp
src/univ/textctrl.cpp

index af00d41d0657c50e584b6c993e5372108ffe5e96..d9a6090ae756d98ce515d6ae1de0ffc059b46c14 100644 (file)
@@ -665,11 +665,6 @@ public:
     virtual bool EmulateKeyPress(const wxKeyEvent& event);
 
 
-    // generate the wxEVT_COMMAND_TEXT_UPDATED event, like SetValue() does and
-    // return true if the event was processed
-    static bool SendTextUpdatedEvent(wxWindow *win);
-    bool SendTextUpdatedEvent() { return SendTextUpdatedEvent(this); }
-
     // do the window-specific processing after processing the update event
     virtual void DoUpdateWindowUI(wxUpdateUIEvent& event);
 
index f773635ea111d2e388aab192767c4c4670d0d120..701893bc8f2c5671c4ca78b05e8e32130cdf00b3 100644 (file)
@@ -158,6 +158,16 @@ public:
     wxPoint GetMargins() const
         { return DoGetMargins(); }
 
+
+    // events
+    // ------
+
+    // generate the wxEVT_COMMAND_TEXT_UPDATED event for GetEditableWindow(),
+    // like SetValue() does and return true if the event was processed
+    //
+    // NB: this is public for wxRichTextCtrl use only right now, do not call it
+    static bool SendTextUpdatedEvent(wxWindow *win);
+
 protected:
     // flags for DoSetValue(): common part of SetValue() and ChangeValue() and
     // also used to implement WriteText() in wxMSW
@@ -207,8 +217,19 @@ protected:
 
     friend class EventsSuppressor;
 
-    // return true if the events are currently not suppressed
-    bool EventsAllowed() const { return m_eventsBlock == 0; }
+    // generate the wxEVT_COMMAND_TEXT_UPDATED event for this window
+    bool SendTextUpdatedEvent()
+    {
+        return SendTextUpdatedEvent(GetEditableWindow());
+    }
+
+    // generate the wxEVT_COMMAND_TEXT_UPDATED event for this window if the
+    // events are not currently disabled
+    void SendTextUpdatedEventIfAllowed()
+    {
+        if ( EventsAllowed() )
+            SendTextUpdatedEvent();
+    }
 
 private:
     // suppress or resume the text changed events generation: don't use these
@@ -233,6 +254,10 @@ private:
     // initially the generation of the events is enabled
     virtual void EnableTextChangedEvents(bool WXUNUSED(enable)) { }
 
+    // return true if the events are currently not suppressed
+    bool EventsAllowed() const { return m_eventsBlock == 0; }
+
+
     // if this counter is non-null, events are blocked
     unsigned m_eventsBlock;
 
index d33626cd18fa0c209d0fd2cdcf09a21b083de60b..b42cb65b2ebcc0a058dc94953b4f5d7ed46d1a81 100644 (file)
@@ -94,15 +94,7 @@ void wxTextCtrl::Cocoa_didChangeText(void)
 
 void wxTextCtrl::CocoaTarget_action(void)
 {
-    // NSTextField only sends the action message on enter key press and thus
-    // we send the appropriate event type.
-    wxCommandEvent event(wxEVT_COMMAND_TEXT_ENTER, GetId());
-
-    // See wxTextCtrlBase::SendTextUpdatedEvent for why we don't set the string.
-    //event.SetString(GetValue());
-
-    event.SetEventObject(this);
-    HandleWindowEvent(event);
+    SendTextUpdatedEvent();
 }
 
 void wxTextCtrl::AppendText(wxString const&)
index 06824dd481453cf7f0dec35d4f22d736da8e7c34..fa4d41ffbca30ccf3157da7522dd20d4ad566224 100644 (file)
@@ -1006,25 +1006,6 @@ wxTextAreaBase::HitTest(const wxPoint& WXUNUSED(pt), long * WXUNUSED(pos)) const
     return wxTE_HT_UNKNOWN;
 }
 
-// ----------------------------------------------------------------------------
-// events
-// ----------------------------------------------------------------------------
-
-/* static */
-bool wxTextCtrlBase::SendTextUpdatedEvent(wxWindow *win)
-{
-    wxCommandEvent event(wxEVT_COMMAND_TEXT_UPDATED, win->GetId());
-
-    // do not do this as it could be very inefficient if the text control
-    // contains a lot of text and we're not using ref-counted wxString
-    // implementation -- instead, event.GetString() will query the control for
-    // its current text if needed
-    //event.SetString(win->GetValue());
-
-    event.SetEventObject(win);
-    return win->GetEventHandler()->ProcessEvent(event);
-}
-
 #else // !wxUSE_TEXTCTRL
 
 // define this one even if !wxUSE_TEXTCTRL because it is also used by other
index f7b11237efa7ac13f6e86940e4627f3e19557e0b..9dc8ca9461b1190665684c0f542ec4f0f267267d 100644 (file)
@@ -279,4 +279,25 @@ wxPoint wxTextEntryBase::DoGetMargins() const
     return wxPoint(-1, -1);
 }
 
+// ----------------------------------------------------------------------------
+// events
+// ----------------------------------------------------------------------------
+
+/* static */
+bool wxTextEntryBase::SendTextUpdatedEvent(wxWindow *win)
+{
+    wxCHECK_MSG( win, false, "can't send an event without a window" );
+
+    wxCommandEvent event(wxEVT_COMMAND_TEXT_UPDATED, win->GetId());
+
+    // do not do this as it could be very inefficient if the text control
+    // contains a lot of text and we're not using ref-counted wxString
+    // implementation -- instead, event.GetString() will query the control for
+    // its current text if needed
+    //event.SetString(win->GetValue());
+
+    event.SetEventObject(win);
+    return win->HandleWindowEvent(event);
+}
+
 #endif // wxUSE_TEXTCTRL || wxUSE_COMBOBOX
index 1c2fa3c8142f7a16103fac26967f77b5f3e9008c..23573fcdd14d2b434454885cc5eb473a4a7fea5b 100644 (file)
@@ -1264,8 +1264,7 @@ void wxTextCtrl::Replace(wxTextPos from, wxTextPos to, const wxString& text)
     // now call it to do the rest (not related to refreshing)
     ClearSelection();
 
-    if ( EventsAllowed() )
-        SendTextUpdatedEvent();
+    SendTextUpdatedEventIfAllowed();
 }
 
 void wxTextCtrl::Remove(wxTextPos from, wxTextPos to)