]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/datavcmn.cpp
wxBORDER_THEME now means 'use an appropriate themed border' on all plaforms
[wxWidgets.git] / src / common / datavcmn.cpp
index 87e5d3b807229c7512a9907d7c88d219051a6d30..2adea130200f29ec37f93f76c7d1fa5c0cfa0436 100644 (file)
@@ -36,7 +36,7 @@ bool operator == (const wxDataViewItem &left, const wxDataViewItem &right)
 // wxDataViewModel
 // ---------------------------------------------------------
 
-#include <wx/listimpl.cpp>
+#include "wx/listimpl.cpp"
 WX_DEFINE_LIST(wxDataViewModelNotifiers);
 
 wxDataViewModel::wxDataViewModel()
@@ -195,7 +195,7 @@ int wxDataViewModel::Compare( const wxDataViewItem &item1, const wxDataViewItem
     // items must be different
     unsigned long litem1 = (unsigned long) item1.GetID();
     unsigned long litem2 = (unsigned long) item2.GetID();
-    
+
     if (!ascending)
         return litem2-litem2;
 
@@ -268,15 +268,18 @@ unsigned int wxDataViewIndexListModel::GetRow( const wxDataViewItem &item ) cons
 
 wxDataViewItem wxDataViewIndexListModel::GetItem( unsigned int row ) const
 {
+    wxASSERT( row < m_hash.GetCount() );
     return wxDataViewItem( m_hash[row] );
 }
 
-int wxDataViewIndexListModel::Compare( const wxDataViewItem &item1, const wxDataViewItem &item2,
-                                       unsigned int column, bool ascending )
+int wxDataViewIndexListModel::Compare(const wxDataViewItem& item1,
+                                      const wxDataViewItem& item2,
+                                      unsigned int WXUNUSED(column),
+                                      bool ascending)
 {
     if (ascending)
         return GetRow(item1) - GetRow(item2);
-    
+
     return GetRow(item2) - GetRow(item1);
 }
 
@@ -306,29 +309,29 @@ bool wxDataViewIndexListModel::IsContainer( const wxDataViewItem &item ) const
     return false;
 }
 
-wxDataViewItem wxDataViewIndexListModel::GetFirstChild( const wxDataViewItem &parent ) const
+unsigned int wxDataViewIndexListModel::GetChildren( const wxDataViewItem &item, wxDataViewItemArray &children ) const
 {
-    if (!parent.IsOk())
-    {
-        if (m_hash.GetCount() == 0)
-            return wxDataViewItem(0);
+    if (item.IsOk())
+        return 0;
 
-        return wxDataViewItem( m_hash[0]);
-    }
+    children = m_hash;
 
-    return wxDataViewItem(0);
+    return m_hash.GetCount();
 }
 
-wxDataViewItem wxDataViewIndexListModel::GetNextSibling( const wxDataViewItem &item ) const
-{
-    if (!item.IsOk())
-        return wxDataViewItem(0);
+//-----------------------------------------------------------------------------
+// wxDataViewIconText
+//-----------------------------------------------------------------------------
 
-    int pos = m_hash.Index( item.GetID() );
-    if ((pos == wxNOT_FOUND) || (pos == (int) (m_hash.GetCount()-1)))
-        return wxDataViewItem(0);
+IMPLEMENT_DYNAMIC_CLASS(wxDataViewIconText,wxObject)
 
-    return wxDataViewItem( m_hash[pos+1] );
+IMPLEMENT_VARIANT_OBJECT(wxDataViewIconText)
+
+bool operator == (const wxDataViewIconText &one, const wxDataViewIconText &two)
+{
+    if (one.GetText() != two.GetText()) return false;
+    if (one.IsSameAs(two)) return false;
+    return true;
 }
 
 // ---------------------------------------------------------
@@ -371,6 +374,13 @@ bool wxDataViewRendererBase::StartEditing( const wxDataViewItem &item, wxRect la
     m_editorCtrl->SetFocus();
 #endif
 
+    // Now we should send Editing Started event
+    wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_STARTED, GetOwner()->GetOwner()->GetId() );
+    event.SetDataViewColumn( GetOwner() );
+    event.SetModel( GetOwner()->GetOwner()->GetModel() );
+    event.SetItem( item );
+    GetOwner()->GetOwner()->GetEventHandler()->ProcessEvent( event );
+
     return true;
 }
 
@@ -401,6 +411,13 @@ bool wxDataViewRendererBase::FinishEditing()
 
     // m_editorCtrl->PopEventHandler( true );
 
+    // Now we should send Editing Done event
+    wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_DONE, GetOwner()->GetOwner()->GetId() );
+    event.SetDataViewColumn( GetOwner() );
+    event.SetModel( GetOwner()->GetOwner()->GetModel() );
+    event.SetItem( m_item );
+    GetOwner()->GetOwner()->GetEventHandler()->ProcessEvent( event );
+
     return true;
 }
 
