Only show track actions if we have a selection

This commit is contained in:
craig.p.drummond
2014-08-22 15:48:07 +00:00
committed by craig.p.drummond
parent 3768ff5602
commit dd6313abc6
3 changed files with 61 additions and 21 deletions

View File

@@ -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());

View File

@@ -42,6 +42,7 @@
#include <QFile>
#include <QPainter>
#include <QApplication>
#include <QMenu>
#include <qglobal.h>
// 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) {

View File

@@ -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;