diff --git a/autotests/viewmanagertest.cpp b/autotests/viewmanagertest.cpp index b89e21f4..e0da2d0f 100644 --- a/autotests/viewmanagertest.cpp +++ b/autotests/viewmanagertest.cpp @@ -1,792 +1,814 @@ /* * Copyright 2015-2017 Matthieu Gallien * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . */ #include "viewmanager.h" - +#include "viewslistdata.h" #include class ViewManagerTests: public QObject { Q_OBJECT public: explicit ViewManagerTests(QObject *aParent = nullptr) : QObject(aParent) { } private Q_SLOTS: void initTestCase() { qRegisterMetaType("ViewManager::SortOrder"); qRegisterMetaType("ViewManager::RadioSpecificStyle"); qRegisterMetaType("ViewManager::AlbumViewStyle"); qRegisterMetaType("ElisaUtils::PlayListEntryType"); qRegisterMetaType("ElisaUtils::FilterType"); qRegisterMetaType("ViewManager::ViewCanBeRated"); qRegisterMetaType("ViewManager::DelegateUseSecondaryText"); qRegisterMetaType("ViewManager::AlbumCardinality"); } void openAlbumViewTest() { ViewManager viewManager; + ViewsListData viewsData; + viewManager.setViewsData(&viewsData); QSignalSpy openGridViewSpy(&viewManager, &ViewManager::openGridView); QSignalSpy openListViewSpy(&viewManager, &ViewManager::openListView); QSignalSpy switchFilesBrowserViewSpy(&viewManager, &ViewManager::switchFilesBrowserView); QSignalSpy popOneViewSpy(&viewManager, &ViewManager::popOneView); viewManager.openChildView(QStringLiteral("album1"), QStringLiteral("artist1"), {}, 12, ElisaUtils::Album); QCOMPARE(openGridViewSpy.count(), 1); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); QCOMPARE(openGridViewSpy.at(0).count(), 11); QCOMPARE(openGridViewSpy.at(0).at(0).value(), ElisaUtils::NoFilter); QCOMPARE(openGridViewSpy.at(0).at(5).value(), ElisaUtils::Album); viewManager.viewIsLoaded(); QCOMPARE(openGridViewSpy.count(), 1); QCOMPARE(openListViewSpy.count(), 1); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); QCOMPARE(openListViewSpy.at(0).count(), 12); QCOMPARE(openListViewSpy.at(0).at(2), QStringLiteral("album1")); QCOMPARE(openListViewSpy.at(0).at(3), QStringLiteral("artist1")); viewManager.viewIsLoaded(); QCOMPARE(openGridViewSpy.count(), 1); QCOMPARE(openListViewSpy.count(), 1); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); } void openAlbumView2Test() { ViewManager viewManager; + ViewsListData viewsData; + viewManager.setViewsData(&viewsData); QSignalSpy openGridViewSpy(&viewManager, &ViewManager::openGridView); QSignalSpy openListViewSpy(&viewManager, &ViewManager::openListView); QSignalSpy switchFilesBrowserViewSpy(&viewManager, &ViewManager::switchFilesBrowserView); QSignalSpy popOneViewSpy(&viewManager, &ViewManager::popOneView); viewManager.openView(3); QCOMPARE(openGridViewSpy.count(), 1); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); QCOMPARE(openGridViewSpy.at(0).count(), 11); QCOMPARE(openGridViewSpy.at(0).at(0).value(), ElisaUtils::NoFilter); QCOMPARE(openGridViewSpy.at(0).at(5).value(), ElisaUtils::Album); viewManager.viewIsLoaded(); QCOMPARE(openGridViewSpy.count(), 1); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); viewManager.openChildView(QStringLiteral("album1"), QStringLiteral("artist1"), {}, 12, ElisaUtils::Album); QCOMPARE(openGridViewSpy.count(), 1); QCOMPARE(openListViewSpy.count(), 1); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); QCOMPARE(openListViewSpy.at(0).count(), 12); QCOMPARE(openListViewSpy.at(0).at(2), QStringLiteral("album1")); QCOMPARE(openListViewSpy.at(0).at(3), QStringLiteral("artist1")); viewManager.viewIsLoaded(); QCOMPARE(openGridViewSpy.count(), 1); QCOMPARE(openListViewSpy.count(), 1); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); viewManager.openView(3); QCOMPARE(openGridViewSpy.count(), 2); QCOMPARE(openListViewSpy.count(), 1); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); QCOMPARE(openGridViewSpy.at(1).count(), 11); QCOMPARE(openGridViewSpy.at(1).at(0).value(), ElisaUtils::NoFilter); QCOMPARE(openGridViewSpy.at(1).at(5).value(), ElisaUtils::Album); viewManager.viewIsLoaded(); QCOMPARE(openGridViewSpy.count(), 2); QCOMPARE(openListViewSpy.count(), 1); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); viewManager.openChildView(QStringLiteral("album1"), QStringLiteral("artist1"), {}, 12, ElisaUtils::Album); QCOMPARE(openGridViewSpy.count(), 2); QCOMPARE(openListViewSpy.count(), 2); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); QCOMPARE(openListViewSpy.at(1).count(), 12); QCOMPARE(openListViewSpy.at(1).at(2), QStringLiteral("album1")); QCOMPARE(openListViewSpy.at(1).at(3), QStringLiteral("artist1")); viewManager.viewIsLoaded(); QCOMPARE(openGridViewSpy.count(), 2); QCOMPARE(openListViewSpy.count(), 2); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); } void openAlbumView3Test() { ViewManager viewManager; + ViewsListData viewsData; + viewManager.setViewsData(&viewsData); QSignalSpy openGridViewSpy(&viewManager, &ViewManager::openGridView); QSignalSpy openListViewSpy(&viewManager, &ViewManager::openListView); QSignalSpy switchFilesBrowserViewSpy(&viewManager, &ViewManager::switchFilesBrowserView); QSignalSpy popOneViewSpy(&viewManager, &ViewManager::popOneView); viewManager.openView(3); QCOMPARE(openGridViewSpy.count(), 1); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); QCOMPARE(openGridViewSpy.at(0).count(), 11); QCOMPARE(openGridViewSpy.at(0).at(0).value(), ElisaUtils::NoFilter); QCOMPARE(openGridViewSpy.at(0).at(5).value(), ElisaUtils::Album); viewManager.viewIsLoaded(); QCOMPARE(openGridViewSpy.count(), 1); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); viewManager.openChildView(QStringLiteral("album1"), QStringLiteral("artist1"), {}, 12, ElisaUtils::Album); QCOMPARE(openGridViewSpy.count(), 1); QCOMPARE(openListViewSpy.count(), 1); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); QCOMPARE(openListViewSpy.at(0).count(), 12); QCOMPARE(openListViewSpy.at(0).at(2), QStringLiteral("album1")); QCOMPARE(openListViewSpy.at(0).at(3), QStringLiteral("artist1")); viewManager.viewIsLoaded(); QCOMPARE(openGridViewSpy.count(), 1); QCOMPARE(openListViewSpy.count(), 1); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); viewManager.goBack(); QCOMPARE(openGridViewSpy.count(), 1); QCOMPARE(openListViewSpy.count(), 1); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 1); viewManager.viewIsLoaded(); QCOMPARE(openGridViewSpy.count(), 1); QCOMPARE(openListViewSpy.count(), 1); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 1); viewManager.openChildView(QStringLiteral("album1"), QStringLiteral("artist1"), {}, 12, ElisaUtils::Album); QCOMPARE(openGridViewSpy.count(), 1); QCOMPARE(openListViewSpy.count(), 2); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 1); QCOMPARE(openListViewSpy.at(1).count(), 12); QCOMPARE(openListViewSpy.at(1).at(2), QStringLiteral("album1")); QCOMPARE(openListViewSpy.at(1).at(3), QStringLiteral("artist1")); viewManager.viewIsLoaded(); QCOMPARE(openGridViewSpy.count(), 1); QCOMPARE(openListViewSpy.count(), 2); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 1); } void openArtistViewTest() { ViewManager viewManager; + ViewsListData viewsData; + viewManager.setViewsData(&viewsData); QSignalSpy openGridViewSpy(&viewManager, &ViewManager::openGridView); QSignalSpy openListViewSpy(&viewManager, &ViewManager::openListView); QSignalSpy switchFilesBrowserViewSpy(&viewManager, &ViewManager::switchFilesBrowserView); QSignalSpy popOneViewSpy(&viewManager, &ViewManager::popOneView); viewManager.openChildView(QStringLiteral("artist1"), {}, {}, 0, ElisaUtils::Artist); QCOMPARE(openGridViewSpy.count(), 1); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); QCOMPARE(openGridViewSpy.at(0).count(), 11); QCOMPARE(openGridViewSpy.at(0).at(0).value(), ElisaUtils::NoFilter); QCOMPARE(openGridViewSpy.at(0).at(5).value(), ElisaUtils::Artist); viewManager.viewIsLoaded(); QCOMPARE(openGridViewSpy.count(), 2); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); QCOMPARE(openGridViewSpy.at(1).count(), 11); QCOMPARE(openGridViewSpy.at(1).at(0).value(), ElisaUtils::FilterByArtist); QCOMPARE(openGridViewSpy.at(1).at(5).value(), ElisaUtils::Album); QCOMPARE(openGridViewSpy.at(1).at(8).toString(), QStringLiteral("artist1")); viewManager.viewIsLoaded(); QCOMPARE(openGridViewSpy.count(), 2); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); } void openArtistView2Test() { ViewManager viewManager; + ViewsListData viewsData; + viewManager.setViewsData(&viewsData); QSignalSpy openGridViewSpy(&viewManager, &ViewManager::openGridView); QSignalSpy openListViewSpy(&viewManager, &ViewManager::openListView); QSignalSpy switchFilesBrowserViewSpy(&viewManager, &ViewManager::switchFilesBrowserView); QSignalSpy popOneViewSpy(&viewManager, &ViewManager::popOneView); viewManager.openView(4); QCOMPARE(openGridViewSpy.count(), 1); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); QCOMPARE(openGridViewSpy.at(0).count(), 11); QCOMPARE(openGridViewSpy.at(0).at(0).value(), ElisaUtils::NoFilter); QCOMPARE(openGridViewSpy.at(0).at(5).value(), ElisaUtils::Artist); viewManager.viewIsLoaded(); QCOMPARE(openGridViewSpy.count(), 1); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); viewManager.openChildView(QStringLiteral("artist1"), {}, {}, 0, ElisaUtils::Artist); QCOMPARE(openGridViewSpy.count(), 2); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); QCOMPARE(openGridViewSpy.at(1).count(), 11); QCOMPARE(openGridViewSpy.at(1).at(0).value(), ElisaUtils::FilterByArtist); QCOMPARE(openGridViewSpy.at(1).at(5).value(), ElisaUtils::Album); QCOMPARE(openGridViewSpy.at(1).at(8).toString(), QStringLiteral("artist1")); viewManager.viewIsLoaded(); QCOMPARE(openGridViewSpy.count(), 2); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); viewManager.openView(4); QCOMPARE(openGridViewSpy.count(), 3); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); QCOMPARE(openGridViewSpy.at(2).count(), 11); QCOMPARE(openGridViewSpy.at(2).at(0).value(), ElisaUtils::NoFilter); QCOMPARE(openGridViewSpy.at(2).at(5).value(), ElisaUtils::Artist); viewManager.viewIsLoaded(); QCOMPARE(openGridViewSpy.count(), 3); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); viewManager.openChildView(QStringLiteral("artist1"), {}, {}, 0, ElisaUtils::Artist); QCOMPARE(openGridViewSpy.count(), 4); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); QCOMPARE(openGridViewSpy.at(3).count(), 11); QCOMPARE(openGridViewSpy.at(3).at(0).value(), ElisaUtils::FilterByArtist); QCOMPARE(openGridViewSpy.at(3).at(5).value(), ElisaUtils::Album); QCOMPARE(openGridViewSpy.at(3).at(8).toString(), QStringLiteral("artist1")); viewManager.viewIsLoaded(); QCOMPARE(openGridViewSpy.count(), 4); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); } void openArtistView3Test() { ViewManager viewManager; + ViewsListData viewsData; + viewManager.setViewsData(&viewsData); QSignalSpy openGridViewSpy(&viewManager, &ViewManager::openGridView); QSignalSpy openListViewSpy(&viewManager, &ViewManager::openListView); QSignalSpy switchFilesBrowserViewSpy(&viewManager, &ViewManager::switchFilesBrowserView); QSignalSpy popOneViewSpy(&viewManager, &ViewManager::popOneView); viewManager.openView(4); QCOMPARE(openGridViewSpy.count(), 1); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); QCOMPARE(openGridViewSpy.at(0).count(), 11); QCOMPARE(openGridViewSpy.at(0).at(0).value(), ElisaUtils::NoFilter); QCOMPARE(openGridViewSpy.at(0).at(5).value(), ElisaUtils::Artist); viewManager.viewIsLoaded(); QCOMPARE(openGridViewSpy.count(), 1); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); viewManager.openChildView(QStringLiteral("artist1"), {}, {}, 0, ElisaUtils::Artist); QCOMPARE(openGridViewSpy.count(), 2); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); QCOMPARE(openGridViewSpy.at(1).count(), 11); QCOMPARE(openGridViewSpy.at(1).at(0).value(), ElisaUtils::FilterByArtist); QCOMPARE(openGridViewSpy.at(1).at(5).value(), ElisaUtils::Album); QCOMPARE(openGridViewSpy.at(1).at(8).toString(), QStringLiteral("artist1")); viewManager.viewIsLoaded(); QCOMPARE(openGridViewSpy.count(), 2); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); viewManager.goBack(); QCOMPARE(openGridViewSpy.count(), 2); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 1); viewManager.viewIsLoaded(); QCOMPARE(openGridViewSpy.count(), 2); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 1); viewManager.openChildView(QStringLiteral("artist1"), {}, {}, 0, ElisaUtils::Artist); QCOMPARE(openGridViewSpy.count(), 3); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 1); QCOMPARE(openGridViewSpy.at(2).count(), 11); QCOMPARE(openGridViewSpy.at(2).at(0).value(), ElisaUtils::FilterByArtist); QCOMPARE(openGridViewSpy.at(2).at(5).value(), ElisaUtils::Album); QCOMPARE(openGridViewSpy.at(2).at(8).toString(), QStringLiteral("artist1")); viewManager.viewIsLoaded(); QCOMPARE(openGridViewSpy.count(), 3); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 1); } void openGenreViewTest() { ViewManager viewManager; + ViewsListData viewsData; + viewManager.setViewsData(&viewsData); QSignalSpy openGridViewSpy(&viewManager, &ViewManager::openGridView); QSignalSpy openListViewSpy(&viewManager, &ViewManager::openListView); QSignalSpy switchFilesBrowserViewSpy(&viewManager, &ViewManager::switchFilesBrowserView); QSignalSpy popOneViewSpy(&viewManager, &ViewManager::popOneView); viewManager.openChildView(QStringLiteral("genre1"), {}, {}, 0, ElisaUtils::Genre); QCOMPARE(openGridViewSpy.count(), 1); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); QCOMPARE(openGridViewSpy.at(0).count(), 11); QCOMPARE(openGridViewSpy.at(0).at(0).value(), ElisaUtils::NoFilter); QCOMPARE(openGridViewSpy.at(0).at(5).value(), ElisaUtils::Genre); viewManager.viewIsLoaded(); QCOMPARE(openGridViewSpy.count(), 2); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); QCOMPARE(openGridViewSpy.at(1).count(), 11); QCOMPARE(openGridViewSpy.at(1).at(0).value(), ElisaUtils::FilterByGenre); QCOMPARE(openGridViewSpy.at(1).at(5).value(), ElisaUtils::Artist); QCOMPARE(openGridViewSpy.at(1).at(7).toString(), QStringLiteral("genre1")); viewManager.viewIsLoaded(); QCOMPARE(openGridViewSpy.count(), 2); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); } void openGenreView2Test() { ViewManager viewManager; + ViewsListData viewsData; + viewManager.setViewsData(&viewsData); QSignalSpy openGridViewSpy(&viewManager, &ViewManager::openGridView); QSignalSpy openListViewSpy(&viewManager, &ViewManager::openListView); QSignalSpy switchFilesBrowserViewSpy(&viewManager, &ViewManager::switchFilesBrowserView); QSignalSpy popOneViewSpy(&viewManager, &ViewManager::popOneView); viewManager.openView(6); QCOMPARE(openGridViewSpy.count(), 1); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); QCOMPARE(openGridViewSpy.at(0).count(), 11); QCOMPARE(openGridViewSpy.at(0).at(0).value(), ElisaUtils::NoFilter); QCOMPARE(openGridViewSpy.at(0).at(5).value(), ElisaUtils::Genre); viewManager.viewIsLoaded(); QCOMPARE(openGridViewSpy.count(), 1); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); viewManager.openChildView(QStringLiteral("genre1"), {}, {}, 0, ElisaUtils::Genre); QCOMPARE(openGridViewSpy.count(), 2); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); QCOMPARE(openGridViewSpy.at(1).count(), 11); QCOMPARE(openGridViewSpy.at(1).at(0).value(), ElisaUtils::FilterByGenre); QCOMPARE(openGridViewSpy.at(1).at(5).value(), ElisaUtils::Artist); QCOMPARE(openGridViewSpy.at(1).at(7).toString(), QStringLiteral("genre1")); viewManager.viewIsLoaded(); QCOMPARE(openGridViewSpy.count(), 2); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); viewManager.openView(6); QCOMPARE(openGridViewSpy.count(), 3); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); QCOMPARE(openGridViewSpy.at(2).count(), 11); QCOMPARE(openGridViewSpy.at(2).at(0).value(), ElisaUtils::NoFilter); QCOMPARE(openGridViewSpy.at(2).at(5).value(), ElisaUtils::Genre); viewManager.viewIsLoaded(); QCOMPARE(openGridViewSpy.count(), 3); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); viewManager.openChildView(QStringLiteral("genre1"), {}, {}, 0, ElisaUtils::Genre); QCOMPARE(openGridViewSpy.count(), 4); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); QCOMPARE(openGridViewSpy.at(3).count(), 11); QCOMPARE(openGridViewSpy.at(3).at(0).value(), ElisaUtils::FilterByGenre); QCOMPARE(openGridViewSpy.at(3).at(5).value(), ElisaUtils::Artist); QCOMPARE(openGridViewSpy.at(3).at(7).toString(), QStringLiteral("genre1")); viewManager.viewIsLoaded(); QCOMPARE(openGridViewSpy.count(), 4); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); } void openGenreView3Test() { ViewManager viewManager; + ViewsListData viewsData; + viewManager.setViewsData(&viewsData); QSignalSpy openGridViewSpy(&viewManager, &ViewManager::openGridView); QSignalSpy openListViewSpy(&viewManager, &ViewManager::openListView); QSignalSpy switchFilesBrowserViewSpy(&viewManager, &ViewManager::switchFilesBrowserView); QSignalSpy popOneViewSpy(&viewManager, &ViewManager::popOneView); viewManager.openView(6); QCOMPARE(openGridViewSpy.count(), 1); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); QCOMPARE(openGridViewSpy.at(0).count(), 11); QCOMPARE(openGridViewSpy.at(0).at(0).value(), ElisaUtils::NoFilter); QCOMPARE(openGridViewSpy.at(0).at(5).value(), ElisaUtils::Genre); viewManager.viewIsLoaded(); QCOMPARE(openGridViewSpy.count(), 1); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); viewManager.openChildView(QStringLiteral("genre1"), {}, {}, 0, ElisaUtils::Genre); QCOMPARE(openGridViewSpy.count(), 2); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); QCOMPARE(openGridViewSpy.at(1).count(), 11); QCOMPARE(openGridViewSpy.at(1).at(0).value(), ElisaUtils::FilterByGenre); QCOMPARE(openGridViewSpy.at(1).at(5).value(), ElisaUtils::Artist); QCOMPARE(openGridViewSpy.at(1).at(7).toString(), QStringLiteral("genre1")); viewManager.viewIsLoaded(); QCOMPARE(openGridViewSpy.count(), 2); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); viewManager.goBack(); QCOMPARE(openGridViewSpy.count(), 2); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 1); viewManager.viewIsLoaded(); QCOMPARE(openGridViewSpy.count(), 2); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 1); viewManager.openChildView(QStringLiteral("genre1"), {}, {}, 0, ElisaUtils::Genre); QCOMPARE(openGridViewSpy.count(), 3); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 1); QCOMPARE(openGridViewSpy.at(2).count(), 11); QCOMPARE(openGridViewSpy.at(2).at(0).value(), ElisaUtils::FilterByGenre); QCOMPARE(openGridViewSpy.at(2).at(5).value(), ElisaUtils::Artist); QCOMPARE(openGridViewSpy.at(2).at(7).toString(), QStringLiteral("genre1")); viewManager.viewIsLoaded(); QCOMPARE(openGridViewSpy.count(), 3); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 1); } void openArtistFromGenreViewTest() { ViewManager viewManager; + ViewsListData viewsData; + viewManager.setViewsData(&viewsData); QSignalSpy openGridViewSpy(&viewManager, &ViewManager::openGridView); QSignalSpy openListViewSpy(&viewManager, &ViewManager::openListView); QSignalSpy switchFilesBrowserViewSpy(&viewManager, &ViewManager::switchFilesBrowserView); QSignalSpy popOneViewSpy(&viewManager, &ViewManager::popOneView); viewManager.openView(6); QCOMPARE(openGridViewSpy.count(), 1); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); QCOMPARE(openGridViewSpy.at(0).count(), 11); QCOMPARE(openGridViewSpy.at(0).at(0).value(), ElisaUtils::NoFilter); QCOMPARE(openGridViewSpy.at(0).at(5).value(), ElisaUtils::Genre); viewManager.viewIsLoaded(); QCOMPARE(openGridViewSpy.count(), 1); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); viewManager.openChildView(QStringLiteral("genre1"), {}, {}, 0, ElisaUtils::Genre); QCOMPARE(openGridViewSpy.count(), 2); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); QCOMPARE(openGridViewSpy.at(1).count(), 11); QCOMPARE(openGridViewSpy.at(1).at(0).value(), ElisaUtils::FilterByGenre); QCOMPARE(openGridViewSpy.at(1).at(5).value(), ElisaUtils::Artist); QCOMPARE(openGridViewSpy.at(1).at(7).toString(), QStringLiteral("genre1")); viewManager.viewIsLoaded(); viewManager.openChildView(QStringLiteral("artist1"), {}, {}, 0, ElisaUtils::Artist); QCOMPARE(openGridViewSpy.count(), 3); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); QCOMPARE(openGridViewSpy.at(2).count(), 11); QCOMPARE(openGridViewSpy.at(2).at(0).value(), ElisaUtils::FilterByGenreAndArtist); QCOMPARE(openGridViewSpy.at(2).at(5).value(), ElisaUtils::Album); QCOMPARE(openGridViewSpy.at(2).at(7).toString(), QStringLiteral("genre1")); QCOMPARE(openGridViewSpy.at(2).at(8).toString(), QStringLiteral("artist1")); viewManager.viewIsLoaded(); QCOMPARE(openGridViewSpy.count(), 3); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); } void openArtistViewAndAlbumFromAnotherArtistTest() { ViewManager viewManager; + ViewsListData viewsData; + viewManager.setViewsData(&viewsData); QSignalSpy openGridViewSpy(&viewManager, &ViewManager::openGridView); QSignalSpy openListViewSpy(&viewManager, &ViewManager::openListView); QSignalSpy switchFilesBrowserViewSpy(&viewManager, &ViewManager::switchFilesBrowserView); QSignalSpy popOneViewSpy(&viewManager, &ViewManager::popOneView); viewManager.openChildView(QStringLiteral("artist1"), {}, {}, 0, ElisaUtils::Artist); QCOMPARE(openGridViewSpy.count(), 1); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); QCOMPARE(openGridViewSpy.at(0).count(), 11); QCOMPARE(openGridViewSpy.at(0).at(0).value(), ElisaUtils::NoFilter); QCOMPARE(openGridViewSpy.at(0).at(5).value(), ElisaUtils::Artist); viewManager.viewIsLoaded(); QCOMPARE(openGridViewSpy.count(), 2); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); QCOMPARE(openGridViewSpy.at(1).count(), 11); QCOMPARE(openGridViewSpy.at(1).at(0).value(), ElisaUtils::FilterByArtist); QCOMPARE(openGridViewSpy.at(1).at(5).value(), ElisaUtils::Album); QCOMPARE(openGridViewSpy.at(1).at(8).toString(), QStringLiteral("artist1")); viewManager.viewIsLoaded(); QCOMPARE(openGridViewSpy.count(), 2); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); viewManager.openChildView(QStringLiteral("album1"), QStringLiteral("artist2"), {}, 0, ElisaUtils::Album); QCOMPARE(openGridViewSpy.count(), 3); QCOMPARE(openListViewSpy.count(), 0); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); QCOMPARE(openGridViewSpy.at(2).count(), 11); QCOMPARE(openGridViewSpy.at(2).at(0).value(), ElisaUtils::FilterByArtist); QCOMPARE(openGridViewSpy.at(2).at(5).value(), ElisaUtils::Album); QCOMPARE(openGridViewSpy.at(2).at(8).toString(), QStringLiteral("artist2")); viewManager.viewIsLoaded(); QCOMPARE(openGridViewSpy.count(), 3); QCOMPARE(openListViewSpy.count(), 1); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); QCOMPARE(openListViewSpy.at(0).count(), 12); QCOMPARE(openListViewSpy.at(0).at(0).value(), ElisaUtils::FilterById); QCOMPARE(openListViewSpy.at(0).at(2).toString(), QStringLiteral("album1")); QCOMPARE(openListViewSpy.at(0).at(3).toString(), QStringLiteral("artist2")); QCOMPARE(openListViewSpy.at(0).at(6).value(), ElisaUtils::Track); viewManager.viewIsLoaded(); QCOMPARE(openGridViewSpy.count(), 3); QCOMPARE(openListViewSpy.count(), 1); QCOMPARE(switchFilesBrowserViewSpy.count(), 0); QCOMPARE(popOneViewSpy.count(), 0); } }; QTEST_GUILESS_MAIN(ViewManagerTests) #include "viewmanagertest.moc" diff --git a/src/qml/ContentView.qml b/src/qml/ContentView.qml index cc1869f4..f60d9db6 100644 --- a/src/qml/ContentView.qml +++ b/src/qml/ContentView.qml @@ -1,336 +1,342 @@ /* * Copyright 2016-2018 Matthieu Gallien * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . */ import QtQuick 2.7 import QtQuick.Controls 2.2 import QtQuick.Layouts 1.2 import QtQuick.Window 2.2 import org.kde.elisa 1.0 import org.kde.kirigami 2.8 as Kirigami RowLayout { id: contentViewContainer spacing: 0 property bool showPlaylist property bool showExpandedFilterView property alias currentViewIndex: listViews.currentIndex function goBack() { viewManager.goBack() } function openArtist(name) { viewManager.openChildView(name, '', elisaTheme.artistIcon, 0, ElisaUtils.Artist) } function openAlbum(album, artist, image, albumID) { image = !image ? elisaTheme.defaultAlbumImage : image; viewManager.openChildView(album, artist, image, albumID, ElisaUtils.Album); } function openNowPlaying() { viewManager.closeAllViews(); } ViewManager { id: viewManager + viewsData: viewsData + onOpenGridView: { if (expectedDepth === 1) { listViews.setCurrentIndex(viewManager.viewIndex) } while(browseStackView.depth > expectedDepth) { browseStackView.pop() } browseStackView.push(dataGridView, { filterType: filterType, mainTitle: mainTitle, secondaryTitle: secondaryTitle, image: imageUrl, modelType: dataType, defaultIcon: viewDefaultIcon, showRating: viewShowRating, delegateDisplaySecondaryText: viewDelegateDisplaySecondaryText, genreFilterText: genreNameFilter, artistFilter: artistNameFilter, isSubPage: (browseStackView.depth >= 2), stackView: browseStackView, opacity: 0, }) } onOpenListView: { if (expectedDepth === 1) { listViews.setCurrentIndex(viewManager.viewIndex) } while(browseStackView.depth > expectedDepth) { browseStackView.pop() } browseStackView.push(dataListView, { filterType: filterType, isSubPage: expectedDepth > 1, mainTitle: mainTitle, secondaryTitle: secondaryTitle, databaseId: databaseId, image: imageUrl, modelType: dataType, sortRole: sortRole, sortAscending: sortOrder, stackView: browseStackView, displaySingleAlbum: displaySingleAlbum, showSection: showDiscHeaders, opacity: 0, radioCase: radioCase }) } onSwitchFilesBrowserView: { listViews.setCurrentIndex(viewManager.viewIndex) while(browseStackView.depth > expectedDepth) { browseStackView.pop() } browseStackView.push(filesBrowserView, { mainTitle: mainTitle, image: imageUrl, opacity: 0, }) } onSwitchContextView: { listViews.setCurrentIndex(viewManager.viewIndex) while(browseStackView.depth > expectedDepth) { browseStackView.pop() } browseStackView.push(albumContext, { mainTitle: mainTitle, image: imageUrl, opacity: 0, }) } onPopOneView: { if (browseStackView.depth > 2) { browseStackView.pop() } } } ViewsModel { id: pageModel - viewsData: viewManager.viewsListData + viewsData: viewsData + } + + ViewsListData { + id: viewsData } ViewSelector { id: listViews model: pageModel Layout.fillHeight: true onSwitchView: viewManager.openView(viewIndex) } Kirigami.Separator { id: viewSelectorSeparatorItem Layout.fillHeight: true } FocusScope { id: mainContentView focus: true Layout.fillHeight: true Layout.fillWidth: true MouseArea { anchors.fill: parent acceptedButtons: Qt.BackButton onClicked: goBack() } Rectangle { radius: 3 color: myPalette.base anchors.fill: parent StackView { id: browseStackView anchors.fill: parent clip: true initialItem: Item { } popEnter: Transition { OpacityAnimator { from: 0.0 to: 1.0 duration: Kirigami.Units.longDuration } } popExit: Transition { OpacityAnimator { from: 1.0 to: 0.0 duration: Kirigami.Units.longDuration } } pushEnter: Transition { OpacityAnimator { from: 0.0 to: 1.0 duration: Kirigami.Units.longDuration } } pushExit: Transition { OpacityAnimator { from: 1.0 to: 0.0 duration: Kirigami.Units.longDuration } } replaceEnter: Transition { OpacityAnimator { from: 0.0 to: 1.0 duration: Kirigami.Units.longDuration } } replaceExit: Transition { OpacityAnimator { from: 1.0 to: 0.0 duration: Kirigami.Units.longDuration } } } } } Kirigami.Separator { id: playListSeparatorItem Layout.fillHeight: true } MediaPlayListView { id: playList Layout.fillHeight: true onStartPlayback: elisa.audioControl.ensurePlay() onPausePlayback: elisa.audioControl.playPause() } states: [ State { name: "browsingViewsNoPlaylist" when: contentViewContainer.showPlaylist === false || mainWindow.width < elisaTheme.viewSelectorSmallSizeThreshold PropertyChanges { target: playList Layout.minimumWidth: 0 Layout.maximumWidth: 0 Layout.preferredWidth: 0 } PropertyChanges { target: playListSeparatorItem visible: false } }, State { name: 'browsingViews' when: contentViewContainer.showPlaylist === true || mainWindow.width >= elisaTheme.viewSelectorSmallSizeThreshold PropertyChanges { target: playList Layout.minimumWidth: contentViewContainer.width * 0.28 Layout.maximumWidth: contentViewContainer.width * 0.28 Layout.preferredWidth: contentViewContainer.width * 0.28 } PropertyChanges { target: playListSeparatorItem visible: true } } ] transitions: Transition { NumberAnimation { properties: "Layout.minimumWidth, Layout.maximumWidth, Layout.preferredWidth, opacity" easing.type: Easing.InOutQuad duration: Kirigami.Units.longDuration } } Component { id: dataGridView DataGridView { StackView.onActivated: viewManager.viewIsLoaded() expandedFilterView: showExpandedFilterView } } Component { id: dataListView DataListView { StackView.onActivated: viewManager.viewIsLoaded() expandedFilterView: showExpandedFilterView } } Component { id: filesBrowserView FileBrowserView { StackView.onActivated: viewManager.viewIsLoaded() expandedFilterView: showExpandedFilterView } } Component { id: albumContext ContextView { StackView.onActivated: viewManager.viewIsLoaded() databaseId: elisa.manageHeaderBar.databaseId trackType: elisa.manageHeaderBar.trackType title: elisa.manageHeaderBar.title artistName: elisa.manageHeaderBar.artist albumName: elisa.manageHeaderBar.album albumArtUrl: elisa.manageHeaderBar.image fileUrl: elisa.manageHeaderBar.fileUrl } } } diff --git a/src/viewmanager.cpp b/src/viewmanager.cpp index 6fa0b007..b204bacc 100644 --- a/src/viewmanager.cpp +++ b/src/viewmanager.cpp @@ -1,241 +1,269 @@ /* * Copyright 2018 Matthieu Gallien * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . */ #include "viewmanager.h" #include "viewslistdata.h" #include "datatypes.h" #include "viewsLogging.h" #include class ViewManagerPrivate { public: - ViewsListData mViewsListData; + ViewsListData *mViewsListData = nullptr; QMap mChildViews = { {ElisaUtils::Album, {{}, QUrl{QStringLiteral("image://icon/view-media-track")}, ViewManager::ListView, ElisaUtils::FilterById, ElisaUtils::Track, Qt::DisplayRole, ViewManager::NoSort, ViewManager::SingleAlbum, ViewManager::DiscHeaders, ViewManager::IsTrack}}, {ElisaUtils::Genre, {{}, QUrl{QStringLiteral("image://icon/view-media-artist")}, ViewManager::GridView, ElisaUtils::FilterByGenre, ElisaUtils::Artist, QUrl{QStringLiteral("image://icon/view-media-artist")}, ViewManager::DelegateWithoutSecondaryText, ViewManager::ViewHideRating}}, {ElisaUtils::Artist, {{}, QUrl{QStringLiteral("image://icon/view-media-album-cover")}, ViewManager::GridView, ElisaUtils::FilterByArtist, ElisaUtils::Album, QUrl{QStringLiteral("image://icon/media-optical-audio")}, ViewManager::DelegateWithSecondaryText, ViewManager::ViewShowRating}}, }; int mViewIndex = 0; - QList mViewParametersStack = {mViewsListData.viewParameters(0)}; + QList mViewParametersStack = (mViewsListData ? QList{mViewsListData->viewParameters(0)} : QList{}); ViewParameters mNextViewParameters; }; ViewManager::ViewManager(QObject *parent) : QObject(parent) , d(std::make_unique()) { } int ViewManager::viewIndex() const { return d->mViewIndex; } ViewsListData *ViewManager::viewsData() const { - return &d->mViewsListData; + return d->mViewsListData; } ViewManager::~ViewManager() = default; void ViewManager::openView(int viewIndex) { + if (!d->mViewsListData) { + return; + } + + if (!d->mViewParametersStack.size()) { + return; + } + qCDebug(orgKdeElisaViews()) << "ViewManager::openView" << viewIndex << d->mViewParametersStack.size(); - const auto &viewParameters = d->mViewsListData.viewParameters(viewIndex); + const auto &viewParameters = d->mViewsListData->viewParameters(viewIndex); if (viewParameters != d->mViewParametersStack.back()) { d->mViewIndex = viewIndex; Q_EMIT viewIndexChanged(); d->mNextViewParameters = viewParameters; openViewFromData(viewParameters); } } void ViewManager::openChildView(const QString &innerMainTitle, const QString & innerSecondaryTitle, const QUrl &innerImage, qulonglong databaseId, ElisaUtils::PlayListEntryType dataType) { qCDebug(orgKdeElisaViews()) << "ViewManager::openChildView" << innerMainTitle << innerSecondaryTitle << innerImage << databaseId << dataType << d->mViewParametersStack.size(); + if (!d->mViewParametersStack.size()) { + return; + } + const auto &lastView = d->mViewParametersStack.back(); auto nextViewParameters = d->mChildViews[dataType]; nextViewParameters.mMainTitle = innerMainTitle; nextViewParameters.mSecondaryTitle = innerSecondaryTitle; nextViewParameters.mMainImage = innerImage; nextViewParameters.mDepth = d->mViewParametersStack.size() + 1; if (lastView.mFilterType == ElisaUtils::FilterByGenre) { nextViewParameters.mFilterType = ElisaUtils::FilterByGenreAndArtist; } switch (nextViewParameters.mFilterType) { case ElisaUtils::NoFilter: case ElisaUtils::FilterByRecentlyPlayed: case ElisaUtils::FilterByFrequentlyPlayed: case ElisaUtils::UnknownFilter: break; case ElisaUtils::FilterById: nextViewParameters.mDatabaseIdFilter = databaseId; break; case ElisaUtils::FilterByGenre: nextViewParameters.mGenreNameFilter = innerMainTitle; break; case ElisaUtils::FilterByGenreAndArtist: nextViewParameters.mGenreNameFilter = lastView.mGenreNameFilter; nextViewParameters.mArtistNameFilter = innerMainTitle; break; case ElisaUtils::FilterByArtist: nextViewParameters.mArtistNameFilter = innerMainTitle; break; } d->mNextViewParameters = nextViewParameters; if (lastView.mDataType != dataType) { - for(int i = 0; i < d->mViewsListData.count(); ++i) { - if (d->mViewsListData.viewParameters(i).mDataType == dataType) { + for(int i = 0; i < d->mViewsListData->count(); ++i) { + if (d->mViewsListData->viewParameters(i).mDataType == dataType) { d->mViewIndex = i; Q_EMIT viewIndexChanged(); - nextViewParameters = d->mViewsListData.viewParameters(i); + nextViewParameters = d->mViewsListData->viewParameters(i); break; } } } if (lastView.mFilterType == ElisaUtils::FilterByArtist && dataType == ElisaUtils::Album && lastView.mArtistNameFilter != innerSecondaryTitle) { nextViewParameters = lastView; nextViewParameters.mArtistNameFilter = innerSecondaryTitle; } openViewFromData(nextViewParameters); } void ViewManager::viewIsLoaded() { qCDebug(orgKdeElisaViews()) << "ViewManager::viewIsLoaded" << d->mViewParametersStack.size(); + if (!d->mViewParametersStack.size()) { + return; + } + if (d->mNextViewParameters.mIsValid && d->mNextViewParameters != d->mViewParametersStack.back()) { openViewFromData(d->mNextViewParameters); } } void ViewManager::openViewFromData(const ViewParameters &viewParamaters) { qCDebug(orgKdeElisaViews()) << "ViewManager::openViewFromData" << d->mViewParametersStack.size(); const auto viewsCountToRemove = d->mViewParametersStack.size() + 1 - viewParamaters.mDepth; for (int i = 0; i < viewsCountToRemove; ++i) { qCDebug(orgKdeElisaViews()) << "ViewManager::openViewFromData" << "pop_back"; d->mViewParametersStack.pop_back(); } d->mViewParametersStack.push_back(viewParamaters); switch (viewParamaters.mViewPresentationType) { case ViewPresentationType::GridView: qCDebug(orgKdeElisaViews()) << "ViewManager::openViewFromData" << viewParamaters.mViewPresentationType << viewParamaters.mFilterType << viewParamaters.mDepth << viewParamaters.mMainTitle << viewParamaters.mSecondaryTitle << viewParamaters.mMainImage << viewParamaters.mDataType << viewParamaters.mFallbackItemIcon << viewParamaters.mGenreNameFilter << viewParamaters.mArtistNameFilter << viewParamaters.mViewCanBeRated << viewParamaters.mShowSecondaryTextOnDelegates; Q_EMIT openGridView(viewParamaters.mFilterType, viewParamaters.mDepth, viewParamaters.mMainTitle, viewParamaters.mSecondaryTitle, viewParamaters.mMainImage, viewParamaters.mDataType, viewParamaters.mFallbackItemIcon, viewParamaters.mGenreNameFilter, viewParamaters.mArtistNameFilter, viewParamaters.mViewCanBeRated, viewParamaters.mShowSecondaryTextOnDelegates); break; case ViewPresentationType::ListView: qCDebug(orgKdeElisaViews()) << "ViewManager::openViewFromData" << viewParamaters.mFilterType << viewParamaters.mDepth << viewParamaters.mMainTitle << viewParamaters.mSecondaryTitle << viewParamaters.mDatabaseIdFilter << viewParamaters.mMainImage << viewParamaters.mDataType << viewParamaters.mSortRole << viewParamaters.mSortOrder << viewParamaters.mAlbumCardinality << viewParamaters.mAlbumViewStyle << viewParamaters.mRadioSpecificStyle; Q_EMIT openListView(viewParamaters.mFilterType, viewParamaters.mDepth, viewParamaters.mMainTitle, viewParamaters.mSecondaryTitle, viewParamaters.mDatabaseIdFilter, viewParamaters.mMainImage, viewParamaters.mDataType, viewParamaters.mSortRole, viewParamaters.mSortOrder, viewParamaters.mAlbumCardinality, viewParamaters.mAlbumViewStyle, viewParamaters.mRadioSpecificStyle); break; case ViewPresentationType::FileBrowserView: qCDebug(orgKdeElisaViews()) << "ViewManager::openViewFromData" << viewParamaters.mViewPresentationType << viewParamaters.mDepth << viewParamaters.mMainTitle << viewParamaters.mMainImage; Q_EMIT switchFilesBrowserView(viewParamaters.mDepth, viewParamaters.mMainTitle, viewParamaters.mMainImage); break; case ContextView: qCDebug(orgKdeElisaViews()) << "ViewManager::openViewFromData" << viewParamaters.mViewPresentationType << viewParamaters.mDepth << viewParamaters.mMainTitle << viewParamaters.mMainImage; Q_EMIT switchContextView(viewParamaters.mDepth, viewParamaters.mMainTitle, viewParamaters.mMainImage); break; case UnknownViewPresentation: break; } } void ViewManager::goBack() { qCDebug(orgKdeElisaViews()) << "ViewManager::goBack" << d->mViewParametersStack.size(); + if (d->mViewParametersStack.size() <= 1) { + return; + } Q_EMIT popOneView(); d->mViewParametersStack.pop_back(); d->mNextViewParameters = {}; } void ViewManager::setViewsData(ViewsListData *viewsData) { - Q_UNUSED(viewsData) + if (d->mViewsListData == viewsData) { + return; + } + + d->mViewsListData = viewsData; + Q_EMIT viewsDataChanged(); + + if (d->mViewsListData) { + d->mViewParametersStack = {d->mViewsListData->viewParameters(d->mViewIndex)}; + } } #include "moc_viewmanager.cpp"