]> git.saurik.com Git - wxWidgets.git/commitdiff
Add wxControlWithItems::SendSelectionChangedEvent() helper.
authorVadim Zeitlin <vadim@wxwidgets.org>
Sun, 2 Dec 2012 23:48:59 +0000 (23:48 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sun, 2 Dec 2012 23:48:59 +0000 (23:48 +0000)
Reuse the same event generation code for wxChoice in wxMSW, wxGTK and wxOSX
and also wxComboBox in wxMSW and wxGTK instead of duplicating it (incompletely
and so partially incorrectly in wxOSX case).

This is just a refactoring so no changes in behaviour.

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

include/wx/ctrlsub.h
src/common/ctrlsub.cpp
src/gtk/choice.cpp
src/msw/choice.cpp
src/msw/combobox.cpp
src/osx/choice_osx.cpp

index 76f8353220ac281b8f58bbdf0c4ee70c204de1e3..a55e124148507a59924ed8e654c58cf89d19198c 100644 (file)
@@ -441,6 +441,12 @@ public:
     // colour
     virtual bool ShouldInheritColours() const { return false; }
 
     // colour
     virtual bool ShouldInheritColours() const { return false; }
 
+
+    // Implementation only from now on.
+
+    // Generate an event of the given type for the selection change.
+    void SendSelectionChangedEvent(wxEventType eventType);
+
 protected:
     // fill in the client object or data field of the event as appropriate
     //
 protected:
     // fill in the client object or data field of the event as appropriate
     //
index 388af3e6ffb77501e18589e4ae79c5aed5418838..7f35cfa947b02a46c2bdd3f5281eaf56eeada0f7 100644 (file)
@@ -292,4 +292,19 @@ wxControlWithItemsBase::InitCommandEventWithItems(wxCommandEvent& event, int n)
     }
 }
 
     }
 }
 
+void wxControlWithItemsBase::SendSelectionChangedEvent(wxEventType eventType)
+{
+    const int n = GetSelection();
+    if ( n == wxNOT_FOUND )
+        return;
+
+    wxCommandEvent event(eventType, m_windowId);
+    event.SetInt(n);
+    event.SetEventObject(this);
+    event.SetString(GetStringSelection());
+    InitCommandEventWithItems(event, n);
+
+    HandleWindowEvent(event);
+}
+
 #endif // wxUSE_CONTROLS
 #endif // wxUSE_CONTROLS
index 7a6be363770b1f1ece913ac3590e83d2609fe245..ff73d1447488c4531a8e8224a1bb09a1ebf75916 100644 (file)
@@ -101,22 +101,6 @@ wxChoice::~wxChoice()
     delete m_strings;
 }
 
     delete m_strings;
 }
 
-void wxChoice::SendSelectionChangedEvent(wxEventType evt_type)
-{
-    if (GetSelection() == -1)
-        return;
-
-    wxCommandEvent event( evt_type, GetId() );
-
-    int n = GetSelection();
-    event.SetInt( n );
-    event.SetString( GetStringSelection() );
-    event.SetEventObject( this );
-    InitCommandEventWithItems( event, n );
-
-    HandleWindowEvent( event );
-}
-
 void wxChoice::GTKInsertComboBoxTextItem( unsigned int n, const wxString& text )
 {
 #ifdef __WXGTK3__
 void wxChoice::GTKInsertComboBoxTextItem( unsigned int n, const wxString& text )
 {
 #ifdef __WXGTK3__
index e7c17023c1c48bf52a43ffbc02ca669de32bebd3..b6670350f32a08fec9f141dbb45ca56669ef305d 100644 (file)
@@ -792,23 +792,10 @@ bool wxChoice::MSWCommand(WXUINT param, WXWORD WXUNUSED(id))
             // same thing anyhow)
             m_lastAcceptedSelection = wxID_NONE;
 
             // same thing anyhow)
             m_lastAcceptedSelection = wxID_NONE;
 
-            {
-                const int n = GetSelection();
-
-                wxCommandEvent event(wxEVT_COMMAND_CHOICE_SELECTED, m_windowId);
-                event.SetInt(n);
-                event.SetEventObject(this);
-
-                if ( n > -1 )
-                {
-                    event.SetString(GetStringSelection());
-                    InitCommandEventWithItems(event, n);
-                }
-
-                ProcessCommand(event);
-            }
+            SendSelectionChangedEvent(wxEVT_COMMAND_CHOICE_SELECTED);
             break;
 
             break;
 
+
         // don't handle CBN_SELENDCANCEL: just leave m_lastAcceptedSelection
         // valid and the selection will be undone in CBN_CLOSEUP above
 
         // don't handle CBN_SELENDCANCEL: just leave m_lastAcceptedSelection
         // valid and the selection will be undone in CBN_CLOSEUP above
 
index dc91cfb2524dd2d6af5b4a03fc6e84dcc263912a..d0b9836bafcb077eb970211ac46a20233ff7fce4 100644 (file)
@@ -311,16 +311,9 @@ bool wxComboBox::MSWCommand(WXUINT param, WXWORD id)
             // could get a wrong value when it calls our GetValue()
             ::SetWindowText(GetHwnd(), value.t_str());
 
             // could get a wrong value when it calls our GetValue()
             ::SetWindowText(GetHwnd(), value.t_str());
 
-            {
-                wxCommandEvent event(wxEVT_COMMAND_COMBOBOX_SELECTED, GetId());
-                event.SetInt(sel);
-                event.SetString(value);
-                InitCommandEventWithItems(event, sel);
-
-                ProcessCommand(event);
-            }
+            SendSelectionChangedEvent(wxEVT_COMMAND_COMBOBOX_SELECTED);
 
 
-            // fall through: for compability with wxGTK, also send the text
+            // fall through: for compatibility with wxGTK, also send the text
             // update event when the selection changes (this also seems more
             // logical as the text does change)
 
             // update event when the selection changes (this also seems more
             // logical as the text does change)
 
index 2bf2c102535b66afc4f913b092bd00ab78717d9d..d7ea4197fa66b5e3d7ba58cca5a545cdc8a278ee 100644 (file)
@@ -236,23 +236,7 @@ void * wxChoice::DoGetItemClientData(unsigned int n) const
 
 bool wxChoice::OSXHandleClicked( double WXUNUSED(timestampsec) )
 {
 
 bool wxChoice::OSXHandleClicked( double WXUNUSED(timestampsec) )
 {
-    wxCommandEvent event( wxEVT_COMMAND_CHOICE_SELECTED, m_windowId );
-
-    // actually n should be made sure by the os to be a valid selection, but ...
-    int n = GetSelection();
-    if ( n > -1 )
-    {
-        event.SetInt( n );
-        event.SetString( GetStringSelection() );
-        event.SetEventObject( this );
-
-        if ( HasClientObjectData() )
-            event.SetClientObject( GetClientObject( n ) );
-        else if ( HasClientUntypedData() )
-            event.SetClientData( GetClientData( n ) );
-
-        ProcessCommand( event );
-    }
+    SendSelectionChangedEvent(wxEVT_COMMAND_CHOICE_SELECTED);
 
     return true ;
 }
 
     return true ;
 }