]> git.saurik.com Git - wxWidgets.git/commitdiff
Move column organizing code to ports, away from common code
authorRobert Roebling <robert@roebling.de>
Sun, 26 Aug 2007 10:05:16 +0000 (10:05 +0000)
committerRobert Roebling <robert@roebling.de>
Sun, 26 Aug 2007 10:05:16 +0000 (10:05 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@48391 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/latex/wx/dataviewctrl.tex
include/wx/dataview.h
include/wx/gtk/dataview.h
src/common/datavcmn.cpp
src/gtk/dataview.cpp

index 8699ae2ea8ebada852c2392be8e6054cd917d213..8e5057139e5774b1583a8f7663708be12685baad 100644 (file)
@@ -182,7 +182,7 @@ Collapses the item.
     
 \membersection{wxDataViewCtrl::DeleteColumn}\label{wxdataviewctrldeletecolumn}
 
     
 \membersection{wxDataViewCtrl::DeleteColumn}\label{wxdataviewctrldeletecolumn}
 
-\func{virtual bool}{DeleteColumn}{\param{unsigned int }{pos}}
+\func{virtual bool}{DeleteColumn}{\param{const wxDataViewColumn* }{column}}
 
 Deletes given column.
 
 
 Deletes given column.
 
@@ -196,7 +196,9 @@ Expands the item.
 
 \constfunc{virtual wxDataViewColumn*}{GetColumn}{\param{unsigned int }{pos}}
 
 
 \constfunc{virtual wxDataViewColumn*}{GetColumn}{\param{unsigned int }{pos}}
 
-Returns pointer to the column.
+Returns pointer to the column. {\it pos} refers to the 
+position in the control which may change after reordering
+columns by the user.
 
 \membersection{wxDataViewCtrl::GetModel}\label{wxdataviewctrlgetmodel}
 
 
 \membersection{wxDataViewCtrl::GetModel}\label{wxdataviewctrlgetmodel}
 
index a7e6fc22f0ee03fb40d684fe0e12cfad75699920..3f9309bcb51555e5e38b7496f50108bc54c87aff 100644 (file)
@@ -459,12 +459,12 @@ public:
     
     virtual bool AppendColumn( wxDataViewColumn *col );
 
     
     virtual bool AppendColumn( wxDataViewColumn *col );
 
-    virtual unsigned int GetColumnCount() const;
-
-    virtual bool DeleteColumn( unsigned int pos );
-    virtual bool ClearColumns();
-    virtual wxDataViewColumn* GetColumn( unsigned int pos ) const;
-
+    virtual unsigned int GetColumnCount() const = 0;
+    virtual wxDataViewColumn* GetColumn( unsigned int pos ) const = 0;
+    
+    virtual bool DeleteColumn( wxDataViewColumn *column ) = 0;
+    virtual bool ClearColumns() = 0;
+    
     void SetExpanderColumn( wxDataViewColumn *col )
         { m_expander_column = col ; DoSetExpanderColumn(); }
     wxDataViewColumn *GetExpanderColumn() const 
     void SetExpanderColumn( wxDataViewColumn *col )
         { m_expander_column = col ; DoSetExpanderColumn(); }
     wxDataViewColumn *GetExpanderColumn() const 
@@ -499,7 +499,6 @@ protected:
 
 private:
     wxDataViewModel        *m_model;
 
 private:
     wxDataViewModel        *m_model;
-    wxList                  m_cols;
     wxDataViewColumn       *m_expander_column;
     int m_indent ;
        
     wxDataViewColumn       *m_expander_column;
     int m_indent ;
        
index b84a7f4f8a3ce8c60d80140a16cdd0980321ede6..e4df649926ee78bf161d01f23d3b7f2b89136478 100644 (file)
@@ -275,6 +275,8 @@ protected:
     DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewColumn)
 };
 
     DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewColumn)
 };
 
