/*********** Popup *********/ bool StandardPLPanel::popup( const QPoint &point ) { QModelIndex index = popupIndex( currentView ); /* index for menu logic only. Do not store.*/ VLCModel *model = qobject_cast<VLCModel *>(currentView->model()); #define ADD_MENU_ENTRY( icon, title, act ) \ if ( model->isSupportedAction( act, index ) )\ {\ action = menu.addAction( icon, title ); \ container.action = act; \ action->setData( QVariant::fromValue( container ) );\ } /* */ QMenu menu; QAction *action; VLCModelSubInterface::actionsContainerType container; /* Play/Stream/Info static actions */ ADD_MENU_ENTRY( QIcon( ":/menu/play" ), qtr(I_POP_PLAY), VLCModelSubInterface::ACTION_PLAY ) ADD_MENU_ENTRY( QIcon( ":/menu/stream" ), qtr(I_POP_STREAM), VLCModelSubInterface::ACTION_STREAM ) ADD_MENU_ENTRY( QIcon(), qtr(I_POP_SAVE), VLCModelSubInterface::ACTION_SAVE ); ADD_MENU_ENTRY( QIcon( ":/menu/info" ), qtr(I_POP_INFO), VLCModelSubInterface::ACTION_INFO ); menu.addSeparator(); ADD_MENU_ENTRY( QIcon( ":/type/folder-grey" ), qtr(I_POP_EXPLORE), VLCModelSubInterface::ACTION_EXPLORE ); QIcon addIcon( ":/buttons/playlist/playlist_add" ); ADD_MENU_ENTRY( addIcon, qtr(I_POP_NEWFOLDER), VLCModelSubInterface::ACTION_CREATENODE ) ADD_MENU_ENTRY( QIcon(), qtr(I_POP_RENAMEFOLDER), VLCModelSubInterface::ACTION_RENAMENODE ) menu.addSeparator(); /* In PL or ML, allow to add a file/folder */ ADD_MENU_ENTRY( addIcon, qtr(I_PL_ADDF), VLCModelSubInterface::ACTION_ENQUEUEFILE ) ADD_MENU_ENTRY( addIcon, qtr(I_PL_ADDDIR), VLCModelSubInterface::ACTION_ENQUEUEDIR ) ADD_MENU_ENTRY( addIcon, qtr(I_OP_ADVOP), VLCModelSubInterface::ACTION_ENQUEUEGENERIC ) ADD_MENU_ENTRY( QIcon(), qtr(I_PL_ADDPL), VLCModelSubInterface::ACTION_ADDTOPLAYLIST ); menu.addSeparator(); ADD_MENU_ENTRY( QIcon(), qtr( I_PL_SAVE ), VLCModelSubInterface::ACTION_SAVETOPLAYLIST ); menu.addSeparator(); /* Item removal */ ADD_MENU_ENTRY( QIcon( ":/buttons/playlist/playlist_remove" ), qtr(I_POP_DEL), VLCModelSubInterface::ACTION_REMOVE ); ADD_MENU_ENTRY( QIcon( ":/toolbar/clear" ), qtr("Clear the playlist"), VLCModelSubInterface::ACTION_CLEAR ); menu.addSeparator(); /* Playlist sorting */ if ( model->isSupportedAction( VLCModelSubInterface::ACTION_SORT, index ) ) { QMenu *sortingMenu = new QMenu( qtr( "Sort by" ), &menu ); /* Choose what columns to show in sorting menu, not sure if this should be configurable*/ QList<int> sortingColumns; sortingColumns << COLUMN_TITLE << COLUMN_ARTIST << COLUMN_ALBUM << COLUMN_TRACK_NUMBER << COLUMN_URI << COLUMN_DISC_NUMBER; container.action = VLCModelSubInterface::ACTION_SORT; foreach( int Column, sortingColumns ) { action = sortingMenu->addAction( qfu( psz_column_title( Column ) ) + " " + qtr("Ascending") ); container.column = model->columnFromMeta(Column) + 1; action->setData( QVariant::fromValue( container ) ); action = sortingMenu->addAction( qfu( psz_column_title( Column ) ) + " " + qtr("Descending") ); container.column = -1 * (model->columnFromMeta(Column)+1); action->setData( QVariant::fromValue( container ) ); }
/*********** Popup *********/ bool StandardPLPanel::popup( const QModelIndex & index, const QPoint &point, const QModelIndexList &selectionlist ) { VLCModel *model = qobject_cast<VLCModel*>(currentView->model()); QModelIndexList callerAsList; callerAsList << ( index.isValid() ? index : QModelIndex() ); popupIndex = index; /* suitable for modal only */ #define ADD_MENU_ENTRY( icon, title, act, data ) \ action = menu.addAction( icon, title ); \ container.action = act; \ container.indexes = data; \ action->setData( QVariant::fromValue( container ) ) /* */ QMenu menu; QAction *action; PLModel::actionsContainerType container; /* Play/Stream/Info static actions */ if( index.isValid() ) { ADD_MENU_ENTRY( QIcon( ":/menu/play" ), qtr(I_POP_PLAY), container.ACTION_PLAY, callerAsList ); menu.addAction( QIcon( ":/menu/stream" ), qtr(I_POP_STREAM), this, SLOT( popupStream() ) ); menu.addAction( QIcon(), qtr(I_POP_SAVE), this, SLOT( popupSave() ) ); menu.addAction( QIcon( ":/menu/info" ), qtr(I_POP_INFO), this, SLOT( popupInfoDialog() ) ); menu.addSeparator(); if( model->getURI( index ).startsWith( "file://" ) ) menu.addAction( QIcon( ":/type/folder-grey" ), qtr(I_POP_EXPLORE), this, SLOT( popupExplore() ) ); } /* In PL or ML, allow to add a file/folder */ if( model->canEdit() ) { QIcon addIcon( ":/buttons/playlist/playlist_add" ); if( model->isTree() ) menu.addAction( addIcon, qtr(I_POP_NEWFOLDER), this, SLOT( popupPromptAndCreateNode() ) ); menu.addSeparator(); if( model->isCurrentItem( model->rootIndex(), PLModel::IN_PLAYLIST ) ) { menu.addAction( addIcon, qtr(I_PL_ADDF), THEDP, SLOT( simplePLAppendDialog()) ); menu.addAction( addIcon, qtr(I_PL_ADDDIR), THEDP, SLOT( PLAppendDir()) ); menu.addAction( addIcon, qtr(I_OP_ADVOP), THEDP, SLOT( PLAppendDialog()) ); } else if( model->isCurrentItem( model->rootIndex(), PLModel::IN_MEDIALIBRARY ) ) { menu.addAction( addIcon, qtr(I_PL_ADDF), THEDP, SLOT( simpleMLAppendDialog()) ); menu.addAction( addIcon, qtr(I_PL_ADDDIR), THEDP, SLOT( MLAppendDir() ) ); menu.addAction( addIcon, qtr(I_OP_ADVOP), THEDP, SLOT( MLAppendDialog() ) ); } } if( index.isValid() ) { if( !model->isCurrentItem( model->rootIndex(), PLModel::IN_PLAYLIST ) ) { ADD_MENU_ENTRY( QIcon(), qtr("Add to playlist"), container.ACTION_ADDTOPLAYLIST, selectionlist ); } } menu.addSeparator(); /* Item removal */ if( index.isValid() ) { ADD_MENU_ENTRY( QIcon( ":/buttons/playlist/playlist_remove" ), qtr(I_POP_DEL), container.ACTION_REMOVE, selectionlist ); } if( model->canEdit() ) { menu.addAction( QIcon( ":/toolbar/clear" ), qtr("Clear playlist"), model, SLOT( clearPlaylist() ) ); } menu.addSeparator(); /* Playlist sorting */ QMenu *sortingMenu = new QMenu( qtr( "Sort by" ) ); /* Choose what columns to show in sorting menu, not sure if this should be configurable*/ QList<int> sortingColumns; sortingColumns << COLUMN_TITLE << COLUMN_ARTIST << COLUMN_ALBUM << COLUMN_TRACK_NUMBER << COLUMN_URI; container.action = container.ACTION_SORT; container.indexes = callerAsList; foreach( int Column, sortingColumns ) { action = sortingMenu->addAction( qfu( psz_column_title( Column ) ) + " " + qtr("Ascending") ); container.column = model->columnFromMeta(Column) + 1; action->setData( QVariant::fromValue( container ) ); action = sortingMenu->addAction( qfu( psz_column_title( Column ) ) + " " + qtr("Descending") ); container.column = -1 * (model->columnFromMeta(Column)+1); action->setData( QVariant::fromValue( container ) ); }