]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/datavcmn.cpp
add wxSYS_DCLICK_TIME system metric constant; use it for the generic list control...
[wxWidgets.git] / src / common / datavcmn.cpp
index f98deffbb699667d474641c1dac239b42d230acf..9a210030992cf04b8ff8f8ea0dd8ff8606fca1de 100644 (file)
@@ -268,6 +268,7 @@ 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] );
 }
 
@@ -306,29 +307,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);
-
-        return wxDataViewItem( m_hash[0]);
-    }
+    if (item.IsOk())
+        return 0;
 
-    return wxDataViewItem(0);
+    children = m_hash;
+    
+    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 +372,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;
 }
 
@@ -400,6 +408,13 @@ bool wxDataViewRendererBase::FinishEditing()
     GetOwner()->GetOwner()->GetModel()->ValueChanged( m_item, col );
 
     // 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;
 }
@@ -533,26 +548,17 @@ void wxDataViewColumnBase::SetFlags(int flags)
 // wxDataViewCtrlBase
 // ---------------------------------------------------------
 
-#include "wx/arrimpl.cpp"
-WX_DEFINE_OBJARRAY(wxDataViewItemArray);
-
 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();
@@ -582,113 +588,146 @@ 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;
 }
 
-bool wxDataViewCtrlBase::AppendToggleColumn( const wxString &label, unsigned int model_column,
+wxDataViewColumn *
+wxDataViewCtrlBase::AppendIconTextColumn( 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 wxDataViewIconTextRenderer( wxT("wxDataViewIconText"), mode, (int)align ),
+        model_column, width, align, flags );
+    AppendColumn( ret );
+    return ret;
+}
+
+wxDataViewColumn *
+wxDataViewCtrlBase::AppendToggleColumn( const wxString &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 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 )
-{
-    return (wxDataViewColumn*) m_cols[ pos ];
-}
-
 // ---------------------------------------------------------
 // wxDataViewEvent
 // ---------------------------------------------------------
@@ -696,9 +735,15 @@ wxDataViewColumn* wxDataViewCtrlBase::GetColumn( unsigned int pos )
 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_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)
@@ -710,3 +755,4 @@ DEFINE_EVENT_TYPE(wxEVT_COMMAND_DATAVIEW_MODEL_VALUE_CHANGED)
 DEFINE_EVENT_TYPE(wxEVT_COMMAND_DATAVIEW_MODEL_CLEARED)
 
 #endif
+