int PLModel::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QAbstractItemModel::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { switch (_id) { case 0: currentChanged((*reinterpret_cast< const QModelIndex(*)>(_a[1]))); break; case 1: rootChanged(); break; case 2: activateItem((*reinterpret_cast< const QModelIndex(*)>(_a[1]))); break; case 3: activateItem((*reinterpret_cast< playlist_item_t*(*)>(_a[1]))); break; case 4: popupPlay(); break; case 5: popupDel(); break; case 6: popupInfo(); break; case 7: popupStream(); break; case 8: popupSave(); break; case 9: popupExplore(); break; case 10: popupAddNode(); break; case 11: popupSort((*reinterpret_cast< int(*)>(_a[1]))); break; case 12: processInputItemUpdate((*reinterpret_cast< input_item_t*(*)>(_a[1]))); break; case 13: processInputItemUpdate((*reinterpret_cast< input_thread_t*(*)>(_a[1]))); break; case 14: processItemRemoval((*reinterpret_cast< int(*)>(_a[1]))); break; case 15: processItemAppend((*reinterpret_cast< int(*)>(_a[1])),(*reinterpret_cast< int(*)>(_a[2]))); break; default: ; } _id -= 16; } return _id; }
bool MLModel::popup( const QModelIndex & index, const QPoint &point, const QModelIndexList &list ) { current_selection = list; current_index = index; QMenu menu; if( index.isValid() ) { menu.addAction( QIcon( ":/menu/play" ), qtr(I_POP_PLAY), this, SLOT( popupPlay() ) ); menu.addAction( QIcon( ":/menu/stream" ), qtr(I_POP_STREAM), this, SLOT( popupStream() ) ); menu.addAction( qtr(I_POP_SAVE), this, SLOT( popupSave() ) ); menu.addAction( QIcon( ":/menu/info" ), qtr(I_POP_INFO), this, SLOT( popupInfo() ) ); menu.addSeparator(); } QIcon addIcon( ":/buttons/playlist/playlist_add" ); menu.addSeparator(); //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() ) { menu.addAction( QIcon( ":/buttons/playlist/playlist_remove" ), qtr(I_POP_DEL), this, SLOT( popupDel() ) ); menu.addSeparator(); } if( !menu.isEmpty() ) { menu.exec( point ); return true; } else return false; }
/*********** 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 ) ); }