X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/565804f2b9ec017360122cda08181d287919160b..ccd5d46c7b69632eaa231e8fc7801dd5af2faaa8:/src/generic/datavgen.cpp diff --git a/src/generic/datavgen.cpp b/src/generic/datavgen.cpp index b15e2eb4d4..32691b07ab 100644 --- a/src/generic/datavgen.cpp +++ b/src/generic/datavgen.cpp @@ -91,7 +91,7 @@ public: protected: // implement/override wxHeaderCtrl functions by forwarding them to the main // control - virtual wxHeaderColumnBase& GetColumn(unsigned int idx) + virtual const wxHeaderColumn& GetColumn(unsigned int idx) const { return *(GetOwner()->GetColumn(idx)); } @@ -176,8 +176,10 @@ private: void OnEndResize(wxHeaderCtrlEvent& event) { + wxDataViewCtrl * const owner = GetOwner(); + const unsigned col = event.GetColumn(); - GetColumn(col).SetWidth(event.GetWidth()); + owner->GetColumn(col)->SetWidth(event.GetWidth()); GetOwner()->OnColumnChange(col); } @@ -481,6 +483,7 @@ public: void Expand( unsigned int row ) { OnExpanding( row ); } void Collapse( unsigned int row ) { OnCollapsing( row ); } + bool IsExpanded( unsigned int row ) const; private: wxDataViewTreeNode * GetTreeNodeByRow( unsigned int row ) const; //We did not need this temporarily @@ -2409,6 +2412,26 @@ wxDataViewEvent wxDataViewMainWindow::SendExpanderEvent( wxEventType type, const return le; } + +bool wxDataViewMainWindow::IsExpanded( unsigned int row ) const +{ + if (IsVirtualList()) + return false; + + wxDataViewTreeNode * node = GetTreeNodeByRow(row); + if (!node) + return false; + + if (!node->HasChildren()) + { + delete node; + return false; + } + + return node->IsOpen(); +} + + void wxDataViewMainWindow::OnExpanding( unsigned int row ) { if (IsVirtualList()) @@ -2785,7 +2808,7 @@ void wxDataViewMainWindow::OnChar( wxKeyEvent &event ) { case WXK_RETURN: { - if (m_currentRow > 0) + if (m_currentRow >= 0) { wxWindow *parent = GetParent(); wxDataViewEvent le(wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED, parent->GetId()); @@ -2886,7 +2909,7 @@ void wxDataViewMainWindow::OnMouse( wxMouseEvent &event ) wxDataViewRenderer *cell = col->GetRenderer(); unsigned int current = GetLineAt( y ); - if ((current > GetRowCount()) || (x > GetEndOfLastCol())) + if ((current >= GetRowCount()) || (x > GetEndOfLastCol())) { // Unselect all if below the last row ? return; @@ -3018,6 +3041,7 @@ void wxDataViewMainWindow::OnMouse( wxMouseEvent &event ) // select single line SelectAllRows( false ); SelectRow( m_lineSelectSingleOnUp, true ); + SendSelectionChangedEvent( GetItemByRow(m_lineSelectSingleOnUp) ); } //Process the event of user clicking the expander @@ -3503,18 +3527,33 @@ int wxDataViewCtrl::GetSelections( wxDataViewItemArray & sel ) const void wxDataViewCtrl::SetSelections( const wxDataViewItemArray & sel ) { wxDataViewSelection selection(wxDataViewSelectionCmp); + + wxDataViewItem last_parent; + int len = sel.GetCount(); for( int i = 0; i < len; i ++ ) { - int row = m_clientArea->GetRowByItem( sel[i] ); + wxDataViewItem item = sel[i]; + wxDataViewItem parent = GetModel()->GetParent( item ); + if (parent) + { + if (parent != last_parent) + ExpandAncestors(item); + } + + last_parent = parent; + int row = m_clientArea->GetRowByItem( item ); if( row >= 0 ) selection.Add( static_cast(row) ); } + m_clientArea->SetSelections( selection ); } void wxDataViewCtrl::Select( const wxDataViewItem & item ) { + ExpandAncestors( item ); + int row = m_clientArea->GetRowByItem( item ); if( row >= 0 ) { @@ -3638,6 +3677,10 @@ void wxDataViewCtrl::EnsureVisible( int row, int column ) void wxDataViewCtrl::EnsureVisible( const wxDataViewItem & item, const wxDataViewColumn * column ) { + ExpandAncestors( item ); + + m_clientArea->RecalculateDisplay(); + int row = m_clientArea->GetRowByItem(item); if( row >= 0 ) { @@ -3683,6 +3726,15 @@ void wxDataViewCtrl::Collapse( const wxDataViewItem & item ) m_clientArea->Collapse(row); } +bool wxDataViewCtrl::IsExpanded( const wxDataViewItem & item ) const +{ + int row = m_clientArea->GetRowByItem( item ); + if (row != -1) + return m_clientArea->IsExpanded(row); + return false; +} + + #endif // !wxUSE_GENERICDATAVIEWCTRL