X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/afebb87be1467f24f4ffe5e8cca2a94acc5248c8..ce903b6f06bb2c3846654e98e9c598b96ac1d82a:/src/common/datavcmn.cpp diff --git a/src/common/datavcmn.cpp b/src/common/datavcmn.cpp index 0b287e6a5b..6d99b9684f 100644 --- a/src/common/datavcmn.cpp +++ b/src/common/datavcmn.cpp @@ -33,12 +33,46 @@ bool operator == (const wxDataViewItem &left, const wxDataViewItem &right) // --------------------------------------------------------- -// wxDataViewModel +// wxDataViewModelNotifier // --------------------------------------------------------- -#include +#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 ); @@ -89,6 +123,51 @@ bool wxDataViewModel::ItemChanged( const wxDataViewItem &item ) 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; @@ -195,7 +274,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; @@ -272,12 +351,14 @@ wxDataViewItem wxDataViewIndexListModel::GetItem( unsigned int row ) const 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); } @@ -307,35 +388,34 @@ 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 +//----------------------------------------------------------------------------- + +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) @@ -378,7 +458,6 @@ bool wxDataViewRendererBase::StartEditing( const wxDataViewItem &item, wxRect la event.SetDataViewColumn( GetOwner() ); event.SetModel( GetOwner()->GetOwner()->GetModel() ); event.SetItem( item ); - g_item = item; GetOwner()->GetOwner()->GetEventHandler()->ProcessEvent( event ); return true; @@ -410,12 +489,12 @@ 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( g_item ); + event.SetItem( m_item ); GetOwner()->GetOwner()->GetEventHandler()->ProcessEvent( event ); return true; @@ -601,11 +680,22 @@ wxDataViewCtrlBase::AppendTextColumn( const wxString &label, unsigned int model_ 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 ); @@ -657,6 +747,17 @@ wxDataViewCtrlBase::AppendTextColumn( const wxBitmap &label, unsigned int model_ 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 ) @@ -714,8 +815,8 @@ wxDataViewCtrlBase::AppendColumn( wxDataViewColumn *col ) 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) @@ -723,16 +824,11 @@ 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_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