File indexing completed on 2024-04-21 04:49:02
0001 /* 0002 SPDX-FileCopyrightText: 2018 (c) Matthieu Gallien <matthieu_gallien@yahoo.fr> 0003 0004 SPDX-License-Identifier: LGPL-3.0-or-later 0005 */ 0006 0007 #ifndef VIEWMANAGER_H 0008 #define VIEWMANAGER_H 0009 0010 #include "elisaLib_export.h" 0011 0012 #include "config-upnp-qt.h" 0013 0014 #include "elisautils.h" 0015 #include "datatypes.h" 0016 0017 #include <QObject> 0018 #include <QUrl> 0019 #include <Qt> 0020 0021 #include <memory> 0022 0023 class ViewManagerPrivate; 0024 class ViewParameters; 0025 class ViewsListData; 0026 class ViewConfigurationData; 0027 0028 class ELISALIB_EXPORT ViewManager : public QObject 0029 { 0030 Q_OBJECT 0031 0032 Q_PROPERTY(int viewIndex 0033 READ viewIndex 0034 NOTIFY viewIndexChanged) 0035 0036 Q_PROPERTY(int initialIndex 0037 READ initialIndex 0038 WRITE setInitialIndex 0039 NOTIFY initialIndexChanged) 0040 0041 Q_PROPERTY(QString initialFilesViewPath 0042 READ initialFilesViewPath 0043 WRITE setInitialFilesViewPath 0044 NOTIFY initialFilesViewPathChanged) 0045 0046 Q_PROPERTY(ViewsListData* viewsData READ viewsData WRITE setViewsData NOTIFY viewsDataChanged) 0047 0048 public: 0049 0050 enum AlbumCardinality { 0051 SingleAlbum = true, 0052 MultipleAlbum = false, 0053 }; 0054 0055 Q_ENUM(AlbumCardinality) 0056 0057 enum AlbumViewStyle { 0058 NoDiscHeaders, 0059 DiscHeaders, 0060 }; 0061 0062 Q_ENUM(AlbumViewStyle) 0063 0064 enum RadioSpecificStyle { 0065 IsTrack, 0066 IsRadio, 0067 }; 0068 0069 Q_ENUM(RadioSpecificStyle) 0070 0071 enum DelegateUseSecondaryText { 0072 DelegateWithSecondaryText = true, 0073 DelegateWithoutSecondaryText = false, 0074 }; 0075 0076 Q_ENUM(DelegateUseSecondaryText) 0077 0078 enum ViewCanBeRated { 0079 ViewShowRating = true, 0080 ViewHideRating = false, 0081 }; 0082 0083 Q_ENUM(ViewCanBeRated) 0084 0085 enum ViewPresentationType { 0086 ContextView, 0087 GridView, 0088 ListView, 0089 UnknownViewPresentation, 0090 }; 0091 0092 Q_ENUM(ViewPresentationType) 0093 0094 enum ModelType { 0095 GenericDataModel, 0096 FileBrowserModel, 0097 UnknownModelType, 0098 }; 0099 0100 Q_ENUM(ModelType) 0101 0102 explicit ViewManager(QObject *parent = nullptr); 0103 0104 ~ViewManager() override; 0105 0106 [[nodiscard]] int viewIndex() const; 0107 0108 [[nodiscard]] int initialIndex() const; 0109 0110 [[nodiscard]] QString initialFilesViewPath() const; 0111 0112 [[nodiscard]] ViewsListData* viewsData() const; 0113 0114 Q_SIGNALS: 0115 0116 void openGridView(ViewConfigurationData *configurationData); 0117 0118 void openListView(ViewConfigurationData *configurationData); 0119 0120 void switchContextView(int expectedDepth, const QString &mainTitle, const QUrl &imageUrl); 0121 0122 void popOneView(); 0123 0124 void viewIndexChanged(); 0125 0126 void initialIndexChanged(); 0127 0128 void viewsDataChanged(); 0129 0130 void initialFilesViewPathChanged(); 0131 0132 public Q_SLOTS: 0133 0134 void openView(int viewIndex); 0135 0136 void openChildView(const DataTypes::MusicDataType &fullData); 0137 0138 void openAlbumView(const QString &title, const QString &artist, qulonglong databaseId, const QUrl &albumCoverUrl); 0139 0140 void openArtistView(const QString &artist); 0141 0142 void openNowPlaying(); 0143 0144 void goBack(); 0145 0146 void setViewsData(ViewsListData* viewsData); 0147 0148 void sortOrderChanged(Qt::SortOrder sortOrder); 0149 0150 void sortRoleChanged(int sortRole); 0151 0152 void setInitialIndex(int newIndex); 0153 0154 void setInitialFilesViewPath(const QString &initialPath); 0155 0156 private Q_SLOTS: 0157 0158 void openInitialView(); 0159 0160 private: 0161 0162 void openViewFromData(const ViewParameters &viewParamaters); 0163 0164 void applyFilter(ViewParameters &nextViewParameters, 0165 QString title, const ViewParameters &lastView) const; 0166 0167 [[nodiscard]] QString buildViewId() const; 0168 0169 QStringList::iterator findViewPreference(QStringList &list, const QString &viewId) const; 0170 0171 bool viewHasDefaultSortRole(const ElisaUtils::FilterType filterType) const; 0172 0173 [[nodiscard]] Qt::SortOrder computePreferredSortOrder(Qt::SortOrder initialValue, ElisaUtils::FilterType filterType) const; 0174 0175 [[nodiscard]] int computePreferredSortRole(int initialValue, ElisaUtils::FilterType filterType) const; 0176 0177 private: 0178 0179 std::unique_ptr<ViewManagerPrivate> d; 0180 0181 bool isSameView(const ViewParameters ¤tView, const ViewParameters &otherView) const; 0182 }; 0183 0184 #endif // VIEWMANAGER_H