From c3112d560e9de85b9bf42852480324c68c62e002 Mon Sep 17 00:00:00 2001 From: Robert Roebling Date: Wed, 18 Apr 2007 12:31:35 +0000 Subject: [PATCH] Corrected/implemented sorting (by way of clicking on on the header button) for the generic code. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@45527 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/dataview.h | 2 +- include/wx/generic/dataview.h | 1 + src/common/datavcmn.cpp | 3 +++ src/generic/datavgen.cpp | 30 +++++++++++++++++++++++++----- 4 files changed, 30 insertions(+), 6 deletions(-) diff --git a/include/wx/dataview.h b/include/wx/dataview.h index 2f6548ad36..c1c3a2387a 100644 --- a/include/wx/dataview.h +++ b/include/wx/dataview.h @@ -24,7 +24,7 @@ #if defined(__WXGTK20__) // for testing - // #define wxUSE_GENERICDATAVIEWCTRL 1 + #define wxUSE_GENERICDATAVIEWCTRL 1 #elif defined(__WXMAC__) #define wxUSE_GENERICDATAVIEWCTRL 1 #else diff --git a/include/wx/generic/dataview.h b/include/wx/generic/dataview.h index 13ce60fc6a..cb0007521b 100644 --- a/include/wx/generic/dataview.h +++ b/include/wx/generic/dataview.h @@ -297,6 +297,7 @@ private: int m_flags; wxAlignment m_align; wxString m_title; + bool m_ascending; void Init(int width); diff --git a/src/common/datavcmn.cpp b/src/common/datavcmn.cpp index 633822e6b5..5e5e4e8fd0 100644 --- a/src/common/datavcmn.cpp +++ b/src/common/datavcmn.cpp @@ -348,6 +348,9 @@ void wxDataViewSortedListModel::Resort() unsigned int i; for (i = 0; i < n; i++) m_array.Add( i ); + + // do we need the neworder? + wxDataViewListModel::RowsReordered( NULL ); } #if 0 diff --git a/src/generic/datavgen.cpp b/src/generic/datavgen.cpp index c03a08ff92..07585c579f 100644 --- a/src/generic/datavgen.cpp +++ b/src/generic/datavgen.cpp @@ -176,6 +176,8 @@ public: delete m_resizeCursor; } + virtual void UpdateDisplay() { Refresh(); } + // event handlers: void OnPaint( wxPaintEvent &event ); @@ -819,6 +821,7 @@ void wxDataViewColumn::Init( int width ) { m_width = width; m_minWidth = wxDVC_DEFAULT_MINWIDTH; + m_ascending = true; } void wxDataViewColumn::SetResizeable( bool resizeable ) @@ -847,17 +850,24 @@ void wxDataViewColumn::SetSortable( bool sortable ) m_flags |= wxDATAVIEW_COL_SORTABLE; else m_flags &= ~wxDATAVIEW_COL_SORTABLE; + + // Update header button + if (GetOwner()) + GetOwner()->OnColumnChange(); } -void wxDataViewColumn::SetSortOrder( bool WXUNUSED(ascending) ) +void wxDataViewColumn::SetSortOrder( bool ascending ) { - // TODO + m_ascending = ascending; + + // Update header button + if (GetOwner()) + GetOwner()->OnColumnChange(); } bool wxDataViewColumn::IsSortOrderAscending() const { - // TODO - return true; + return m_ascending; } void wxDataViewColumn::SetInternalWidth( int width ) @@ -1279,13 +1289,23 @@ void wxGenericDataViewHeaderWindow::OnPaint( wxPaintEvent &WXUNUSED(event) ) int cw = col->GetWidth(); int ch = h; + wxHeaderSortIconType sortArrow = wxHDR_SORT_ICON_NONE; + if (col->IsSortable()) + { + if (col->IsSortOrderAscending()) + sortArrow = wxHDR_SORT_ICON_UP; + else + sortArrow = wxHDR_SORT_ICON_DOWN; + } + wxRendererNative::Get().DrawHeaderButton ( this, dc, wxRect(xpos, 0, cw, ch-1), m_parent->IsEnabled() ? 0 - : (int)wxCONTROL_DISABLED + : (int)wxCONTROL_DISABLED, + sortArrow ); // align as required the column title: -- 2.45.2