+WX_DECLARE_LIST(wxDataViewColumn, wxDataViewColumnList );
+
 // --------------------------------------------------------- 
 // wxDataViewCtrl
 // --------------------------------------------------------- 
 // --------------------------------------------------------- 
 // wxDataViewCtrl
 // --------------------------------------------------------- 
@@ -305,7 +307,12 @@ public:
            const wxValidator& validator = wxDefaultValidator );
 
     virtual bool AssociateModel( wxDataViewModel *model );
            const wxValidator& validator = wxDefaultValidator );
 
     virtual bool AssociateModel( wxDataViewModel *model );
+    
     virtual bool AppendColumn( wxDataViewColumn *col );
     virtual bool AppendColumn( wxDataViewColumn *col );
+    virtual unsigned int GetColumnCount() const;
+    virtual wxDataViewColumn* GetColumn( unsigned int pos ) const;
+    virtual bool DeleteColumn( wxDataViewColumn *column );
+    virtual bool ClearColumns();
 
     virtual wxDataViewItem GetSelection() const;
     virtual int GetSelections( wxDataViewItemArray & sel ) const;
 
     virtual wxDataViewItem GetSelection() const;
     virtual int GetSelections( wxDataViewItemArray & sel ) const;
@@ -346,6 +353,7 @@ private:
     GtkWidget               *m_treeview;
     wxDataViewModelNotifier *m_notifier;
     wxDataViewCtrlInternal  *m_internal;
     GtkWidget               *m_treeview;
     wxDataViewModelNotifier *m_notifier;
     wxDataViewCtrlInternal  *m_internal;
+    wxDataViewColumnList     m_cols;
 
     
     virtual void OnInternalIdle();
 
     
     virtual void OnInternalIdle();
