From 9577d830528cbfd80a8dd001a4cf02f6832246a0 Mon Sep 17 00:00:00 2001 From: Ilkka Ollakka Date: Sun, 2 Aug 2009 18:06:14 +0300 Subject: [PATCH] QT: move sortingIndicator to correct position when columns are added/removed This should be more clearer to user what column is used to sort (eg if it's hidden, then hide sortIndicator also). --- .../gui/qt4/components/playlist/panels.hpp | 1 + .../components/playlist/playlist_model.cpp | 1 + .../components/playlist/playlist_model.hpp | 1 + .../qt4/components/playlist/standardpanel.cpp | 52 ++++++++++++++++++- 4 files changed, 53 insertions(+), 2 deletions(-) diff --git a/modules/gui/qt4/components/playlist/panels.hpp b/modules/gui/qt4/components/playlist/panels.hpp index 1891564939..6876f0c035 100644 --- a/modules/gui/qt4/components/playlist/panels.hpp +++ b/modules/gui/qt4/components/playlist/panels.hpp @@ -90,6 +90,7 @@ private slots: void setCurrentRootId( int ); void popupAdd(); void popupSelectColumn( QPoint ); + void checkSortingIndicator( int ); }; #endif diff --git a/modules/gui/qt4/components/playlist/playlist_model.cpp b/modules/gui/qt4/components/playlist/playlist_model.cpp index 6a47ad7b31..87de8a0367 100644 --- a/modules/gui/qt4/components/playlist/playlist_model.cpp +++ b/modules/gui/qt4/components/playlist/playlist_model.cpp @@ -873,6 +873,7 @@ void PLModel::viewchanged( int meta ) rootItem->updateColumnHeaders(); endInsertColumns(); } + emit columnsChanged( meta ); rebuild(); } } diff --git a/modules/gui/qt4/components/playlist/playlist_model.hpp b/modules/gui/qt4/components/playlist/playlist_model.hpp index a28c3a8dbb..d4c2e4e900 100644 --- a/modules/gui/qt4/components/playlist/playlist_model.hpp +++ b/modules/gui/qt4/components/playlist/playlist_model.hpp @@ -168,6 +168,7 @@ private: signals: void shouldRemove( int ); void currentChanged( const QModelIndex& ); + void columnsChanged( int ); public slots: diff --git a/modules/gui/qt4/components/playlist/standardpanel.cpp b/modules/gui/qt4/components/playlist/standardpanel.cpp index 3178c7db86..43b656d704 100644 --- a/modules/gui/qt4/components/playlist/standardpanel.cpp +++ b/modules/gui/qt4/components/playlist/standardpanel.cpp @@ -100,6 +100,8 @@ StandardPLPanel::StandardPLPanel( PlaylistWidget *_parent, this, popupSelectColumn( QPoint ) ); CONNECT( model, currentChanged( const QModelIndex& ), this, handleExpansion( const QModelIndex& ) ); + CONNECT( model, columnsChanged( int ), + this, checkSortingIndicator( int ) ); currentRootId = -1; CONNECT( parent, rootChanged( int ), this, setCurrentRootId( int ) ); @@ -257,14 +259,58 @@ void StandardPLPanel::popupAdd() + QPoint( 0, addButton->height() ) ); } +/* Set sortingindicator to -1 if it's on column thats removed, + * else check that it's still showing on correct column + */ +void StandardPLPanel::checkSortingIndicator( int meta ) +{ + int index=0; + + if( view->header()->isSortIndicatorShown() == false ) + return; + + int sortIndex = view->header()->sortIndicatorSection(); + if( sortIndex < 0 || sortIndex > view->header()->count() || meta == 0 ) + return; + + int _meta = meta; + + while( _meta ) + { + if( _meta & model->shownFlags() ) + index++; + _meta >>= 1; + } + + /* Adding column */ + if( model->shownFlags() & meta ) + { + /* If column is added before sortIndex, move it one to right*/ + if( sortIndex >= index ) + { + sortIndex += 1; + } + } else { + /* Column removed */ + if( sortIndex == index ) + { + sortIndex = -1; + } else if( sortIndex > index ) + { + /* Move indicator left one step*/ + sortIndex -= 1; + } + } + view->header()->setSortIndicator( sortIndex , + view->header()->sortIndicatorOrder() ); +} + void StandardPLPanel::popupSelectColumn( QPoint pos ) { ContextUpdateMapper = new QSignalMapper(this); QMenu selectColMenu; - CONNECT( ContextUpdateMapper, mapped( int ), model, viewchanged( int ) ); - int i_column = 1; for( i_column = 1; i_column != COLUMN_END; i_column<<=1 ) { @@ -276,6 +322,8 @@ void StandardPLPanel::popupSelectColumn( QPoint pos ) CONNECT( option, triggered(), ContextUpdateMapper, map() ); } + CONNECT( ContextUpdateMapper, mapped( int ), model, viewchanged( int ) ); + selectColMenu.exec( QCursor::pos() ); } -- 2.39.2