[vlc-commits] commit: Qt: allow sorting by any meta in any view using right-click menu ( Jakob Leben )
git version control
git at videolan.org
Thu Mar 4 10:34:08 CET 2010
vlc | branch: master | Jakob Leben <jleben at videolan.org> | Thu Mar 4 10:31:45 2010 +0100| [fcc3616f567ed1b6cc5113e49d7c4c307ba6cafc] | committer: Jakob Leben
Qt: allow sorting by any meta in any view using right-click menu
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=fcc3616f567ed1b6cc5113e49d7c4c307ba6cafc
---
.../gui/qt4/components/playlist/playlist_model.cpp | 38 +++++++++++++-------
.../gui/qt4/components/playlist/playlist_model.hpp | 7 ++--
2 files changed, 29 insertions(+), 16 deletions(-)
diff --git a/modules/gui/qt4/components/playlist/playlist_model.cpp b/modules/gui/qt4/components/playlist/playlist_model.cpp
index 3d63618..ed70f4b 100644
--- a/modules/gui/qt4/components/playlist/playlist_model.cpp
+++ b/modules/gui/qt4/components/playlist/playlist_model.cpp
@@ -72,6 +72,7 @@ PLModel::PLModel( playlist_t *_p_playlist, /* THEPL */
i_cached_id = -1;
i_cached_input_id = -1;
i_popup_item = i_popup_parent = -1;
+ sortingMenu = NULL;
rootItem = NULL; /* PLItem rootItem, will be set in rebuild( ) */
@@ -102,6 +103,7 @@ PLModel::PLModel( playlist_t *_p_playlist, /* THEPL */
PLModel::~PLModel()
{
delete rootItem;
+ delete sortingMenu;
}
Qt::DropActions PLModel::supportedDropActions() const
@@ -952,12 +954,25 @@ bool PLModel::popup( const QModelIndex & index, const QPoint &point, const QMode
if( i_popup_item > -1 )
{
menu.addSeparator();
- QMenu *sort_menu = menu.addMenu( qtr( "Sort by" ) + QString(" ") +
- qfu( psz_column_title( columnToMeta( index.column() ) ) ) );
- sort_menu->addAction( qtr( "Ascending" ),
- this, SLOT( popupSortAsc() ) );
- sort_menu->addAction( qtr( "Descending" ),
- this, SLOT( popupSortDesc() ) );
+ if( !sortingMenu )
+ {
+ sortingMenu = new QMenu( qtr( "Sort by" ) );
+ sortingMapper = new QSignalMapper( this );
+ int i, j;
+ 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() )
{
@@ -1065,12 +1080,9 @@ void PLModel::popupAddNode()
PL_UNLOCK;
}
-void PLModel::popupSortAsc()
-{
- sort( i_popup_parent, i_popup_column, Qt::AscendingOrder );
-}
-
-void PLModel::popupSortDesc()
+void PLModel::popupSort( int column )
{
- 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 );
}
diff --git a/modules/gui/qt4/components/playlist/playlist_model.hpp b/modules/gui/qt4/components/playlist/playlist_model.hpp
index 2bd9ef2..4b31f1f 100644
--- a/modules/gui/qt4/components/playlist/playlist_model.hpp
+++ b/modules/gui/qt4/components/playlist/playlist_model.hpp
@@ -43,8 +43,8 @@
#include <QSignalMapper>
#include <QAbstractItemModel>
#include <QVariant>
+#include <QAction>
-class QSignalMapper;
class PLItem;
class PLModel : public QAbstractItemModel
@@ -145,6 +145,8 @@ private:
/* Popup */
int i_popup_item, i_popup_parent, i_popup_column;
QModelIndexList current_selection;
+ QMenu *sortingMenu;
+ QSignalMapper *sortingMapper;
/* Lookups */
PLItem *findById( PLItem *, int );
@@ -165,8 +167,7 @@ private slots:
void popupSave();
void popupExplore();
void popupAddNode();
- void popupSortAsc();
- void popupSortDesc();
+ void popupSort( int column );
void processInputItemUpdate( input_item_t *);
void processInputItemUpdate( input_thread_t* p_input );
void processItemRemoval( int i_id );
More information about the vlc-commits
mailing list