]> git.saurik.com Git - wxWidgets.git/commitdiff
Send events from port-specific code, not common code, tested in samples
authorRobert Roebling <robert@roebling.de>
Tue, 24 Jul 2007 09:15:04 +0000 (09:15 +0000)
committerRobert Roebling <robert@roebling.de>
Tue, 24 Jul 2007 09:15:04 +0000 (09:15 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@47694 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/dataview.h
samples/dataview/dataview.cpp
src/common/datavcmn.cpp
src/gtk/dataview.cpp

index 911727ca2464f6cb8733613bfd336be1b47049a1..1c5f4d0b97bd1ae09e0327db032a89d14bbf9719 100644 (file)
@@ -576,7 +576,7 @@ typedef void (wxEvtHandler::*wxDataViewEventFunction)(wxDataViewEvent&);
 #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_APPENDED, 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)
index 090bd0c47091bf8f01f7e473864d85df58cf5071..7d958749da42f972a96d7eb075bf0061b5e968a6 100644 (file)
@@ -412,6 +412,10 @@ public:
     void OnPrependList(wxCommandEvent& event);
     void OnDeleteList(wxCommandEvent& event);
 
+    void OnValueChanged( wxDataViewEvent &event );
+    void OnItemAdded( wxDataViewEvent &event );
+    void OnItemDeleted( wxDataViewEvent &event );
+
 private:
     wxDataViewCtrl* m_musicCtrl;
     wxObjectDataPtr<MyMusicModel> m_music_model;
@@ -461,6 +465,8 @@ enum
     ID_ABOUT = wxID_ABOUT,
     ID_EXIT = wxID_EXIT,
     
+    ID_MUSIC_CTRL       = 50,
+    
     ID_ADD_MOZART       = 100,
     ID_DELETE_MUSIC     = 101,
      
@@ -475,11 +481,16 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame)
     EVT_BUTTON( ID_DELETE_MUSIC, MyFrame::OnDeleteMusic )
     EVT_BUTTON( ID_PREPEND_LIST, MyFrame::OnPrependList )
     EVT_BUTTON( ID_DELETE_LIST, MyFrame::OnDeleteList )
+    EVT_DATAVIEW_MODEL_ITEM_ADDED( ID_MUSIC_CTRL, MyFrame::OnItemAdded )
+    EVT_DATAVIEW_MODEL_ITEM_DELETED( ID_MUSIC_CTRL, MyFrame::OnItemDeleted )
+    EVT_DATAVIEW_MODEL_VALUE_CHANGED( ID_MUSIC_CTRL, MyFrame::OnValueChanged )
 END_EVENT_TABLE()
 
 MyFrame::MyFrame(wxFrame *frame, wxChar *title, int x, int y, int w, int h):
   wxFrame(frame, wxID_ANY, title, wxPoint(x, y), wxSize(w, h))
 {
+    m_log = NULL;
+
     SetIcon(wxICON(sample));
 
     // build the menus:
@@ -501,7 +512,7 @@ MyFrame::MyFrame(wxFrame *frame, wxChar *title, int x, int y, int w, int h):
 
     // MyMusic
 
-    m_musicCtrl = new wxDataViewCtrl( this, wxID_ANY, wxDefaultPosition,
+    m_musicCtrl = new wxDataViewCtrl( this, ID_MUSIC_CTRL, wxDefaultPosition,
                                     wxDefaultSize );
 
     m_music_model = new MyMusicModel;
@@ -581,6 +592,30 @@ void MyFrame::OnDeleteList( wxCommandEvent& WXUNUSED(event) )
         m_list_model->DeleteItem( item );
 }
 
+void MyFrame::OnItemAdded( wxDataViewEvent &event )
+{
+    if (!m_log)
+        return;
+        
+    m_log->AppendText( "EVT_DATAVIEW_MODEL_ITEM_ADDED\n" );
+}
+
+void MyFrame::OnItemDeleted( wxDataViewEvent &event )
+{
+    if (!m_log)
+        return;
+        
+    m_log->AppendText( "EVT_DATAVIEW_MODEL_ITEM_DELETED\n" );
+}
+
+void MyFrame::OnValueChanged( wxDataViewEvent &event )
+{
+    if (!m_log)
+        return;
+        
+    m_log->AppendText( "EVT_DATAVIEW_MODEL_VALUE_CHANGED\n" );
+}
+
 void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event) )
 {
     wxAboutDialogInfo info;
index 11b4e3af1e1eaa8b86a3f3331f7a86bfdfd26875..89d8f183d59938ac66f03769eba310e291fb461e 100644 (file)
@@ -528,42 +528,6 @@ void wxDataViewColumnBase::SetFlags(int flags)
     SetHidden((flags & wxDATAVIEW_COL_HIDDEN) != 0);
 }
 
