// ---------------------------------------------------------
-// wxDataViewModel
+// wxDataViewModelNotifier
// ---------------------------------------------------------
-#include <wx/listimpl.cpp>
+#include "wx/listimpl.cpp"
WX_DEFINE_LIST(wxDataViewModelNotifiers);
+bool wxDataViewModelNotifier::ItemsAdded( const wxDataViewItem &parent, const wxDataViewItemArray &items )
+{
+ size_t count = items.GetCount();
+ size_t i;
+ for (i = 0; i < count; i++)
+ if (!ItemAdded( parent, items[i] )) return false;
+
+ return true;
+}
+
+bool wxDataViewModelNotifier::ItemsDeleted( const wxDataViewItem &parent, const wxDataViewItemArray &items )
+{
+ size_t count = items.GetCount();
+ size_t i;
+ for (i = 0; i < count; i++)
+ if (!ItemDeleted( parent, items[i] )) return false;
+
+ return true;
+}
+
+bool wxDataViewModelNotifier::ItemsChanged( const wxDataViewItemArray &items )
+{
+ size_t count = items.GetCount();
+ size_t i;
+ for (i = 0; i < count; i++)
+ if (!ItemChanged( items[i] )) return false;
+
+ return true;
+}
+
+// ---------------------------------------------------------
+// wxDataViewModel
+// ---------------------------------------------------------
+
wxDataViewModel::wxDataViewModel()
{
m_notifiers.DeleteContents( true );
return ret;
}
+bool wxDataViewModel::ItemsAdded( const wxDataViewItem &parent, const wxDataViewItemArray &items )
+{
+ bool ret = true;
+
+ wxDataViewModelNotifiers::iterator iter;
+ for (iter = m_notifiers.begin(); iter != m_notifiers.end(); ++iter)
+ {
+ wxDataViewModelNotifier* notifier = *iter;
+ if (!notifier->ItemsAdded( parent, items ))
+ ret = false;
+ }
+
+ return ret;
+}
+
+bool wxDataViewModel::ItemsDeleted( const wxDataViewItem &parent, const wxDataViewItemArray &items )
+{
+ bool ret = true;
+
+ wxDataViewModelNotifiers::iterator iter;
+ for (iter = m_notifiers.begin(); iter != m_notifiers.end(); ++iter)
+ {
+ wxDataViewModelNotifier* notifier = *iter;
+ if (!notifier->ItemsDeleted( parent, items ))
+ ret = false;
+ }
+
+ return ret;
+}
+
+bool wxDataViewModel::ItemsChanged( const wxDataViewItemArray &items )
+{
+ bool ret = true;
+
+ wxDataViewModelNotifiers::iterator iter;
+ for (iter = m_notifiers.begin(); iter != m_notifiers.end(); ++iter)
+ {
+ wxDataViewModelNotifier* notifier = *iter;
+ if (!notifier->ItemsChanged( items ))
+ ret = false;
+ }
+
+ return ret;
+}
+
bool wxDataViewModel::ValueChanged( const wxDataViewItem &item, unsigned int col )
{
bool ret = true;
// items must be different
unsigned long litem1 = (unsigned long) item1.GetID();
unsigned long litem2 = (unsigned long) item2.GetID();
-
+
if (!ascending)
return litem2-litem2;
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);
}
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
+//-----------------------------------------------------------------------------
+
+IMPLEMENT_DYNAMIC_CLASS(wxDataViewIconText,wxObject)
- int pos = m_hash.Index( item.GetID() );
- if ((pos == wxNOT_FOUND) || (pos == (int) (m_hash.GetCount()-1)))
- return wxDataViewItem(0);
+IMPLEMENT_VARIANT_OBJECT(wxDataViewIconText)
- return wxDataViewItem( m_hash[pos+1] );
+bool operator == (const wxDataViewIconText &one, const wxDataViewIconText &two)
+{
+ if (one.GetText() != two.GetText()) return false;
+ if (one.IsSameAs(two)) return false;
+ return true;
}
// ---------------------------------------------------------
// wxDataViewRendererBase
// ---------------------------------------------------------
-static wxDataViewItem g_item;
IMPLEMENT_ABSTRACT_CLASS(wxDataViewRendererBase, wxObject)
event.SetDataViewColumn( GetOwner() );
event.SetModel( GetOwner()->GetOwner()->GetModel() );
event.SetItem( item );
- g_item = item;
GetOwner()->GetOwner()->GetEventHandler()->ProcessEvent( event );
return true;
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( g_item );
+ event.SetItem( m_item );
GetOwner()->GetOwner()->GetEventHandler()->ProcessEvent( event );
return true;
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;
+}
+
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 );
return ret;
}
+wxDataViewColumn *
+wxDataViewCtrlBase::AppendIconTextColumn( const wxBitmap &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;
+}
+
wxDataViewColumn *
wxDataViewCtrlBase::AppendToggleColumn( const wxBitmap &label, unsigned int model_column,
wxDataViewCellMode mode, int width, wxAlignment align, int flags )
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_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