@@ -538,18 +555,12 @@ IMPLEMENT_ABSTRACT_CLASS(wxDataViewCtrlBase, wxControl)
 wxDataViewCtrlBase::wxDataViewCtrlBase()
 {
     m_model = NULL;
-    m_cols.DeleteContents( true );
     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();
@@ -579,129 +590,162 @@ wxDataViewModel* wxDataViewCtrlBase::GetModel()
     return m_model;
 }
 
-bool wxDataViewCtrlBase::AppendTextColumn( const wxString &label, unsigned int model_column,
+wxDataViewColumn *
+wxDataViewCtrlBase::AppendTextColumn( const wxString &label, unsigned int model_column,
                             wxDataViewCellMode mode, int width, wxAlignment align, int flags )
 {
-    return AppendColumn( new wxDataViewColumn( label,
+    wxDataViewColumn *ret = new wxDataViewColumn( label,
         new wxDataViewTextRenderer( wxT("string"), mode, (int)align ),
-        model_column, width, align, flags ) );
+        model_column, width, align, flags );
+    AppendColumn( ret );
+    return ret;
+}
+
+wxDataViewColumn *
+wxDataViewCtrlBase::AppendIconTextColumn( const wxString &label, unsigned int model_column,
+                            wxDataViewCellMode mode, int width, wxAlignment align, int flags )
+{
+    wxDataViewColumn *ret = new wxDataViewColumn( label,
+        new wxDataViewIconTextRenderer( wxT("wxDataViewIconText"), mode, (int)align ),
+        model_column, width, align, flags );
+    AppendColumn( ret );
+    return ret;
 }
 
-bool wxDataViewCtrlBase::AppendToggleColumn( const wxString &label, unsigned int model_column,
+wxDataViewColumn *
+wxDataViewCtrlBase::AppendToggleColumn( const wxString &label, unsigned int model_column,
                             wxDataViewCellMode mode, int width, wxAlignment align, int flags )
 {
-    return AppendColumn( new wxDataViewColumn( label,
+
+    wxDataViewColumn *ret = new wxDataViewColumn( label,
         new wxDataViewToggleRenderer( wxT("bool"), mode, (int)align ),
-        model_column, width, align, flags ) );
+        model_column, width, align, flags );
+    AppendColumn( ret );
+    return ret;
 }
 
-bool wxDataViewCtrlBase::AppendProgressColumn( const wxString &label, unsigned int model_column,
+wxDataViewColumn *
+wxDataViewCtrlBase::AppendProgressColumn( const wxString &label, unsigned int model_column,
                             wxDataViewCellMode mode, int width, wxAlignment align, int flags )
 {
-    return AppendColumn( new wxDataViewColumn( label,
+    wxDataViewColumn *ret = new wxDataViewColumn( label,
         new wxDataViewProgressRenderer( wxEmptyString, wxT("long"), mode, (int)align ),
-        model_column, width, align, flags ) );
+        model_column, width, align, flags );
+    AppendColumn( ret );
+    return ret;
 }
 
-bool wxDataViewCtrlBase::AppendDateColumn( const wxString &label, unsigned int model_column,
+wxDataViewColumn *
+wxDataViewCtrlBase::AppendDateColumn( const wxString &label, unsigned int model_column,
                             wxDataViewCellMode mode, int width, wxAlignment align, int flags )
 {
-    return AppendColumn( new wxDataViewColumn( label,
+    wxDataViewColumn *ret = new wxDataViewColumn( label,
         new wxDataViewDateRenderer( wxT("datetime"), mode, (int)align ),
-        model_column, width, align, flags ) );
+        model_column, width, align, flags );
+    AppendColumn( ret );
+    return ret;
 }
 
-bool wxDataViewCtrlBase::AppendBitmapColumn( const wxString &label, unsigned int model_column,
+wxDataViewColumn *
+wxDataViewCtrlBase::AppendBitmapColumn( const wxString &label, unsigned int model_column,
                             wxDataViewCellMode mode, int width, wxAlignment align, int flags )
 {
-    return AppendColumn( new wxDataViewColumn( label,
+    wxDataViewColumn *ret = new wxDataViewColumn( label,
         new wxDataViewBitmapRenderer( wxT("wxBitmap"), mode, (int)align ),
-        model_column, width, align, flags ) );
+        model_column, width, align, flags );
+    AppendColumn( ret );
+    return ret;
 }
 
-bool wxDataViewCtrlBase::AppendTextColumn( const wxBitmap &label, unsigned int model_column,
+wxDataViewColumn *
+wxDataViewCtrlBase::AppendTextColumn( const wxBitmap &label, unsigned int model_column,
                             wxDataViewCellMode mode, int width, wxAlignment align, int flags )
 {
-    return AppendColumn( new wxDataViewColumn( label,
+    wxDataViewColumn *ret = new wxDataViewColumn( label,
         new wxDataViewTextRenderer( wxT("string"), mode, (int)align ),
-        model_column, width, align, flags ) );
+        model_column, width, align, flags );
+    AppendColumn( ret );
+    return ret;
 }
 
-bool wxDataViewCtrlBase::AppendToggleColumn( const wxBitmap &label, unsigned int model_column,
+wxDataViewColumn *
+wxDataViewCtrlBase::AppendIconTextColumn( const wxBitmap &label, unsigned int model_column,
                             wxDataViewCellMode mode, int width, wxAlignment align, int flags )
 {
-    return AppendColumn( new wxDataViewColumn( label,
+    wxDataViewColumn *ret = new wxDataViewColumn( label,
+        new wxDataViewIconTextRenderer( wxT("wxDataViewIconText"), mode, (int)align ),
+        model_column, width, align, flags );
+    AppendColumn( ret );
+    return ret;
+}
+
+wxDataViewColumn *
+wxDataViewCtrlBase::AppendToggleColumn( const wxBitmap &label, unsigned int model_column,
+                            wxDataViewCellMode mode, int width, wxAlignment align, int flags )
+{
+    wxDataViewColumn *ret = new wxDataViewColumn( label,
         new wxDataViewToggleRenderer( wxT("bool"), mode, (int)align ),
-        model_column, width, align, flags ) );
+        model_column, width, align, flags );
+    AppendColumn( ret );
+    return ret;
 }
 
-bool wxDataViewCtrlBase::AppendProgressColumn( const wxBitmap &label, unsigned int model_column,
+wxDataViewColumn *
+wxDataViewCtrlBase::AppendProgressColumn( const wxBitmap &label, unsigned int model_column,
                             wxDataViewCellMode mode, int width, wxAlignment align, int flags )
 {
-    return AppendColumn( new wxDataViewColumn( label,
+    wxDataViewColumn *ret = new wxDataViewColumn( label,
         new wxDataViewProgressRenderer( wxEmptyString, wxT("long"), mode, (int)align ),
-        model_column, width, align, flags ) );
+        model_column, width, align, flags );
+    AppendColumn( ret );
+    return ret;
 }
 
-bool wxDataViewCtrlBase::AppendDateColumn( const wxBitmap &label, unsigned int model_column,
+wxDataViewColumn *
+wxDataViewCtrlBase::AppendDateColumn( const wxBitmap &label, unsigned int model_column,
                             wxDataViewCellMode mode, int width, wxAlignment align, int flags )
 {
-    return AppendColumn( new wxDataViewColumn( label,
+    wxDataViewColumn *ret = new wxDataViewColumn( label,
         new wxDataViewDateRenderer( wxT("datetime"), mode, (int)align ),
-        model_column, width, align, flags ) );
+        model_column, width, align, flags );
+    AppendColumn( ret );
+    return ret;
 }
 
-bool wxDataViewCtrlBase::AppendBitmapColumn( const wxBitmap &label, unsigned int model_column,
+wxDataViewColumn *
+wxDataViewCtrlBase::AppendBitmapColumn( const wxBitmap &label, unsigned int model_column,
                             wxDataViewCellMode mode, int width, wxAlignment align, int flags )
 {
-    return AppendColumn( new wxDataViewColumn( label,
+    wxDataViewColumn *ret = new wxDataViewColumn( label,
         new wxDataViewBitmapRenderer( wxT("wxBitmap"), mode, (int)align ),
-        model_column, width, align, flags ) );
+        model_column, width, align, flags );
+    AppendColumn( ret );
+    return ret;
 }
 
-bool wxDataViewCtrlBase::AppendColumn( wxDataViewColumn *col )
+bool
+wxDataViewCtrlBase::AppendColumn( wxDataViewColumn *col )
 {
-    m_cols.Append( (wxObject*) col );
     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 )
-{
-    if( pos >= m_cols.GetCount() )
-        return NULL;
-
-    return (wxDataViewColumn*) m_cols[ pos ];
-}
-
 // ---------------------------------------------------------
 // wxDataViewEvent
 // ---------------------------------------------------------
 
 IMPLEMENT_DYNAMIC_CLASS(wxDataViewEvent,wxNotifyEvent)
 
-DEFINE_EVENT_TYPE(wxEVT_COMMAND_DATAVIEW_ITEM_SELECTED)
-DEFINE_EVENT_TYPE(wxEVT_COMMAND_DATAVIEW_ITEM_DESELECTED)
+DEFINE_EVENT_TYPE(wxEVT_COMMAND_DATAVIEW_SELECTION_CHANGED)
+
 DEFINE_EVENT_TYPE(wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED)
 DEFINE_EVENT_TYPE(wxEVT_COMMAND_DATAVIEW_ITEM_COLLAPSING)
 DEFINE_EVENT_TYPE(wxEVT_COMMAND_DATAVIEW_ITEM_COLLAPSED)
 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_COLUMN_HEADER_CLICK)
 DEFINE_EVENT_TYPE(wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_RIGHT_CLICK)
 DEFINE_EVENT_TYPE(wxEVT_COMMAND_DATAVIEW_COLUMN_SORTED)
@@ -713,3 +757,4 @@ DEFINE_EVENT_TYPE(wxEVT_COMMAND_DATAVIEW_MODEL_VALUE_CHANGED)
 DEFINE_EVENT_TYPE(wxEVT_COMMAND_DATAVIEW_MODEL_CLEARED)
 
 #endif
+