-// ---------------------------------------------------------
-// wxDataViewEventModelNotifier
-// ---------------------------------------------------------
-
-class WXDLLIMPEXP_ADV wxDataViewEventModelNotifier: public wxDataViewModelNotifier
-{
-public:
-    wxDataViewEventModelNotifier( wxDataViewCtrl *ctrl ) { m_ctrl = ctrl; }
-    
-    bool SendEvent( wxEventType event_type, const wxDataViewItem &item, unsigned int col = 0 )
-    {
-        wxDataViewEvent event( event_type, m_ctrl->GetId() );
-        event.SetEventObject( m_ctrl );
-        event.SetModel( m_ctrl->GetModel() );
-        event.SetItem( item );
-        event.SetColumn( col );
-        m_ctrl->GetEventHandler()->ProcessEvent( event );
-        return true;
-    }
-
-    virtual bool ItemAdded( const wxDataViewItem &parent, const wxDataViewItem &item )  
-        { return SendEvent( wxEVT_COMMAND_DATAVIEW_MODEL_ITEM_ADDED, item ); }
-    virtual bool ItemDeleted( const wxDataViewItem &item )
-        { return SendEvent( wxEVT_COMMAND_DATAVIEW_MODEL_ITEM_DELETED, item ); }
-    virtual bool ItemChanged( const wxDataViewItem &item )
-        { return SendEvent( wxEVT_COMMAND_DATAVIEW_MODEL_ITEM_CHANGED, item ); }
-    virtual bool ValueChanged( const wxDataViewItem &item, unsigned int col )
-        { return SendEvent( wxEVT_COMMAND_DATAVIEW_MODEL_VALUE_CHANGED, item, col ); }
-    virtual bool Cleared()      
-        { return SendEvent( wxEVT_COMMAND_DATAVIEW_MODEL_CLEARED, wxDataViewItem(0) ); }
-
-private:
-    wxDataViewCtrl *m_ctrl;
-};
-
-
 // ---------------------------------------------------------
 // wxDataViewCtrlBase
 // ---------------------------------------------------------
@@ -574,7 +538,6 @@ wxDataViewCtrlBase::wxDataViewCtrlBase()
 {
     m_model = NULL;
     m_cols.DeleteContents( true );
-    m_eventNotifier = NULL;
     m_expander_column = 0;
     m_indent = 8;
 }
@@ -588,10 +551,6 @@ wxDataViewCtrlBase::~wxDataViewCtrlBase()
 
     if (m_model)
     {
-        if (m_eventNotifier)
-            m_model->RemoveNotifier( m_eventNotifier );
-        m_eventNotifier = NULL;
-    
         m_model->DecRef();
         m_model = NULL;
     }
