Commit fcc3616f authored by Jakob Leben's avatar Jakob Leben

Qt: allow sorting by any meta in any view using right-click menu

parent 4f5a4010
...@@ -72,6 +72,7 @@ PLModel::PLModel( playlist_t *_p_playlist, /* THEPL */ ...@@ -72,6 +72,7 @@ PLModel::PLModel( playlist_t *_p_playlist, /* THEPL */
i_cached_id = -1; i_cached_id = -1;
i_cached_input_id = -1; i_cached_input_id = -1;
i_popup_item = i_popup_parent = -1; i_popup_item = i_popup_parent = -1;
sortingMenu = NULL;
rootItem = NULL; /* PLItem rootItem, will be set in rebuild( ) */ rootItem = NULL; /* PLItem rootItem, will be set in rebuild( ) */
...@@ -102,6 +103,7 @@ PLModel::PLModel( playlist_t *_p_playlist, /* THEPL */ ...@@ -102,6 +103,7 @@ PLModel::PLModel( playlist_t *_p_playlist, /* THEPL */
PLModel::~PLModel() PLModel::~PLModel()
{ {
delete rootItem; delete rootItem;
delete sortingMenu;
} }
Qt::DropActions PLModel::supportedDropActions() const Qt::DropActions PLModel::supportedDropActions() const
...@@ -952,12 +954,25 @@ bool PLModel::popup( const QModelIndex & index, const QPoint &point, const QMode ...@@ -952,12 +954,25 @@ bool PLModel::popup( const QModelIndex & index, const QPoint &point, const QMode
if( i_popup_item > -1 ) if( i_popup_item > -1 )
{ {
menu.addSeparator(); menu.addSeparator();
QMenu *sort_menu = menu.addMenu( qtr( "Sort by" ) + QString(" ") + if( !sortingMenu )
qfu( psz_column_title( columnToMeta( index.column() ) ) ) ); {
sort_menu->addAction( qtr( "Ascending" ), sortingMenu = new QMenu( qtr( "Sort by" ) );
this, SLOT( popupSortAsc() ) ); sortingMapper = new QSignalMapper( this );
sort_menu->addAction( qtr( "Descending" ), int i, j;
this, SLOT( popupSortDesc() ) ); for( i = 1, j = 1; i < COLUMN_END; i <<= 1, j++ )
{
if( i == COLUMN_NUMBER ) continue;
QMenu *m = sortingMenu->addMenu( qfu( psz_column_title( i ) ) );
QAction *asc = m->addAction( qtr("Ascending") );
QAction *desc = m->addAction( qtr("Descending") );
sortingMapper->setMapping( asc, j );
sortingMapper->setMapping( desc, -j );
CONNECT( asc, triggered(), sortingMapper, map() );
CONNECT( desc, triggered(), sortingMapper, map() );
}
CONNECT( sortingMapper, mapped( int ), this, popupSort( int ) );
}
menu.addMenu( sortingMenu );
} }
if( !menu.isEmpty() ) if( !menu.isEmpty() )
{ {
...@@ -1065,12 +1080,9 @@ void PLModel::popupAddNode() ...@@ -1065,12 +1080,9 @@ void PLModel::popupAddNode()
PL_UNLOCK; PL_UNLOCK;
} }
void PLModel::popupSortAsc() void PLModel::popupSort( int column )
{
sort( i_popup_parent, i_popup_column, Qt::AscendingOrder );
}
void PLModel::popupSortDesc()
{ {
sort( i_popup_parent, i_popup_column, Qt::DescendingOrder ); sort( i_popup_parent,
column > 0 ? column - 1 : -column - 1,
column > 0 ? Qt::AscendingOrder : Qt::DescendingOrder );
} }
...@@ -43,8 +43,8 @@ ...@@ -43,8 +43,8 @@
#include <QSignalMapper> #include <QSignalMapper>
#include <QAbstractItemModel> #include <QAbstractItemModel>
#include <QVariant> #include <QVariant>
#include <QAction>
class QSignalMapper;
class PLItem; class PLItem;
class PLModel : public QAbstractItemModel class PLModel : public QAbstractItemModel
...@@ -145,6 +145,8 @@ private: ...@@ -145,6 +145,8 @@ private:
/* Popup */ /* Popup */
int i_popup_item, i_popup_parent, i_popup_column; int i_popup_item, i_popup_parent, i_popup_column;
QModelIndexList current_selection; QModelIndexList current_selection;
QMenu *sortingMenu;
QSignalMapper *sortingMapper;
/* Lookups */ /* Lookups */
PLItem *findById( PLItem *, int ); PLItem *findById( PLItem *, int );
...@@ -165,8 +167,7 @@ private slots: ...@@ -165,8 +167,7 @@ private slots:
void popupSave(); void popupSave();
void popupExplore(); void popupExplore();
void popupAddNode(); void popupAddNode();
void popupSortAsc(); void popupSort( int column );
void popupSortDesc();
void processInputItemUpdate( input_item_t *); void processInputItemUpdate( input_item_t *);
void processInputItemUpdate( input_thread_t* p_input ); void processInputItemUpdate( input_thread_t* p_input );
void processItemRemoval( int i_id ); void processItemRemoval( int i_id );
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment