X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/66e09788abd37f13f2e458d37aa3b0b94033e5db..78cd9c69eb3f4c158fe10ce49325d57ec05d1306:/src/common/datavcmn.cpp?ds=sidebyside diff --git a/src/common/datavcmn.cpp b/src/common/datavcmn.cpp index 87e5d3b807..2adea13020 100644 --- a/src/common/datavcmn.cpp +++ b/src/common/datavcmn.cpp @@ -36,7 +36,7 @@ bool operator == (const wxDataViewItem &left, const wxDataViewItem &right) // wxDataViewModel // --------------------------------------------------------- -#include +#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 +