@@ -601,10 +560,6 @@ bool wxDataViewCtrlBase::AssociateModel( wxDataViewModel *model )
 {
     if (m_model)
     {
-        if (m_eventNotifier)
-            m_model->RemoveNotifier( m_eventNotifier );
-        m_eventNotifier = NULL;
-        
         m_model->DecRef();   // discard old model, if any
     }
 
@@ -613,8 +568,6 @@ bool wxDataViewCtrlBase::AssociateModel( wxDataViewModel *model )
     if (m_model)
     {
         m_model->IncRef(); 
-        m_eventNotifier = new wxDataViewEventModelNotifier( (wxDataViewCtrl*) this );
-        m_model->AddNotifier( m_eventNotifier );
     }
 
     return true;
index 41ed1b24e8335c0187ac19ff9afe7f9d651b81c9..926d1e464589540571f99761a77ab3c658e6be91 100644 (file)
@@ -75,7 +75,9 @@ public:
 
     bool ItemAdded( const wxDataViewItem &parent, const wxDataViewItem &item );
     bool ItemDeleted( const wxDataViewItem &item );
-    
+    bool ItemChanged( const wxDataViewItem &item );
+    bool ValueChanged( const wxDataViewItem &item, unsigned int col );
+    bool Cleared();
     void Resort();
     
 protected:
@@ -1096,6 +1098,8 @@ bool wxGtkDataViewModelNotifier::ItemChanged( const wxDataViewItem &item )
         GTK_TREE_MODEL(m_wxgtk_model), path, &iter );
     gtk_tree_path_free (path);
 
+    m_owner->GtkGetInternal()->ItemChanged( item );
+    
     return true;
 }
 
@@ -1129,14 +1133,22 @@ bool wxGtkDataViewModelNotifier::ValueChanged( const wxDataViewItem &item, unsig
             // Redraw
             gtk_widget_queue_draw_area( GTK_WIDGET(widget),
                 cell_area.x - xdiff, ydiff + cell_area.y, cell_area.width, cell_area.height );
+                
+            m_owner->GtkGetInternal()->ValueChanged( item, model_col );
+            
+            return true;
         }
     }
 
-    return true;
+    return false;
 }
 
 bool wxGtkDataViewModelNotifier::Cleared()
 {
+    // TODO: delete everything
+
+    m_owner->GtkGetInternal()->Cleared();
+    
     return false;
 }
 
@@ -2240,6 +2252,10 @@ void wxDataViewCtrlInternal::InitTree()
 
 void wxDataViewCtrlInternal::BuildBranch( wxGtkTreeModelNode *node )
 {
+    wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_MODEL_ITEM_ADDED, m_owner->GetId() );
+    event.SetEventObject( m_owner );
+    event.SetModel( m_owner->GetModel() );
+
     if (node->GetChildCount() == 0)
     {
         wxDataViewItem child = m_wx_model->GetFirstChild( node->GetItem() );
@@ -2249,6 +2265,10 @@ void wxDataViewCtrlInternal::BuildBranch( wxGtkTreeModelNode *node )
                 node->AddNode( new wxGtkTreeModelNode( node, child, this ) );
             else
                 node->AddLeave( child.GetID() );
+                
+            event.SetItem( child );
+            m_owner->GetEventHandler()->ProcessEvent( event );
+    
             child = m_wx_model->GetNextSibling( child );
         }
     }
@@ -2266,6 +2286,13 @@ 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;
 }
 
@@ -2273,6 +2300,46 @@ bool wxDataViewCtrlInternal::ItemDeleted( const wxDataViewItem &item )
 {
     wxGtkTreeModelNode *parent = FindParentNode( item );
     parent->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() );
+    event.SetEventObject( m_owner );
+    event.SetModel( m_owner->GetModel() );
+    event.SetItem( item );
+    m_owner->GetEventHandler()->ProcessEvent( event );
+    
+    return true;
+}
+
+bool wxDataViewCtrlInternal::ValueChanged( const wxDataViewItem &item, unsigned int col )
+{
+    wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_MODEL_VALUE_CHANGED, m_owner->GetId() );
+    event.SetEventObject( m_owner );
+    event.SetModel( m_owner->GetModel() );
+    event.SetColumn( col );
+    event.SetItem( item );
+    m_owner->GetEventHandler()->ProcessEvent( event );
+    
+    return true;
+}
+
+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;
 }