]> git.saurik.com Git - wxWidgets.git/commitdiff
Add wxDataViewModel::ChangeValue() and use it in wxDVC implementation.
authorVadim Zeitlin <vadim@wxwidgets.org>
Fri, 23 Oct 2009 23:49:16 +0000 (23:49 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Fri, 23 Oct 2009 23:49:16 +0000 (23:49 +0000)
ChangeValue() is a trivial wrapper calling both SetValue() and ValueChanged().
It allows to replace many calls to SetValue() immediately followed by
ValueChanged() with a single function call which is significantly shorter and
less error-prone (e.g. most of the existing code didn't test SetValue() return
code at all).

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

include/wx/dataview.h
interface/wx/dataview.h
src/common/datavcmn.cpp
src/generic/datavgen.cpp
src/gtk/dataview.cpp
src/osx/carbon/dataview.cpp
src/osx/cocoa/dataview.mm

index ef5cc45dbd671c0bec97e93ea5d9711c562a2896..f02ad00a19b11e1ba454f13cd1e405372f9dee5b 100644 (file)
@@ -186,9 +186,20 @@ public:
     virtual void GetValue( wxVariant &variant,
                            const wxDataViewItem &item, unsigned int col ) const = 0;
 
     virtual void GetValue( wxVariant &variant,
                            const wxDataViewItem &item, unsigned int col ) const = 0;
 
-    // set value, call ValueChanged() afterwards!
-    virtual bool SetValue( const wxVariant &variant,
-                           const wxDataViewItem &item, unsigned int col ) = 0;
+    // usually ValueChanged() should be called after changing the value in the
+    // model to update the control, ChangeValue() does it on its own while
+    // SetValue() does not -- so while you will override SetValue(), you should
+    // be usually calling ChangeValue()
+    virtual bool SetValue(const wxVariant &variant,
+                          const wxDataViewItem &item,
+                          unsigned int col) = 0;
+
+    bool ChangeValue(const wxVariant& variant,
+                     const wxDataViewItem& item,
+                     unsigned int col)
+    {
+        return SetValue(variant, item, col) && ValueChanged(item, col);
+    }
 
     // Get text attribute, return false of default attributes should be used
     virtual bool GetAttr( const wxDataViewItem &WXUNUSED(item), unsigned int WXUNUSED(col), wxDataViewItemAttr &WXUNUSED(attr) )
 
     // Get text attribute, return false of default attributes should be used
     virtual bool GetAttr( const wxDataViewItem &WXUNUSED(item), unsigned int WXUNUSED(col), wxDataViewItemAttr &WXUNUSED(attr) )
index a76c28ae673f3bd45f24fb390293e4a4fa55b848..debcecdb438682052928b8cf26b81f07f5d6b83f 100644 (file)
@@ -23,7 +23,7 @@
     Since you will usually also allow the wxDataViewCtrl to change your data
     through its graphical interface, you will also have to override
     wxDataViewModel::SetValue which the wxDataViewCtrl will call when a change
     Since you will usually also allow the wxDataViewCtrl to change your data
     through its graphical interface, you will also have to override
     wxDataViewModel::SetValue which the wxDataViewCtrl will call when a change
-    to some data has been commited.
+    to some data has been committed.
 
     wxDataViewModel (as indeed the entire wxDataViewCtrl code) is using wxVariant
     to store data and its type in a generic way. wxVariant can be extended to contain
 
     wxDataViewModel (as indeed the entire wxDataViewCtrl code) is using wxVariant
     to store data and its type in a generic way. wxVariant can be extended to contain
@@ -91,6 +91,28 @@ public:
     */
     void AddNotifier(wxDataViewModelNotifier* notifier);
 
     */
     void AddNotifier(wxDataViewModelNotifier* notifier);
 
+    /**
+        Change the value of the given item and update the control to reflect
+        it.
+
+        This function simply calls SetValue() and, if it succeeded,
+        ValueChanged().
+
+        @since 2.9.1
+
+        @param variable
+            The new value.
+        @param item
+            The item (row) to update.
+        @param col
+            The column to update.
+        @return
+            @true if both SetValue() and ValueChanged() returned @true.
+     */
+    bool ChangeValue(const wxVariant& variant,
+                     const wxDataViewItem& item,
+                     unsigned int col);
+
     /**
         Called to inform the model that all data has been cleared.
         The control will reread the data from the model again.
     /**
         Called to inform the model that all data has been cleared.
         The control will reread the data from the model again.
@@ -229,12 +251,17 @@ public:
 
     /**
         This gets called in order to set a value in the data model.
 
     /**
         This gets called in order to set a value in the data model.
+
         The most common scenario is that the wxDataViewCtrl calls this method
         after the user changed some data in the view.
 
         The most common scenario is that the wxDataViewCtrl calls this method
         after the user changed some data in the view.
 
-        Afterwards ValueChanged() has to be called!
+        This is the function you need to override in your derived class but if
+        you want to call it, ChangeValue() is usually more convenient as
+        otherwise you need to manually call ValueChanged() to update the
+        control itself.
     */
     */
-    virtual bool SetValue(const wxVariant& variant, const wxDataViewItem& item,
+    virtual bool SetValue(const wxVariant& variant,
+                          const wxDataViewItem& item,
                           unsigned int col) = 0;
 
     /**
                           unsigned int col) = 0;
 
     /**
index fd3ccde0b82fdc30851e21e9efc05e62351166c1..e37e6d38c7d105a7224cafeb971a9633d39686d4 100644 (file)
@@ -751,8 +751,7 @@ bool wxDataViewRendererBase::FinishEditing()
         return false;
 
     unsigned int col = GetOwner()->GetModelColumn();
         return false;
 
     unsigned int col = GetOwner()->GetModelColumn();
-    dv_ctrl->GetModel()->SetValue( value, m_item, col );
-    dv_ctrl->GetModel()->ValueChanged( m_item, col );
+    dv_ctrl->GetModel()->ChangeValue(value, m_item, col);
 
     // Now we should send Editing Done event
     wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_DONE, dv_ctrl->GetId() );
 
     // Now we should send Editing Done event
     wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_DONE, dv_ctrl->GetId() );
index 1eeff556add8542d14ee731d34e542a971cf091e..74aba29bd9a6fb895dd96f721ce2c0ebf61b5fb7 100644 (file)
@@ -933,10 +933,7 @@ bool wxDataViewToggleRenderer::Activate( wxRect WXUNUSED(cell),
                                         wxDataViewModel *model,
                                         const wxDataViewItem & item, unsigned int col)
 {
                                         wxDataViewModel *model,
                                         const wxDataViewItem & item, unsigned int col)
 {
-    bool value = !m_toggle;
-    wxVariant variant = value;
-    model->SetValue( variant, item, col);
-    model->ValueChanged( item, col );
+    model->ChangeValue(!m_toggle, item, col);
     return true;
 }
 
     return true;
 }
 
@@ -1051,10 +1048,7 @@ END_EVENT_TABLE()
 
 void wxDataViewDateRendererPopupTransient::OnCalendar( wxCalendarEvent &event )
 {
 
 void wxDataViewDateRendererPopupTransient::OnCalendar( wxCalendarEvent &event )
 {
-    wxDateTime date = event.GetDate();
-    wxVariant value = date;
-    m_model->SetValue( value, m_item, m_col );
-    m_model->ValueChanged( m_item, m_col );
+    m_model->ChangeValue( event.GetDate(), m_item, m_col );
     DismissAndNotify();
 }
 
     DismissAndNotify();
 }
 
index 3f8eb008c11fb8696b7d2b678339acd982c0c2ea..62fbd52fe2587436ee93ad85f7912916d04229d6 100644 (file)
@@ -1742,8 +1742,7 @@ wxDataViewRenderer::GtkOnCellChanged(const wxVariant& value,
                                      unsigned col)
 {
     wxDataViewModel *model = GetOwner()->GetOwner()->GetModel();
                                      unsigned col)
 {
     wxDataViewModel *model = GetOwner()->GetOwner()->GetModel();
-    model->SetValue( value, item, col );
-    model->ValueChanged( item, col );
+    model->ChangeValue( value, item, col );
 }
 
 // ---------------------------------------------------------
 }
 
 // ---------------------------------------------------------
@@ -1933,8 +1932,7 @@ static void wxGtkToggleRendererToggledCallback( GtkCellRendererToggle *renderer,
 
     unsigned int model_col = cell->GetOwner()->GetModelColumn();
 
 
     unsigned int model_col = cell->GetOwner()->GetModelColumn();
 
-    model->SetValue( value, item, model_col );
-    model->ValueChanged( item, model_col );
+    model->ChangeValue( value, item, model_col );
 }
 
 IMPLEMENT_CLASS(wxDataViewToggleRenderer, wxDataViewRenderer)
 }
 
 IMPLEMENT_CLASS(wxDataViewToggleRenderer, wxDataViewRenderer)
@@ -2371,10 +2369,7 @@ END_EVENT_TABLE()
 
 void wxDataViewDateRendererPopupTransient::OnCalendar( wxCalendarEvent &event )
 {
 
 void wxDataViewDateRendererPopupTransient::OnCalendar( wxCalendarEvent &event )
 {
-    wxDateTime date = event.GetDate();
-    wxVariant value = date;
-    m_model->SetValue( value, m_item, m_col );
-    m_model->ValueChanged( m_item, m_col );
+    m_model->ChangeValue( event.GetDate(), m_item, m_col );
     DismissAndNotify();
 }
 
     DismissAndNotify();
 }
 
index 38f94678c90de7cc61f7ead5f7abb5203681f6d9..30d3d20ef1c0d60cafd22c2f48586f051cba3af5 100644 (file)
@@ -1318,8 +1318,7 @@ OSStatus wxMacDataViewDataBrowserListViewControl::DataBrowserGetSetItemDataProc(
                // variable definition and initialization:
                 wxVariant modifiedData(true);
 
                // variable definition and initialization:
                 wxVariant modifiedData(true);
 
-                if (dataViewCtrlPtr->GetModel()->SetValue(modifiedData, dvItem, col) &&
-                    dataViewCtrlPtr->GetModel()->ValueChanged(dvItem, col))
+                if (dataViewCtrlPtr->GetModel()->ChangeValue(modifiedData, dvItem, col))
                     return noErr;
                 else
                     return errDataBrowserInvalidPropertyData;
                     return noErr;
                 else
                     return errDataBrowserInvalidPropertyData;
@@ -1329,8 +1328,7 @@ OSStatus wxMacDataViewDataBrowserListViewControl::DataBrowserGetSetItemDataProc(
                // variable definition and initialization:
                 wxVariant modifiedData(false);
 
                // variable definition and initialization:
                 wxVariant modifiedData(false);
 
-                if (dataViewCtrlPtr->GetModel()->SetValue(modifiedData, dvItem, col) &&
-                    dataViewCtrlPtr->GetModel()->ValueChanged(dvItem, col))
+                if (dataViewCtrlPtr->GetModel()->ChangeValue(modifiedData, dvItem, col))
                     return noErr;
                 else
                     return errDataBrowserInvalidPropertyData;
                     return noErr;
                 else
                     return errDataBrowserInvalidPropertyData;
@@ -1357,8 +1355,7 @@ OSStatus wxMacDataViewDataBrowserListViewControl::DataBrowserGetSetItemDataProc(
 #endif
               wxVariant           modifiedData(modifiedString.AsString());
 
 #endif
               wxVariant           modifiedData(modifiedString.AsString());
 
-                if (dataViewCtrlPtr->GetModel()->SetValue(modifiedData, dvItem, col) &&
-                    dataViewCtrlPtr->GetModel()->ValueChanged(dvItem, col))
+                if (dataViewCtrlPtr->GetModel()->ChangeValue(modifiedData, dvItem, col))
                     return noErr;
                 else
                     return errDataBrowserInvalidPropertyData;
                     return noErr;
                 else
                     return errDataBrowserInvalidPropertyData;
index 243ac2515ccc8b12a73395cd20ccd0b9ddc6bc68..1d63bdf4fa5a2602077295950d4f3eaccf83384e 100644 (file)
@@ -2236,8 +2236,7 @@ void wxDataViewRenderer::OSXOnCellChanged(const wxVariant& value,
                                           unsigned col)
 {
     wxDataViewModel *model = GetOwner()->GetOwner()->GetModel();
                                           unsigned col)
 {
     wxDataViewModel *model = GetOwner()->GetOwner()->GetModel();
-    model->SetValue(value, item, col);
-    model->ValueChanged(item, col);
+    model->ChangeValue(value, item, col);
 }
 
 IMPLEMENT_ABSTRACT_CLASS(wxDataViewRenderer,wxDataViewRendererBase)
 }
 
 IMPLEMENT_ABSTRACT_CLASS(wxDataViewRenderer,wxDataViewRendererBase)