void MyListModel::DeleteItems( const wxDataViewItemArray &items ) { unsigned i; wxArrayInt rows; for (i = 0; i < items.GetCount(); i++) { unsigned int row = GetRow( items[i] ); if (row < m_textColValues.GetCount()) rows.Add( row ); } if (rows.GetCount() == 0) { // none of the selected items were in the range of the items // which we store... for simplicity, don't allow removing them wxLogError( "Cannot remove rows with an index greater than %d", m_textColValues.GetCount() ); return; } // Sort in descending order so that the last // row will be deleted first. Otherwise the // remaining indeces would all be wrong. rows.Sort( my_sort_reverse ); for (i = 0; i < rows.GetCount(); i++) m_textColValues.RemoveAt( rows[i] ); // This is just to test if wxDataViewCtrl can // cope with removing rows not sorted in // descending order rows.Sort( my_sort ); RowsDeleted( rows ); }
void wxDataViewCtrl::SetSelections(wxDataViewItemArray const& sel) { size_t const noOfSelections = sel.GetCount(); size_t i; wxDataViewItem last_parent; // make sure that all to be selected items are visible in the control: for (i = 0; i < noOfSelections; i++) { wxDataViewItem item = sel[i]; wxDataViewItem parent = GetModel()->GetParent( item ); if (parent.IsOk() && (parent != last_parent)) ExpandAncestors(item); last_parent = parent; } // finally select the items: wxDataViewWidgetImpl* dataViewWidgetPtr(GetDataViewPeer()); // variable definition for abbreviational purposes for (i=0; i<noOfSelections; ++i) dataViewWidgetPtr->Select(sel[i]); }
void wxOSXDataViewModelNotifier::AdjustRowHeights(wxDataViewItemArray const& items) { if ((m_DataViewCtrlPtr->GetWindowStyle() & wxDV_VARIABLE_LINE_HEIGHT) != 0) { size_t const noOfItems = items.GetCount(); wxDataViewModel *model = GetOwner(); for (size_t itemIndex=0; itemIndex<noOfItems; ++itemIndex) { int height = 20; // TODO find out standard height unsigned int num = m_DataViewCtrlPtr->GetColumnCount(); unsigned int col; for (col = 0; col < num; col++) { wxDataViewColumn* column(m_DataViewCtrlPtr->GetColumnPtr(col)); if (!(column->IsHidden())) { wxDataViewCustomRenderer *renderer = dynamic_cast<wxDataViewCustomRenderer*>(column->GetRenderer()); if (renderer) { wxVariant value; model->GetValue( value, items[itemIndex], column->GetModelColumn() ); renderer->SetValue( value ); height = wxMax( height, renderer->GetSize().y ); } } } if (height > 20) m_DataViewCtrlPtr->GetDataViewPeer()->SetRowHeight(items[itemIndex],height); } } }
void CTimeBarListModel::DeleteItems( const wxDataViewItemArray &items ) { wxArrayInt rows; for (unsigned i = 0; i < items.GetCount(); i++) { unsigned int row = GetRow( items[i] ); if (row < m_textColValues.GetCount()) rows.Add( row ); } if (rows.GetCount() > 0) { // Sort in descending order so that the last // row will be deleted first. Otherwise the // remaining indeces would all be wrong. rows.Sort([](int *v1, int *v2) { return *v2-*v1; }); for (unsigned i = 0; i < rows.GetCount(); i++) { m_textColValues.RemoveAt( rows[i] ); m_view.RemoveAt( rows[i] ); m_lock.RemoveAt( rows[i] ); } // This is just to test if wxDataViewCtrl can // cope with removing rows not sorted in // descending order rows.Sort([](int *v1, int *v2) { return *v1-*v2; }); RowsDeleted( rows ); } }
void TreeListModel::DeleteItems(const wxDataViewItem& parent, const wxDataViewItemArray& items) { // sanity for(size_t i=0; i<items.GetCount(); ++i) { TreeListModel_Item* node = reinterpret_cast<TreeListModel_Item*>(items.Item(i).m_pItem); wxUnusedVar(node); wxASSERT(node && node->GetParent() == parent.m_pItem); DeleteItem(items.Item(i)); } }
unsigned int TreeListModel::GetChildren(const wxDataViewItem& item, wxDataViewItemArray& children) const { if(item.GetID() == NULL) { // Root for(size_t i=0; i<m_data.size(); ++i) { children.Add( wxDataViewItem( m_data.at(i) ) ); } return children.size(); } children.Clear(); TreeListModel_Item* node = reinterpret_cast<TreeListModel_Item*>(item.m_pItem); if ( node ) { for(size_t i=0; i<node->GetChildren().size(); ++i) { children.Add( wxDataViewItem( node->GetChildren().at(i) ) ); } } return children.GetCount(); }
bool wxOSXDataViewModelNotifier::ItemsChanged(wxDataViewItemArray const& items) { size_t const noOfItems = items.GetCount(); wxDataViewEvent dataViewEvent(wxEVT_COMMAND_DATAVIEW_ITEM_VALUE_CHANGED,m_DataViewCtrlPtr->GetId()); dataViewEvent.SetEventObject(m_DataViewCtrlPtr); for (size_t indexItem=0; indexItem<noOfItems; ++indexItem) if (m_DataViewCtrlPtr->GetDataViewPeer()->Update(GetOwner()->GetParent(items[indexItem]),items[indexItem])) { // send for all changed items a wxWidget event: dataViewEvent.SetItem(items[indexItem]); m_DataViewCtrlPtr->HandleWindowEvent(dataViewEvent); } else return false; // if this location is reached all items have been updated: AdjustRowHeights(items); AdjustAutosizedColumns(); // done: return true; }