From aaca967af588564e27a2d4777a59177b1f7cdc4c Mon Sep 17 00:00:00 2001 From: "craig.p.drummond" Date: Fri, 22 Aug 2014 15:48:07 +0000 Subject: [PATCH] Only show track actions if we have a selection --- gui/mainwindow.cpp | 33 ++++++++++++++++--------------- widgets/playqueueview.cpp | 41 +++++++++++++++++++++++++++++++++++---- widgets/playqueueview.h | 8 +++++++- 3 files changed, 61 insertions(+), 21 deletions(-) diff --git a/gui/mainwindow.cpp b/gui/mainwindow.cpp index 9881d7963..78a1016ff 100644 --- a/gui/mainwindow.cpp +++ b/gui/mainwindow.cpp @@ -705,17 +705,7 @@ MainWindow::MainWindow(QWidget *parent) playQueueProxyModel.setSourceModel(&playQueueModel); playQueue->setModel(&playQueueProxyModel); - playQueue->addAction(playQueue->removeFromAct()); - playQueue->addAction(playQueueModel.removeDuplicatesAct()); - playQueue->addAction(promptClearPlayQueueAction); - playQueue->addAction(cropPlayQueueAction); - playQueue->addAction(StdActions::self()->savePlayQueueAction); - playQueue->addAction(addStreamToPlayQueueAction); - playQueue->addAction(addPlayQueueToStoredPlaylistAction); - playQueue->addAction(playQueueModel.shuffleAct()); - playQueue->addAction(playQueueModel.sortAct()); - playQueue->addAction(playQueueModel.undoAct()); - playQueue->addAction(playQueueModel.redoAct()); + playQueue->addAction(playQueue->removeFromAct(), true); ratingAction=new Action(i18n("Set Rating"), this); ratingAction->setMenu(new QMenu(0)); for (int i=0; i<((Song::Rating_Max/Song::Rating_Step)+1); ++i) { @@ -732,13 +722,24 @@ MainWindow::MainWindow(QWidget *parent) ratingAction->menu()->addAction(action); connect(action, SIGNAL(triggered(bool)), SLOT(setRating())); } - playQueue->addAction(ratingAction); - playQueue->addAction(setPriorityAction); - playQueue->addAction(stopAfterTrackAction); - playQueue->addAction(locateTrackAction); + playQueue->addAction(ratingAction, true); + playQueue->addAction(setPriorityAction, true); + playQueue->addAction(stopAfterTrackAction, true); + playQueue->addAction(locateTrackAction, true); #ifdef TAGLIB_FOUND - playQueue->addAction(StdActions::self()->editTagsAction); + playQueue->addAction(StdActions::self()->editTagsAction, true); #endif + playQueue->addSeparator(); + playQueue->addAction(playQueueModel.removeDuplicatesAct()); + playQueue->addAction(promptClearPlayQueueAction); + playQueue->addAction(cropPlayQueueAction); + playQueue->addAction(StdActions::self()->savePlayQueueAction); + playQueue->addAction(addStreamToPlayQueueAction); + playQueue->addAction(addPlayQueueToStoredPlaylistAction); + playQueue->addAction(playQueueModel.shuffleAct()); + playQueue->addAction(playQueueModel.sortAct()); + playQueue->addAction(playQueueModel.undoAct()); + playQueue->addAction(playQueueModel.redoAct()); playQueue->readConfig(); playlistsPage->setStartClosed(Settings::self()->playListsStartClosed()); diff --git a/widgets/playqueueview.cpp b/widgets/playqueueview.cpp index a3546fb3e..c2c168f3c 100644 --- a/widgets/playqueueview.cpp +++ b/widgets/playqueueview.cpp @@ -42,6 +42,7 @@ #include #include #include +#include #include // Exported by QtGui @@ -127,6 +128,8 @@ void PlayQueueGroupedView::paintEvent(QPaintEvent *e) PlayQueueView::PlayQueueView(QWidget *parent) : QStackedWidget(parent) + , contextMenu(0) + , selectContextMenu(0) , mode(ItemView::Mode_Count) , groupedView(0) , treeView(0) @@ -215,23 +218,25 @@ void PlayQueueView::setMode(ItemView::Mode m) groupedView->setIndentation(0); groupedView->setItemsExpandable(false); groupedView->setExpandsOnDoubleClick(false); - groupedView->setContextMenuPolicy(Qt::ActionsContextMenu); + groupedView->setContextMenuPolicy(Qt::CustomContextMenu); groupedView->installFilter(new KeyEventHandler(groupedView, removeFromAction)); addWidget(groupedView); connect(groupedView, SIGNAL(itemsSelected(bool)), SIGNAL(itemsSelected(bool))); connect(groupedView, SIGNAL(doubleClicked(const QModelIndex &)), SIGNAL(doubleClicked(const QModelIndex &))); + connect(groupedView, SIGNAL(customContextMenuRequested(QPoint)), SLOT(showMenu(QPoint))); updatePalette(); } break; case ItemView::Mode_Table: if (!treeView) { treeView=new PlayQueueTreeView(this); - treeView->setContextMenuPolicy(Qt::ActionsContextMenu); + treeView->setContextMenuPolicy(Qt::CustomContextMenu); treeView->installFilter(new KeyEventHandler(treeView, removeFromAction)); treeView->initHeader(); addWidget(treeView); connect(treeView, SIGNAL(itemsSelected(bool)), SIGNAL(itemsSelected(bool))); connect(treeView, SIGNAL(doubleClicked(const QModelIndex &)), SIGNAL(doubleClicked(const QModelIndex &))); + connect(treeView, SIGNAL(customContextMenuRequested(QPoint)), SLOT(showMenu(QPoint))); updatePalette(); } default: @@ -314,9 +319,28 @@ QModelIndex PlayQueueView::indexAt(const QPoint &point) return view()->indexAt(point); } -void PlayQueueView::addAction(QAction *a) +void PlayQueueView::addAction(QAction *a, bool withSelectionOnly) { - view()->addAction(a); + if (!contextMenu) { + contextMenu=new QMenu(this); + } + if (!selectContextMenu) { + selectContextMenu=new QMenu(this); + } + if (!withSelectionOnly) { + contextMenu->addAction(a); + } + selectContextMenu->addAction(a); +} + +void PlayQueueView::addSeparator() +{ + if (contextMenu) { + contextMenu->addSeparator(); + } + if (selectContextMenu) { + selectContextMenu->addSeparator(); + } } void PlayQueueView::setFocus() @@ -488,6 +512,15 @@ void PlayQueueView::streamFetchStatus(const QString &msg) msgOverlay->setText(msg); } +void PlayQueueView::showMenu(const QPoint &p) +{ + if (haveSelectedItems()) { + selectContextMenu->popup(view()->mapToGlobal(p)); + } else { + contextMenu->popup(view()->mapToGlobal(p)); + } +} + void PlayQueueView::drawBackdrop(QWidget *widget, const QSize &size) { if (BI_None==backgroundImageType) { diff --git a/widgets/playqueueview.h b/widgets/playqueueview.h index 262f262f1..57acf0ec0 100644 --- a/widgets/playqueueview.h +++ b/widgets/playqueueview.h @@ -95,7 +95,8 @@ public: void scrollTo(const QModelIndex &index, QAbstractItemView::ScrollHint hint); QModelIndex indexAt(const QPoint &point); void setModel(QAbstractItemModel *m) { view()->setModel(m); } - void addAction(QAction *a); + void addAction(QAction *a, bool withSelectionOnly=false); + void addSeparator(); void setFocus(); bool hasFocus(); QAbstractItemModel * model() { return view()->model(); } @@ -118,6 +119,9 @@ public Q_SLOTS: void setImage(const QImage &img); void streamFetchStatus(const QString &msg); +private Q_SLOTS: + void showMenu(const QPoint &p); + Q_SIGNALS: void itemsSelected(bool); void doubleClicked(const QModelIndex &); @@ -128,6 +132,8 @@ private: void drawBackdrop(QWidget *widget, const QSize &size); private: + QMenu *contextMenu; + QMenu *selectContextMenu; Action *removeFromAction; ItemView::Mode mode; PlayQueueGroupedView *groupedView;