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( ) */
PLModel::~PLModel()
{
delete rootItem;
+ delete sortingMenu;
}
Qt::DropActions PLModel::supportedDropActions() const
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() )
{
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 );
}
#include <QSignalMapper>
#include <QAbstractItemModel>
#include <QVariant>
+#include <QAction>
-class QSignalMapper;
class PLItem;
class PLModel : public QAbstractItemModel
/* Popup */
int i_popup_item, i_popup_parent, i_popup_column;
QModelIndexList current_selection;
+ QMenu *sortingMenu;
+ QSignalMapper *sortingMapper;
/* Lookups */
PLItem *findById( PLItem *, int );
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 );