From 6608fdab17beec0a485a96a6d03a1d071c2fba5e Mon Sep 17 00:00:00 2001 From: Robert Roebling Date: Tue, 2 Oct 2007 10:41:46 +0000 Subject: [PATCH] Document _ITEM_VALUE_CHANGED and implmement it equally as being sent from valueChanged and ItemChanged. Remove other _MODEL_XXX events. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@49013 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- docs/latex/wx/dataviewevent.tex | 29 +++++-------- docs/latex/wx/dataviewmodel.tex | 15 ++++++- include/wx/dataview.h | 16 +------- src/common/datavcmn.cpp | 7 +--- src/generic/datavgen.cpp | 34 ++++----------- src/gtk/dataview.cpp | 73 ++++++++++++++++++++++++--------- src/mac/carbon/dataview.cpp | 14 +------ 7 files changed, 90 insertions(+), 98 deletions(-) diff --git a/docs/latex/wx/dataviewevent.tex b/docs/latex/wx/dataviewevent.tex index be25f8564b..5a1973c844 100644 --- a/docs/latex/wx/dataviewevent.tex +++ b/docs/latex/wx/dataviewevent.tex @@ -35,37 +35,37 @@ wxDataViewEvent - the event class for the wxDataViewCtrl notifications \constfunc{wxEvent*}{Clone}{\void} +Used to clone the event. + \membersection{wxDataViewEvent::GetColumn}\label{wxdatavieweventgetcolumn} \constfunc{int}{GetColumn}{\void} +Returns the position of the column in the control or -1 +if no column field was set by the event emitter. + \membersection{wxDataViewEvent::GetDataViewColumn}\label{wxdatavieweventgetdataviewcolumn} \func{wxDataViewColumn*}{GetDataViewColumn}{\void} +Returns a pointer to the wxDataViewColumn from which +the event was emitted or NULL. + \membersection{wxDataViewEvent::GetModel}\label{wxdatavieweventgetmodel} \constfunc{wxDataViewModel*}{GetModel}{\void} - -\membersection{wxDataViewEvent::GetRow}\label{wxdatavieweventgetrow} - -\constfunc{int}{GetRow}{\void} +Returns the wxDataViewModel associated with the event. \membersection{wxDataViewEvent::GetValue}\label{wxdatavieweventgetvalue} \constfunc{const wxVariant\&}{GetValue}{\void} - -\membersection{wxDataViewEvent::IsEditCancelled}\label{wxdatavieweventiseditcancelled} - -\constfunc{bool}{IsEditCancelled}{\void} - -Was cell editing canceled? For wxEVT\_COMMAND\_DATAVIEW\_END\_CELL\_EDIT only. +Returns a reference to a value. \membersection{wxDataViewEvent::SetColumn}\label{wxdatavieweventsetcolumn} @@ -80,20 +80,11 @@ Was cell editing canceled? For wxEVT\_COMMAND\_DATAVIEW\_END\_CELL\_EDIT only. For wxEVT\_DATAVIEW\_COLUMN\_HEADER\_CLICKED only. -\membersection{wxDataViewEvent::SetEditCanceled}\label{wxdatavieweventseteditcanceled} - -\func{void}{SetEditCanceled}{\param{bool }{editCancelled}} - - \membersection{wxDataViewEvent::SetModel}\label{wxdatavieweventsetmodel} \func{void}{SetModel}{\param{wxDataViewModel* }{model}} -\membersection{wxDataViewEvent::SetRow}\label{wxdatavieweventsetrow} - -\func{void}{SetRow}{\param{int }{row}} - \membersection{wxDataViewEvent::SetValue}\label{wxdatavieweventsetvalue} diff --git a/docs/latex/wx/dataviewmodel.tex b/docs/latex/wx/dataviewmodel.tex index 92624d8501..efb577138c 100644 --- a/docs/latex/wx/dataviewmodel.tex +++ b/docs/latex/wx/dataviewmodel.tex @@ -179,6 +179,9 @@ to the data. Call this to inform the model that an item has changed. +This will eventually emit a wxEVT\_DATAVIEW\_ITEM\_VALUE\_CHANGED +event (in which the column fields will not be set) to the user. + \membersection{wxDataViewModel::ItemsAdded}\label{wxdataviewmodelitemsadded} \func{virtual bool}{ItemsAdded}{\param{const wxDataViewItem\& }{parent}, \param{const wxDataViewItemArray\& }{items}} @@ -192,6 +195,9 @@ to the data. Call this to inform the model that several items have changed. +This will eventually emit wxEVT\_DATAVIEW\_ITEM\_VALUE\_CHANGED +events (in which the column fields will not be set) to the user. + \membersection{wxDataViewModel::ItemsDeleted}\label{wxdataviewmodelitemsdeleted} \func{virtual bool}{ItemsDeleted}{\param{const wxDataViewItem\& }{parent}, \param{const wxDataViewItemArray\& }{items}} @@ -225,6 +231,11 @@ has to be called! \func{virtual bool}{ValueChanged}{\param{const wxDataViewItem\& }{item}, \param{unsigned int }{col}} -Call this to inform this model that a value in -the model has been changed. +Call this to inform this model that a value in the model has +been changed. This is also called from wxDataViewCtrl's +internal editing code, e.g. when editing a text field +in the control. + +This will eventually emit a wxEVT\_DATAVIEW\_ITEM\_VALUE\_CHANGED +event to the user. diff --git a/include/wx/dataview.h b/include/wx/dataview.h index 8aace083f9..261bb63cc7 100644 --- a/include/wx/dataview.h +++ b/include/wx/dataview.h @@ -615,17 +615,11 @@ BEGIN_DECLARE_EVENT_TYPES() DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_EXPANDING, -1) DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_STARTED, -1) DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_DONE, -1) + DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_ITEM_VALUE_CHANGED, -1) DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_CLICK, -1) DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_RIGHT_CLICK, -1) DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_COLUMN_SORTED, -1) - - // notifications from the model to the control - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_MODEL_ITEM_ADDED, -1) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_MODEL_ITEM_DELETED, -1) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_MODEL_ITEM_CHANGED, -1) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_MODEL_VALUE_CHANGED, -1) - DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_ADV, wxEVT_COMMAND_DATAVIEW_MODEL_CLEARED, -1) END_DECLARE_EVENT_TYPES() typedef void (wxEvtHandler::*wxDataViewEventFunction)(wxDataViewEvent&); @@ -645,18 +639,12 @@ typedef void (wxEvtHandler::*wxDataViewEventFunction)(wxDataViewEvent&); #define EVT_DATAVIEW_ITEM_EXPANDED(id, fn) wx__DECLARE_DATAVIEWEVT(ITEM_EXPANDED, id, fn) #define EVT_DATAVIEW_ITEM_EDITING_STARTED(id, fn) wx__DECLARE_DATAVIEWEVT(ITEM_EDITING_STARTED, id, fn) #define EVT_DATAVIEW_ITEM_EDITING_DONE(id, fn) wx__DECLARE_DATAVIEWEVT(ITEM_EDITING_DONE, id, fn) +#define EVT_DATAVIEW_ITEM_VALUE_CHANGED(id, fn) wx__DECLARE_DATAVIEWEVT(ITEM_VALUE_CHANGED, id, fn) #define EVT_DATAVIEW_COLUMN_HEADER_CLICK(id, fn) wx__DECLARE_DATAVIEWEVT(COLUMN_HEADER_CLICK, id, fn) #define EVT_DATAVIEW_COLUMN_HEADER_RIGHT_CLICKED(id, fn) wx__DECLARE_DATAVIEWEVT(COLUMN_HEADER_RIGHT_CLICK, id, fn) #define EVT_DATAVIEW_COLUMN_SORTED(id, fn) wx__DECLARE_DATAVIEWEVT(COLUMN_SORTED, id, fn) -#define EVT_DATAVIEW_MODEL_ITEM_ADDED(id, fn) wx__DECLARE_DATAVIEWEVT(MODEL_ITEM_ADDED, id, fn) -#define EVT_DATAVIEW_MODEL_ITEM_DELETED(id, fn) wx__DECLARE_DATAVIEWEVT(MODEL_ITEM_DELETED, id, fn) -#define EVT_DATAVIEW_MODEL_ITEM_CHANGED(id, fn) wx__DECLARE_DATAVIEWEVT(MODEL_ITEM_CHANGED, id, fn) -#define EVT_DATAVIEW_MODEL_VALUE_CHANGED(id, fn) wx__DECLARE_DATAVIEWEVT(MODEL_VALUE_CHANGED, id, fn) -#define EVT_DATAVIEW_MODEL_CLEARED(id, fn) wx__DECLARE_DATAVIEWEVT(MODEL_CLEARED, id, fn) - - #if defined(wxUSE_GENERICDATAVIEWCTRL) #include "wx/generic/dataview.h" #elif defined(__WXGTK20__) diff --git a/src/common/datavcmn.cpp b/src/common/datavcmn.cpp index a9b651bb8e..6d99b9684f 100644 --- a/src/common/datavcmn.cpp +++ b/src/common/datavcmn.cpp @@ -824,16 +824,11 @@ DEFINE_EVENT_TYPE(wxEVT_COMMAND_DATAVIEW_ITEM_EXPANDING) DEFINE_EVENT_TYPE(wxEVT_COMMAND_DATAVIEW_ITEM_EXPANDED) DEFINE_EVENT_TYPE(wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_STARTED) DEFINE_EVENT_TYPE(wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_DONE) +DEFINE_EVENT_TYPE(wxEVT_COMMAND_DATAVIEW_ITEM_VALUE_CHANGED) DEFINE_EVENT_TYPE(wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_CLICK) DEFINE_EVENT_TYPE(wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_RIGHT_CLICK) DEFINE_EVENT_TYPE(wxEVT_COMMAND_DATAVIEW_COLUMN_SORTED) -DEFINE_EVENT_TYPE(wxEVT_COMMAND_DATAVIEW_MODEL_ITEM_ADDED) -DEFINE_EVENT_TYPE(wxEVT_COMMAND_DATAVIEW_MODEL_ITEM_DELETED) -DEFINE_EVENT_TYPE(wxEVT_COMMAND_DATAVIEW_MODEL_ITEM_CHANGED) -DEFINE_EVENT_TYPE(wxEVT_COMMAND_DATAVIEW_MODEL_VALUE_CHANGED) -DEFINE_EVENT_TYPE(wxEVT_COMMAND_DATAVIEW_MODEL_CLEARED) - #endif diff --git a/src/generic/datavgen.cpp b/src/generic/datavgen.cpp index 6d28209443..0f5094e310 100644 --- a/src/generic/datavgen.cpp +++ b/src/generic/datavgen.cpp @@ -416,7 +416,6 @@ public: virtual ~wxDataViewMainWindow(); // notifications from wxDataViewModel - void SendModelEvent( wxEventType type, const wxDataViewItem & item); bool ItemAdded( const wxDataViewItem &parent, const wxDataViewItem &item ); bool ItemDeleted( const wxDataViewItem &parent, const wxDataViewItem &item ); bool ItemChanged( const wxDataViewItem &item ); @@ -2013,25 +2012,12 @@ bool Walker( wxDataViewTreeNode * node, DoJob & func ) return false; } -void wxDataViewMainWindow::SendModelEvent( wxEventType type, const wxDataViewItem & item ) -{ - wxWindow *parent = GetParent(); - wxDataViewEvent le(type, parent->GetId()); - - le.SetEventObject(parent); - le.SetModel(GetOwner()->GetModel()); - le.SetItem( item ); - - parent->GetEventHandler()->ProcessEvent(le); -} - bool wxDataViewMainWindow::ItemAdded(const wxDataViewItem & parent, const wxDataViewItem & item) { SortPrepare(); wxDataViewTreeNode * node; node = FindNode(parent); - SendModelEvent(wxEVT_COMMAND_DATAVIEW_MODEL_ITEM_ADDED, item ); if( node == NULL ) return false; @@ -2118,8 +2104,6 @@ bool wxDataViewMainWindow::ItemDeleted(const wxDataViewItem& parent, UpdateDisplay(); - SendModelEvent(wxEVT_COMMAND_DATAVIEW_MODEL_ITEM_DELETED, item); - return true; } @@ -2128,8 +2112,14 @@ bool wxDataViewMainWindow::ItemChanged(const wxDataViewItem & item) SortPrepare(); g_model->Resort(); - SendModelEvent(wxEVT_COMMAND_DATAVIEW_MODEL_ITEM_CHANGED,item); - + //Send event + wxWindow *parent = GetParent(); + wxDataViewEvent le(wxEVT_COMMAND_DATAVIEW_ITEM_VALUE_CHANGED, parent->GetId()); + le.SetEventObject(parent); + le.SetModel(GetOwner()->GetModel()); + le.SetItem(item); + parent->GetEventHandler()->ProcessEvent(le); + return true; } @@ -2149,7 +2139,7 @@ bool wxDataViewMainWindow::ValueChanged( const wxDataViewItem & item, unsigned i //Send event wxWindow *parent = GetParent(); - wxDataViewEvent le(wxEVT_COMMAND_DATAVIEW_MODEL_VALUE_CHANGED, parent->GetId()); + wxDataViewEvent le(wxEVT_COMMAND_DATAVIEW_ITEM_VALUE_CHANGED, parent->GetId()); le.SetEventObject(parent); le.SetModel(GetOwner()->GetModel()); le.SetItem(item); @@ -2167,12 +2157,6 @@ bool wxDataViewMainWindow::Cleared() DestroyTree(); UpdateDisplay(); - wxWindow *parent = GetParent(); - wxDataViewEvent le(wxEVT_COMMAND_DATAVIEW_MODEL_CLEARED, parent->GetId()); - le.SetEventObject(parent); - le.SetModel(GetOwner()->GetModel()); - parent->GetEventHandler()->ProcessEvent(le); - return true; } diff --git a/src/gtk/dataview.cpp b/src/gtk/dataview.cpp index a5c67b1bef..7a22e83dfd 100644 --- a/src/gtk/dataview.cpp +++ b/src/gtk/dataview.cpp @@ -2435,13 +2435,7 @@ bool wxDataViewCtrlInternal::ItemAdded( const wxDataViewItem &parent, const wxDa parent_node->AddNode( new wxGtkTreeModelNode( parent_node, item, this ) ); else parent_node->AddLeave( item.GetID() ); - - wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_MODEL_ITEM_ADDED, m_owner->GetId() ); - event.SetEventObject( m_owner ); - event.SetModel( m_owner->GetModel() ); - event.SetItem( item ); - m_owner->GetEventHandler()->ProcessEvent( event ); - + return true; } @@ -2450,18 +2444,12 @@ bool wxDataViewCtrlInternal::ItemDeleted( const wxDataViewItem &parent, const wx wxGtkTreeModelNode *parent_node = FindNode( parent ); parent_node->DeleteChild( item.GetID() ); - wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_MODEL_ITEM_DELETED, m_owner->GetId() ); - event.SetEventObject( m_owner ); - event.SetModel( m_owner->GetModel() ); - event.SetItem( item ); - m_owner->GetEventHandler()->ProcessEvent( event ); - return true; } bool wxDataViewCtrlInternal::ItemChanged( const wxDataViewItem &item ) { - wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_MODEL_ITEM_CHANGED, m_owner->GetId() ); + wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_ITEM_VALUE_CHANGED, m_owner->GetId() ); event.SetEventObject( m_owner ); event.SetModel( m_owner->GetModel() ); event.SetItem( item ); @@ -2472,10 +2460,11 @@ bool wxDataViewCtrlInternal::ItemChanged( const wxDataViewItem &item ) bool wxDataViewCtrlInternal::ValueChanged( const wxDataViewItem &item, unsigned int col ) { - wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_MODEL_VALUE_CHANGED, m_owner->GetId() ); + wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_ITEM_VALUE_CHANGED, m_owner->GetId() ); event.SetEventObject( m_owner ); event.SetModel( m_owner->GetModel() ); event.SetColumn( col ); + event.SetDataViewColumn( GetOwner()->GetColumn(col) ); event.SetItem( item ); m_owner->GetEventHandler()->ProcessEvent( event ); @@ -2484,11 +2473,6 @@ bool wxDataViewCtrlInternal::ValueChanged( const wxDataViewItem &item, unsigned bool wxDataViewCtrlInternal::Cleared() { - wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_MODEL_CLEARED, m_owner->GetId() ); - event.SetEventObject( m_owner ); - event.SetModel( m_owner->GetModel() ); - m_owner->GetEventHandler()->ProcessEvent( event ); - return true; } @@ -2932,6 +2916,52 @@ void gtk_dataviewctrl_size_callback( GtkWidget *WXUNUSED(widget), } +//----------------------------------------------------------------------------- +// "motion_notify_event" +//----------------------------------------------------------------------------- + +static gboolean +gtk_dataview_motion_notify_callback( GtkWidget *widget, + GdkEventMotion *gdk_event, + wxDataViewCtrl *dv ) +{ + if (gdk_event->is_hint) + { + int x = 0; + int y = 0; + GdkModifierType state; + gdk_window_get_pointer(gdk_event->window, &x, &y, &state); + gdk_event->x = x; + gdk_event->y = y; + } + + GtkTreePath *path = NULL; + GtkTreeViewColumn *column = NULL; + gint cell_x = 0; + gint cell_y = 0; + if (gtk_tree_view_get_path_at_pos( + GTK_TREE_VIEW(dv->GtkGetTreeView()), + (int) gdk_event->x, (int) gdk_event->y, + &path, + &column, + &cell_x, + &cell_y)) + { + if (path) + { + GtkTreeIter iter; + dv->GtkGetInternal()->get_iter( &iter, path ); + + // wxPrintf( "mouse %d %d\n", (int) gdk_event->x, (int) gdk_event->y ); + + gtk_tree_path_free( path ); + } + } + + + return FALSE; +} + IMPLEMENT_DYNAMIC_CLASS(wxDataViewCtrl, wxDataViewCtrlBase) @@ -3036,6 +3066,9 @@ bool wxDataViewCtrl::Create(wxWindow *parent, wxWindowID id, g_signal_connect_after (m_treeview, "row-expanded", G_CALLBACK (wxdataview_row_expanded_callback), this); + g_signal_connect (m_treeview, "motion_notify_event", + G_CALLBACK (gtk_dataview_motion_notify_callback), this); + return true; } diff --git a/src/mac/carbon/dataview.cpp b/src/mac/carbon/dataview.cpp index c21aa0f8a3..1bb46b5f1f 100644 --- a/src/mac/carbon/dataview.cpp +++ b/src/mac/carbon/dataview.cpp @@ -131,7 +131,7 @@ public: wxDataViewCtrl* dataViewCtrlPtr(dynamic_cast(this->m_dataViewControlPtr->GetPeer())); // sent the equivalent wxWidget event: - wxDataViewEvent dataViewEvent(wxEVT_COMMAND_DATAVIEW_MODEL_ITEM_CHANGED,dataViewCtrlPtr->GetId()); // variable defintion + wxDataViewEvent dataViewEvent(wxEVT_COMMAND_DATAVIEW_VALUE_ITEM_CHANGED,dataViewCtrlPtr->GetId()); // variable defintion dataViewEvent.SetEventObject(dataViewCtrlPtr); dataViewEvent.SetItem(item); @@ -183,7 +183,7 @@ public: (this->m_dataViewControlPtr->UpdateItems(parentID,1,&itemID,dataViewCtrlPtr->GetColumn(col)->GetPropertyID(),propertyID) == noErr)) { // variable definition and initialization: - wxDataViewEvent dataViewEvent(wxEVT_COMMAND_DATAVIEW_MODEL_VALUE_CHANGED,dataViewCtrlPtr->GetId()); + wxDataViewEvent dataViewEvent(wxEVT_COMMAND_DATAVIEW_ITEM_VALUE_CHANGED,dataViewCtrlPtr->GetId()); dataViewEvent.SetEventObject(dataViewCtrlPtr); dataViewEvent.SetColumn(col); @@ -200,17 +200,7 @@ public: virtual bool Cleared(void) { if (this->m_dataViewControlPtr->RemoveItems() == noErr) - { - // variable definitions and initializations: - wxDataViewCtrl* dataViewCtrlPtr(dynamic_cast(this->m_dataViewControlPtr->GetPeer())); - wxDataViewEvent dataViewEvent (wxEVT_COMMAND_DATAVIEW_MODEL_CLEARED,dataViewCtrlPtr->GetId()); - - dataViewEvent.SetEventObject(dataViewCtrlPtr); - // send the equivalent wxWidget event: - dataViewCtrlPtr->GetEventHandler()->ProcessEvent(dataViewEvent); - // done return true; - } /* if */ else return false; } /* Cleared(void) */ -- 2.45.2