index a3e934ab350fbd3f53b33c13cc8486a837217592..5ecd70e872028987ed6b339e8b1bdce3a083dff6 100644 (file)
@@ -539,18 +539,12 @@ IMPLEMENT_ABSTRACT_CLASS(wxDataViewCtrlBase, wxControl)
 wxDataViewCtrlBase::wxDataViewCtrlBase()
 {
     m_model = NULL;
 wxDataViewCtrlBase::wxDataViewCtrlBase()
 {
     m_model = NULL;
-    m_cols.DeleteContents( true );
     m_expander_column = 0;
     m_indent = 8;
 }
 
 wxDataViewCtrlBase::~wxDataViewCtrlBase()
 {
     m_expander_column = 0;
     m_indent = 8;
 }
 
 wxDataViewCtrlBase::~wxDataViewCtrlBase()
 {
-    // IMPORTANT: before calling DecRef() on our model (since it may
-    //            result in a free() call), erase all columns (since
-    //            they hold a pointer to our model)
-    m_cols.Clear();
-
     if (m_model)
     {
         m_model->DecRef();
     if (m_model)
     {
         m_model->DecRef();
@@ -694,34 +688,10 @@ wxDataViewCtrlBase::AppendBitmapColumn( const wxBitmap &label, unsigned int mode
 bool
 wxDataViewCtrlBase::AppendColumn( wxDataViewColumn *col )
 {
 bool
 wxDataViewCtrlBase::AppendColumn( wxDataViewColumn *col )
 {
-    m_cols.Append( (wxObject*) col );
     col->SetOwner( (wxDataViewCtrl*) this );
     return true;
 }
 
     col->SetOwner( (wxDataViewCtrl*) this );
     return true;
 }
 
-unsigned int wxDataViewCtrlBase::GetColumnCount() const
-{
-    return m_cols.GetCount();
-}
-
-bool wxDataViewCtrlBase::DeleteColumn( unsigned int WXUNUSED(pos) )
-{
-    return false;
-}
-
-bool wxDataViewCtrlBase::ClearColumns()
-{
-    return false;
-}
-
-wxDataViewColumn* wxDataViewCtrlBase::GetColumn( unsigned int pos ) const
-{
-    if( pos >= m_cols.GetCount() )
-        return NULL;
-
-    return (wxDataViewColumn*) m_cols[ pos ];
-}
-
 // ---------------------------------------------------------
 // wxDataViewEvent
 // ---------------------------------------------------------
 // ---------------------------------------------------------
 // wxDataViewEvent
 // ---------------------------------------------------------
index e4111bc0dbd510996db57d2d9ecfd61d4d905d1a..60b0ec079137304994090ad099801b90040d05e7 100644 (file)
@@ -1977,6 +1977,9 @@ static void wxGtkTreeCellDataFunc( GtkTreeViewColumn *column,
 
 IMPLEMENT_CLASS(wxDataViewColumn, wxDataViewColumnBase)
 
 
 IMPLEMENT_CLASS(wxDataViewColumn, wxDataViewColumnBase)
 
+#include <wx/listimpl.cpp>
+WX_DEFINE_LIST(wxDataViewColumnList);
+
 wxDataViewColumn::wxDataViewColumn( const wxString &title, wxDataViewRenderer *cell,
                                     unsigned int model_column, int width,
                                     wxAlignment align, int flags ) :
 wxDataViewColumn::wxDataViewColumn( const wxString &title, wxDataViewRenderer *cell,
                                     unsigned int model_column, int width,
                                     wxAlignment align, int flags ) :
@@ -2986,13 +2989,65 @@ bool wxDataViewCtrl::AppendColumn( wxDataViewColumn *col )
     if (!wxDataViewCtrlBase::AppendColumn(col))
         return false;
 
     if (!wxDataViewCtrlBase::AppendColumn(col))
         return false;
 
-    GtkTreeViewColumn *column = (GtkTreeViewColumn *)col->GetGtkHandle();
+    m_cols.Append( col );
+
+    gtk_tree_view_append_column( GTK_TREE_VIEW(m_treeview), 
+                                 GTK_TREE_VIEW_COLUMN(col->GetGtkHandle()) );
+
+    return true;
+}
+
+unsigned int wxDataViewCtrl::GetColumnCount() const
+{
+    return m_cols.GetCount();
+}
+
+wxDataViewColumn* wxDataViewCtrl::GetColumn( unsigned int pos ) const
+{
+    GtkTreeViewColumn *gtk_col = gtk_tree_view_get_column( GTK_TREE_VIEW(m_treeview), pos );
+    if (!gtk_col)
+        return NULL;
+        
+    wxDataViewColumnList::const_iterator iter;
+    for (iter = m_cols.begin(); iter != m_cols.end(); iter++)
+    {
+        wxDataViewColumn *col = *iter;
+        if (GTK_TREE_VIEW_COLUMN(col->GetGtkHandle()) == gtk_col)
+        {
+            return col;
+        }
+    }
+    
+    return NULL;
+}
+
+bool wxDataViewCtrl::DeleteColumn( wxDataViewColumn *column )
+{
+    gtk_tree_view_remove_column( GTK_TREE_VIEW(m_treeview), 
+                                 GTK_TREE_VIEW_COLUMN(column->GetGtkHandle()) );
+
+    m_cols.remove( column );
 
 
-    gtk_tree_view_append_column( GTK_TREE_VIEW(m_treeview), column );
+    delete column;
 
     return true;
 }
 
 
     return true;
 }
 
+bool wxDataViewCtrl::ClearColumns()
+{
+    wxDataViewColumnList::iterator iter;
+    for (iter = m_cols.begin(); iter != m_cols.end(); iter++)
+    {
+        wxDataViewColumn *col = *iter;
+        gtk_tree_view_remove_column( GTK_TREE_VIEW(m_treeview), 
+                                     GTK_TREE_VIEW_COLUMN(col->GetGtkHandle()) );
+    }
+    
+    m_cols.clear();
+    
+    return true;
+}
+
 void wxDataViewCtrl::Expand( const wxDataViewItem & item )
 {
     GtkTreeIter iter;
 void wxDataViewCtrl::Expand( const wxDataViewItem & item )
 {
     GtkTreeIter iter;