X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ed3aece5aea77b4fc62493fac7873496056aeec5..05e66a7002abbc726d3aa53fc5cb42ebaf8748e8:/src/generic/datavgen.cpp diff --git a/src/generic/datavgen.cpp b/src/generic/datavgen.cpp index 7f112e8f48..a640773ce3 100644 --- a/src/generic/datavgen.cpp +++ b/src/generic/datavgen.cpp @@ -678,6 +678,7 @@ public: void SetRowHeight( int lineHeight ) { m_lineHeight = lineHeight; } int GetRowHeight() const { return m_lineHeight; } + int GetDefaultRowHeight() const; // Some useful functions for row and item mapping wxDataViewItem GetItemByRow( unsigned int row ) const; @@ -1398,15 +1399,7 @@ wxDataViewMainWindow::wxDataViewMainWindow( wxDataViewCtrl *parent, wxWindowID i m_currentColSetByKeyboard = false; m_useCellFocus = false; m_currentRow = (unsigned)-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 + m_lineHeight = GetDefaultRowHeight(); #if wxUSE_DRAG_AND_DROP m_dragCount = 0; @@ -1449,6 +1442,20 @@ wxDataViewMainWindow::~wxDataViewMainWindow() } +int wxDataViewMainWindow::GetDefaultRowHeight() const +{ +#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 ) + return wxMax(16, GetCharHeight()) + 6; // 16 = mini icon height + else +#endif // __WXMSW__ + return wxMax(16, GetCharHeight()) + 1; // 16 = mini icon height +} + + + #if wxUSE_DRAG_AND_DROP bool wxDataViewMainWindow::EnableDragSource( const wxDataFormat &format ) { @@ -3085,44 +3092,44 @@ void wxDataViewMainWindow::Expand( unsigned int row ) if (!node->HasChildren()) return; - if (!node->IsOpen()) - { - if ( !SendExpanderEvent(wxEVT_COMMAND_DATAVIEW_ITEM_EXPANDING, node->GetItem()) ) - { - // Vetoed by the event handler. - return; - } + if (!node->IsOpen()) + { + if ( !SendExpanderEvent(wxEVT_COMMAND_DATAVIEW_ITEM_EXPANDING, node->GetItem()) ) + { + // Vetoed by the event handler. + return; + } - node->ToggleOpen(); + node->ToggleOpen(); - // build the children of current node - if( node->GetChildNodes().empty() ) - { - SortPrepare(); - ::BuildTreeHelper(GetModel(), node->GetItem(), node); - } + // build the children of current node + if( node->GetChildNodes().empty() ) + { + SortPrepare(); + ::BuildTreeHelper(GetModel(), node->GetItem(), node); + } - // By expanding the node all row indices that are currently in the selection list - // and are greater than our node have become invalid. So we have to correct that now. - const unsigned rowAdjustment = node->GetSubTreeCount(); - for(unsigned i=0; iGetSubTreeCount(); + for(unsigned i=0; i row) - ChangeCurrentRow(m_currentRow + rowAdjustment); + if(m_currentRow > row) + ChangeCurrentRow(m_currentRow + rowAdjustment); - m_count = -1; - UpdateDisplay(); - // Send the expanded event - SendExpanderEvent(wxEVT_COMMAND_DATAVIEW_ITEM_EXPANDED,node->GetItem()); - } + m_count = -1; + UpdateDisplay(); + // Send the expanded event + SendExpanderEvent(wxEVT_COMMAND_DATAVIEW_ITEM_EXPANDED,node->GetItem()); + } } void wxDataViewMainWindow::Collapse(unsigned int row) @@ -3943,10 +3950,11 @@ void wxDataViewMainWindow::OnMouse( wxMouseEvent &event ) return; } - if(event.LeftDown()) + if(event.ButtonDown()) { - // Not skipping this event would prevent the system from setting focus - // to this window. + // Not skipping button down events would prevent the system from + // setting focus to this window as most (all?) of them do by default, + // so skip it to enable default handling. event.Skip(); } @@ -4542,6 +4550,31 @@ void wxDataViewCtrl::SetFocus() m_clientArea->SetFocus(); } +bool wxDataViewCtrl::SetFont(const wxFont & font) +{ + if (!wxControl::SetFont(font)) + return false; + + if (m_headerArea) + m_headerArea->SetFont(font); + + if (m_clientArea) + { + m_clientArea->SetFont(font); + m_clientArea->SetRowHeight(m_clientArea->GetDefaultRowHeight()); + } + + if (m_headerArea || m_clientArea) + { + InvalidateColBestWidths(); + Layout(); + } + + return true; +} + + + bool wxDataViewCtrl::AssociateModel( wxDataViewModel *model ) { if (!wxDataViewCtrlBase::AssociateModel( model ))