From 1232bdee697b2106cbad0b7f257516e8aa0aa8ee Mon Sep 17 00:00:00 2001 From: "craig.p.drummond" Date: Tue, 22 Apr 2014 18:41:48 +0000 Subject: [PATCH] Re-organize play-queue view mode setting - make it easier to add more modes in future. --- CMakeLists.txt | 2 +- gui/interfacesettings.cpp | 67 ++++++++++++++------------ gui/interfacesettings.h | 2 +- gui/interfacesettings.ui | 17 ++----- gui/mainwindow.cpp | 7 ++- gui/settings.cpp | 11 +++-- gui/settings.h | 4 +- widgets/itemview.h | 2 +- widgets/playqueueview.cpp | 98 +++++++++++++++++++++++---------------- widgets/playqueueview.h | 10 ++-- 10 files changed, 117 insertions(+), 103 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ebaff1a03..5f63f001e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,7 +11,7 @@ set(DEBIAN_PACKAGE_SECTION "kde4") set(CPACK_SOURCE_GENERATOR "TBZ2") set(CPACK_PACKAGE_VERSION_MAJOR "1") set(CPACK_PACKAGE_VERSION_MINOR "3") -set(CPACK_PACKAGE_VERSION_PATCH "52") +set(CPACK_PACKAGE_VERSION_PATCH "53") set(CPACK_PACKAGE_VERSION_SPIN "") set(CPACK_PACKAGE_CONTACT "Craig Drummond ") set(CANTATA_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}") diff --git a/gui/interfacesettings.cpp b/gui/interfacesettings.cpp index 91b5a8924..f91489faa 100644 --- a/gui/interfacesettings.cpp +++ b/gui/interfacesettings.cpp @@ -67,20 +67,24 @@ static void addImageSizes(QComboBox *box) box->addItem(i18n("Extra Large"), MusicLibraryItemAlbum::CoverExtraLarge); } -static void addViewTypes(QComboBox *box, bool iconMode=false, bool groupedTree=false, bool table=false) +static QString viewTypeString(ItemView::Mode mode) { - box->addItem(i18n("Basic Tree (No Icons)"), ItemView::Mode_BasicTree); - box->addItem(i18n("Simple Tree"), ItemView::Mode_SimpleTree); - box->addItem(i18n("Detailed Tree"), ItemView::Mode_DetailedTree); - if (groupedTree) { - box->addItem(i18n("Grouped Albums"), ItemView::Mode_GroupedTree); + switch (mode) { + default: + case ItemView::Mode_BasicTree: return i18n("Basic Tree (No Icons)"); + case ItemView::Mode_SimpleTree: return i18n("Simple Tree"); + case ItemView::Mode_DetailedTree: return i18n("Detailed Tree"); + case ItemView::Mode_GroupedTree: return i18n("Grouped Albums"); + case ItemView::Mode_List: return i18n("List"); + case ItemView::Mode_IconTop: return i18n("Icon/List"); + case ItemView::Mode_Table: return i18n("Table"); } - box->addItem(i18n("List"), ItemView::Mode_List); - if (iconMode) { - box->addItem(i18n("Icon/List"), ItemView::Mode_IconTop); - } - if (table) { - box->addItem(i18n("Table"), ItemView::Mode_Table); +} + +static void addViewTypes(QComboBox *box, QList modes) +{ + foreach (ItemView::Mode m, modes) { + box->addItem(viewTypeString(m), m); } } @@ -100,7 +104,6 @@ static inline int getValue(QComboBox *box) return box->itemData(box->currentIndex()).toInt(); } -static const int constPlayQueueGrouped=0; static const char * constValueProperty="value"; InterfaceSettings::InterfaceSettings(QWidget *p) @@ -119,13 +122,16 @@ InterfaceSettings::InterfaceSettings(QWidget *p) setupUi(this); addImageSizes(libraryCoverSize); - addViewTypes(libraryView, true); + QList standardViews=QList() << ItemView::Mode_BasicTree << ItemView::Mode_SimpleTree + << ItemView::Mode_DetailedTree << ItemView::Mode_List; + addViewTypes(libraryView, QList() << standardViews << ItemView::Mode_IconTop); + addViewTypes(albumsView, QList() << standardViews << ItemView::Mode_IconTop); + addViewTypes(folderView, standardViews); + addViewTypes(playlistsView, QList() << standardViews << ItemView::Mode_GroupedTree << ItemView::Mode_Table); + addViewTypes(searchView, QList() << ItemView::Mode_List << ItemView::Mode_Table); + addViewTypes(playQueueView, QList() << ItemView::Mode_GroupedTree << ItemView::Mode_Table); + addImageSizes(albumsCoverSize); - addViewTypes(albumsView, true); - addViewTypes(folderView); - addViewTypes(playlistsView, false, true, true); - searchView->addItem(i18n("List"), ItemView::Mode_List); - searchView->addItem(i18n("Table"), ItemView::Mode_Table); addAlbumSorts(albumSort); addView(i18n("Play Queue"), QLatin1String("PlayQueuePage")); @@ -137,21 +143,21 @@ InterfaceSettings::InterfaceSettings(QWidget *p) addView(i18n("Dynamic Playlists"), QLatin1String("DynamicPage")); #endif #ifdef ENABLE_STREAMS - addViewTypes(streamsView); + addViewTypes(streamsView, standardViews); addView(i18n("Streams (e.g. Radio Stations)"), QLatin1String("StreamsPage")); #else REMOVE(streamsView) REMOVE(streamsViewLabel) #endif #ifdef ENABLE_ONLINE_SERVICES - addViewTypes(onlineView); + addViewTypes(onlineView, standardViews); addView(i18n("Online Services - Jamendo, Maganatune, SoundCloud, and Podcasts"), QLatin1String("OnlineServicesPage")); #else REMOVE(onlineView) REMOVE(onlineViewLabel) #endif #ifdef ENABLE_DEVICES_SUPPORT - addViewTypes(devicesView); + addViewTypes(devicesView, standardViews); addView(i18n("Devices - UMS, MTP (e.g. Android), and AudioCDs"), QLatin1String("DevicesPage")); #else REMOVE(devicesView) @@ -171,7 +177,7 @@ InterfaceSettings::InterfaceSettings(QWidget *p) connect(albumsView, SIGNAL(currentIndexChanged(int)), SLOT(albumsViewChanged())); connect(albumsCoverSize, SIGNAL(currentIndexChanged(int)), SLOT(albumsCoverSizeChanged())); connect(playlistsView, SIGNAL(currentIndexChanged(int)), SLOT(playlistsViewChanged())); - connect(playQueueGrouped, SIGNAL(currentIndexChanged(int)), SLOT(playQueueGroupedChanged())); + connect(playQueueView, SIGNAL(currentIndexChanged(int)), SLOT(playQueueViewChanged())); connect(systemTrayCheckBox, SIGNAL(toggled(bool)), minimiseOnClose, SLOT(setEnabled(bool))); connect(systemTrayCheckBox, SIGNAL(toggled(bool)), SLOT(enableStartupState())); connect(minimiseOnClose, SIGNAL(toggled(bool)), SLOT(enableStartupState())); @@ -242,7 +248,7 @@ void InterfaceSettings::load() #endif selectEntry(searchView, Settings::self()->searchView()); - playQueueGrouped->setCurrentIndex(Settings::self()->playQueueGrouped() ? 0 : 1); + selectEntry(playQueueView, Settings::self()->playQueueView()); playQueueAutoExpand->setChecked(Settings::self()->playQueueAutoExpand()); playQueueStartClosed->setChecked(Settings::self()->playQueueStartClosed()); playQueueScroll->setChecked(Settings::self()->playQueueScroll()); @@ -259,7 +265,7 @@ void InterfaceSettings::load() albumsViewChanged(); albumsCoverSizeChanged(); playlistsViewChanged(); - playQueueGroupedChanged(); + playQueueViewChanged(); forceSingleClick->setChecked(Settings::self()->forceSingleClick()); touchFriendly->setChecked(Settings::self()->touchFriendly()); systemTrayCheckBox->setChecked(Settings::self()->useSystemTray()); @@ -322,7 +328,7 @@ void InterfaceSettings::save() Settings::self()->saveDevicesView(getValue(devicesView)); #endif Settings::self()->saveSearchView(getValue(searchView)); - Settings::self()->savePlayQueueGrouped(constPlayQueueGrouped==playQueueGrouped->currentIndex()); + Settings::self()->savePlayQueueView(getValue(playQueueView)); Settings::self()->savePlayQueueAutoExpand(playQueueAutoExpand->isChecked()); Settings::self()->savePlayQueueStartClosed(playQueueStartClosed->isChecked()); Settings::self()->savePlayQueueScroll(playQueueScroll->isChecked()); @@ -504,15 +510,16 @@ void InterfaceSettings::albumsCoverSizeChanged() } } -void InterfaceSettings::playQueueGroupedChanged() +void InterfaceSettings::playQueueViewChanged() { - playQueueAutoExpand->setEnabled(constPlayQueueGrouped==playQueueGrouped->currentIndex()); - playQueueStartClosed->setEnabled(constPlayQueueGrouped==playQueueGrouped->currentIndex()); + bool grouped=ItemView::Mode_GroupedTree==getValue(playQueueView); + playQueueAutoExpand->setEnabled(grouped); + playQueueStartClosed->setEnabled(grouped); } void InterfaceSettings::playlistsViewChanged() { - bool grouped=getValue(playlistsView)==ItemView::Mode_GroupedTree; + bool grouped=ItemView::Mode_GroupedTree==getValue(playlistsView); playListsStartClosed->setEnabled(grouped); } diff --git a/gui/interfacesettings.h b/gui/interfacesettings.h index e8084a864..01ed048d0 100644 --- a/gui/interfacesettings.h +++ b/gui/interfacesettings.h @@ -53,7 +53,7 @@ private Q_SLOTS: void albumsViewChanged(); void albumsCoverSizeChanged(); void playlistsViewChanged(); - void playQueueGroupedChanged(); + void playQueueViewChanged(); void forceSingleClickChanged(); void touchFriendlyChanged(); void enableStartupState(); diff --git a/gui/interfacesettings.ui b/gui/interfacesettings.ui index f74ca61ed..cdf2dca7e 100644 --- a/gui/interfacesettings.ui +++ b/gui/interfacesettings.ui @@ -427,28 +427,17 @@ within the folder of the current track, or within its parent folder. If no image QFormLayout::ExpandingFieldsGrow - + Style: - playQueueGrouped + playQueueView - - - - Grouped Albums - - - - - Table - - - + diff --git a/gui/mainwindow.cpp b/gui/mainwindow.cpp index d1d87c7cc..146126e6e 100644 --- a/gui/mainwindow.cpp +++ b/gui/mainwindow.cpp @@ -697,8 +697,7 @@ MainWindow::MainWindow(QWidget *parent) playQueue->addAction(editPlayQueueTagsAction); #endif playQueue->addAction(playQueueModel.removeDuplicatesAct()); - playQueue->tree()->installEventFilter(new DeleteKeyEventHandler(playQueue->tree(), removeFromPlayQueueAction)); - playQueue->list()->installEventFilter(new DeleteKeyEventHandler(playQueue->list(), removeFromPlayQueueAction)); + playQueue->addDeletKeyEventFilter(removeFromPlayQueueAction); playQueue->readConfig(); playlistsPage->setStartClosed(Settings::self()->playListsStartClosed()); @@ -1415,11 +1414,11 @@ void MainWindow::updateSettings() bool wasAutoExpand=playQueue->isAutoExpand(); bool wasStartClosed=playQueue->isStartClosed(); + bool wasGrouped=playQueue->isGrouped(); playQueue->readConfig(); - if (Settings::self()->playQueueGrouped()!=playQueue->isGrouped() || + if (wasGrouped!=playQueue->isGrouped() || (playQueue->isGrouped() && (wasAutoExpand!=playQueue->isAutoExpand() || wasStartClosed!=playQueue->isStartClosed())) ) { - playQueue->setGrouped(Settings::self()->playQueueGrouped()); QModelIndex idx=playQueueProxyModel.mapFromSource(playQueueModel.index(playQueueModel.currentSongRow(), 0)); playQueue->updateRows(idx.row(), current.key, autoScrollPlayQueue && playQueueProxyModel.isEmpty() && MPDState_Playing==MPDStatus::self()->state()); } diff --git a/gui/settings.cpp b/gui/settings.cpp index 5d72d6af5..78b0232e8 100644 --- a/gui/settings.cpp +++ b/gui/settings.cpp @@ -681,9 +681,12 @@ bool Settings::alwaysUseHttp() #endif } -bool Settings::playQueueGrouped() +int Settings::playQueueView() { - return cfg.get("playQueueGrouped", true); + if (version()playQueueBackgroundOpacity(); backgroundBlur=Settings::self()->playQueueBackgroundBlur(); customBackgroundFile=Settings::self()->playQueueBackgroundFile(); - setGrouped(Settings::self()->playQueueGrouped()); + setMode((ItemView::Mode)Settings::self()->playQueueView()); switch (backgroundImageType) { case BI_None: if (origType!=backgroundImageType) { @@ -181,32 +182,41 @@ void PlayQueueView::saveConfig() } } -void PlayQueueView::setGrouped(bool g) +void PlayQueueView::setMode(ItemView::Mode m) { - bool grouped=groupedView==currentWidget(); + if (m==mode || (ItemView::Mode_GroupedTree!=m && ItemView::Mode_Table!=m)) { + return; + } - if (g!=grouped) { - if (grouped) { - treeView->setModel(groupedView->model()); - treeView->initHeader(); - groupedView->setModel(0); - } else { - treeView->saveHeader(); - groupedView->setModel(treeView->model()); - treeView->setModel(0); - } - grouped=g; - setCurrentWidget(grouped ? static_cast(groupedView) : static_cast(treeView)); - if (spinner) { - spinner->setWidget(view()); - if (spinner->isActive()) { - spinner->start(); - } - } - if (msgOverlay) { - msgOverlay->setWidget(view()); + if (ItemView::Mode_Table==mode) { + treeView->saveHeader(); + } + + QAbstractItemModel *model=view()->model(); + view()->setModel(0); + mode=m; + view()->setModel(model); + + if (ItemView::Mode_Table==mode) { + treeView->initHeader(); + } + + setCurrentWidget(static_cast(view())); + if (spinner) { + spinner->setWidget(view()); + if (spinner->isActive()) { + spinner->start(); } } + if (msgOverlay) { + msgOverlay->setWidget(view()); + } +} + +void PlayQueueView::addDeletKeyEventFilter(QAction *act) +{ + groupedView->installEventFilter(new DeleteKeyEventHandler(groupedView, act)); + treeView->installEventFilter(new DeleteKeyEventHandler(treeView, act)); } void PlayQueueView::setAutoExpand(bool ae) @@ -231,14 +241,14 @@ bool PlayQueueView::isStartClosed() const void PlayQueueView::setFilterActive(bool f) { - if (isGrouped()) { + if (ItemView::Mode_GroupedTree==mode) { groupedView->setFilterActive(f); } } void PlayQueueView::updateRows(qint32 row, quint16 curAlbum, bool scroll) { - if (isGrouped()) { + if (ItemView::Mode_GroupedTree==mode) { groupedView->updateRows(row, curAlbum, scroll); } } @@ -277,12 +287,20 @@ void PlayQueueView::setContextMenuPolicy(Qt::ContextMenuPolicy policy) bool PlayQueueView::haveSelectedItems() { - return isGrouped() ? groupedView->haveSelectedItems() : treeView->haveSelectedItems(); + switch (mode) { + default: + case ItemView::Mode_GroupedTree: return groupedView->haveSelectedItems(); + case ItemView::Mode_Table: return treeView->haveSelectedItems(); + } } bool PlayQueueView::haveUnSelectedItems() { - return isGrouped() ? groupedView->haveUnSelectedItems() : treeView->haveUnSelectedItems(); + switch (mode) { + default: + case ItemView::Mode_GroupedTree: return groupedView->haveUnSelectedItems(); + case ItemView::Mode_Table: return treeView->haveUnSelectedItems(); + } } void PlayQueueView::clearSelection() @@ -295,29 +313,27 @@ void PlayQueueView::clearSelection() } } -QAbstractItemView * PlayQueueView::tree() const -{ - return treeView; -} - -QAbstractItemView * PlayQueueView::list() const -{ - return groupedView; -} - QAbstractItemView * PlayQueueView::view() const { - return isGrouped() ? (QAbstractItemView *)groupedView : (QAbstractItemView *)treeView; + switch (mode) { + default: + case ItemView::Mode_GroupedTree: return (QAbstractItemView *)groupedView; + case ItemView::Mode_Table: return (QAbstractItemView *)treeView; + } } bool PlayQueueView::hasFocus() const { - return isGrouped() ? groupedView->hasFocus() : treeView->hasFocus(); + return view()->hasFocus(); } QModelIndexList PlayQueueView::selectedIndexes(bool sorted) const { - return isGrouped() ? groupedView->selectedIndexes(sorted) : treeView->selectedIndexes(sorted); + switch (mode) { + default: + case ItemView::Mode_GroupedTree: return groupedView->selectedIndexes(sorted); + case ItemView::Mode_Table: return treeView->selectedIndexes(sorted); + } } QList PlayQueueView::selectedSongs() const diff --git a/widgets/playqueueview.h b/widgets/playqueueview.h index 8fcd0540e..fcf3a04c9 100644 --- a/widgets/playqueueview.h +++ b/widgets/playqueueview.h @@ -33,6 +33,7 @@ #include "tableview.h" #include "groupedview.h" #include "song.h" +#include "itemview.h" class QAbstractItemModel; class QAction; @@ -82,13 +83,13 @@ public: PlayQueueView(QWidget *parent=0); virtual ~PlayQueueView(); - // Returns true if background cover needs to be updated... void readConfig(); void saveConfig(); void initHeader() { treeView->initHeader(); } void saveHeader(); - void setGrouped(bool g); - bool isGrouped() const { return currentWidget()==(QWidget *)groupedView; } + void setMode(ItemView::Mode m); + void addDeletKeyEventFilter(QAction *act); + bool isGrouped() const { return ItemView::Mode_GroupedTree==mode; } void setAutoExpand(bool ae); bool isAutoExpand() const; void setStartClosed(bool sc); @@ -107,8 +108,6 @@ public: bool haveUnSelectedItems(); void setCurrentIndex(const QModelIndex &idx) { view()->setCurrentIndex(idx); } void clearSelection(); - QAbstractItemView * tree() const; - QAbstractItemView * list() const; QAbstractItemView * view() const; bool hasFocus() const; QModelIndexList selectedIndexes(bool sorted=true) const; @@ -132,6 +131,7 @@ private: void drawBackdrop(QWidget *widget, const QSize &size); private: + ItemView::Mode mode; PlayQueueGroupedView *groupedView; PlayQueueTreeView *treeView; Spinner *spinner;