X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a739b8b2df8b3778a58affa35e3703668c8afdd7..e7aa703d4bdce1614d019b46867bac2a266b9cfe:/src/generic/datavgen.cpp diff --git a/src/generic/datavgen.cpp b/src/generic/datavgen.cpp index e9658b5244..716d4b9bf9 100644 --- a/src/generic/datavgen.cpp +++ b/src/generic/datavgen.cpp @@ -637,7 +637,7 @@ public: // the displaying number of the tree are changing along with the // expanding/collapsing of the tree nodes unsigned int GetLastVisibleRow(); - unsigned int GetRowCount(); + unsigned int GetRowCount() const; const wxDataViewSelection& GetSelections() const { return m_selection; } void SetSelections( const wxDataViewSelection & sel ) @@ -706,7 +706,7 @@ public: void StartEditing(const wxDataViewItem& item, const wxDataViewColumn* col); private: - int RecalculateCount(); + int RecalculateCount() const; // Return false only if the event was vetoed by its handler. bool SendExpanderEvent(wxEventType type, const wxDataViewItem& item); @@ -1377,7 +1377,14 @@ wxDataViewMainWindow::wxDataViewMainWindow( wxDataViewCtrl *parent, wxWindowID i m_useCellFocus = false; m_currentRow = 0; - m_lineHeight = wxMax( 17, GetCharHeight() + 4 ); // 17 = mini icon height + 1 +#ifdef __WXMSW__ + // We would like to use the same line height that Explorer uses. This is + // different from standard ListView control since Vista. + if ( wxGetWinVersion() >= wxWinVersion_Vista ) + m_lineHeight = wxMax(16, GetCharHeight()) + 6; // 16 = mini icon height + else +#endif // __WXMSW__ + m_lineHeight = wxMax(16, GetCharHeight()) + 1; // 16 = mini icon height #if wxUSE_DRAG_AND_DROP m_dragCount = 0; @@ -2569,12 +2576,14 @@ unsigned int wxDataViewMainWindow::GetLastVisibleRow() return wxMin( GetRowCount()-1, row ); } -unsigned int wxDataViewMainWindow::GetRowCount() +unsigned int wxDataViewMainWindow::GetRowCount() const { if ( m_count == -1 ) { - m_count = RecalculateCount(); - UpdateDisplay(); + wxDataViewMainWindow* const + self = const_cast(this); + self->m_count = RecalculateCount(); + self->UpdateDisplay(); } return m_count; } @@ -2961,15 +2970,20 @@ wxDataViewTreeNode * wxDataViewMainWindow::GetTreeNodeByRow(unsigned int row) co wxDataViewItem wxDataViewMainWindow::GetItemByRow(unsigned int row) const { + wxDataViewItem item; if (IsVirtualList()) { - return wxDataViewItem( wxUIntToPtr(row+1) ); + if ( row < GetRowCount() ) + item = wxDataViewItem(wxUIntToPtr(row+1)); } else { wxDataViewTreeNode *node = GetTreeNodeByRow(row); - return node ? node->GetItem() : wxDataViewItem(); + if ( node ) + item = node->GetItem(); } + + return item; } bool @@ -3290,7 +3304,7 @@ wxRect wxDataViewMainWindow::GetItemRect( const wxDataViewItem & item, return itemRect; } -int wxDataViewMainWindow::RecalculateCount() +int wxDataViewMainWindow::RecalculateCount() const { if (IsVirtualList()) {