diff --git a/src/playlist/playlistlistcontainer.cpp b/src/playlist/playlistlistcontainer.cpp index 3c082a2a..c894f6ac 100644 --- a/src/playlist/playlistlistcontainer.cpp +++ b/src/playlist/playlistlistcontainer.cpp @@ -116,6 +116,7 @@ PlaylistListContainer::PlaylistListContainer(QWidget *parent) proxy_->sort(0); ui_->tree->setModel(proxy_); + connect(ui_->tree, SIGNAL(ItemsSelectedChanged(bool)), SLOT(ItemsSelectedChanged(bool))); connect(ui_->tree, SIGNAL(doubleClicked(QModelIndex)), SLOT(ItemDoubleClicked(QModelIndex))); model_->invisibleRootItem()->setData(PlaylistListModel::Type_Folder, PlaylistListModel::Role_Type); @@ -168,6 +169,9 @@ void PlaylistListContainer::ReloadSettings() { void PlaylistListContainer::showEvent(QShowEvent *e) { + ui_->remove->setEnabled(ui_->tree->ItemsSelected()); + ui_->save_playlist->setEnabled(ui_->tree->ItemsSelected()); + // Loading icons is expensive so only do it when the view is first opened if (loaded_icons_) { QWidget::showEvent(e); @@ -331,6 +335,11 @@ void PlaylistListContainer::PlaylistPathChanged(int id, const QString &new_path) } +void PlaylistListContainer::ItemsSelectedChanged(const bool selected) { + ui_->remove->setEnabled(selected); + ui_->save_playlist->setEnabled(selected); +} + void PlaylistListContainer::ItemDoubleClicked(const QModelIndex &proxy_index) { const QModelIndex &index = proxy_->mapToSource(proxy_index); @@ -342,8 +351,7 @@ void PlaylistListContainer::ItemDoubleClicked(const QModelIndex &proxy_index) { } -void PlaylistListContainer::CopyToDevice() -{ +void PlaylistListContainer::CopyToDevice() { #ifndef Q_OS_WIN // Reuse the organize dialog, but set the detail about the playlist name if (!organize_dialog_) { diff --git a/src/playlist/playlistlistcontainer.h b/src/playlist/playlistlistcontainer.h index bf17560b..2f204d72 100644 --- a/src/playlist/playlistlistcontainer.h +++ b/src/playlist/playlistlistcontainer.h @@ -83,7 +83,9 @@ class PlaylistListContainer : public QWidget { void ActivePaused(); void ActiveStopped(); -private: + void ItemsSelectedChanged(const bool selected); + + private: QStandardItem *ItemForPlaylist(const QString &name, int id); QStandardItem *ItemForFolder(const QString &name) const; void RecursivelySetIcons(QStandardItem *parent) const; diff --git a/src/playlist/playlistlistview.cpp b/src/playlist/playlistlistview.cpp index 7de698a4..4ad710ca 100644 --- a/src/playlist/playlistlistview.cpp +++ b/src/playlist/playlistlistview.cpp @@ -56,3 +56,11 @@ void PlaylistListView::paintEvent(QPaintEvent *event) { AutoExpandingTreeView::paintEvent(event); } } + +bool PlaylistListView::ItemsSelected() const { + return selectionModel()->selectedRows().count() > 0; +} + +void PlaylistListView::selectionChanged(const QItemSelection&, const QItemSelection&) { + emit ItemsSelectedChanged(selectionModel()->selectedRows().count() > 0); +} diff --git a/src/playlist/playlistlistview.h b/src/playlist/playlistlistview.h index c4353c91..59eb2090 100644 --- a/src/playlist/playlistlistview.h +++ b/src/playlist/playlistlistview.h @@ -37,9 +37,15 @@ class PlaylistListView : public AutoExpandingTreeView { public: explicit PlaylistListView(QWidget *parent = nullptr); + bool ItemsSelected() const; + + signals: + void ItemsSelectedChanged(bool); + protected: // QWidget void paintEvent(QPaintEvent *event) override; + void selectionChanged(const QItemSelection&, const QItemSelection&) override; }; #endif // PLAYLISTVIEW_H