File indexing completed on 2024-05-12 16:23:41
0001 /* 0002 * SPDX-FileCopyrightText: 2020 Jonah BrĂ¼chert <jbb@kaidan.im> 0003 * 0004 * SPDX-License-Identifier: LGPL-2.0-only 0005 */ 0006 0007 #ifndef TABSMODEL_H 0008 #define TABSMODEL_H 0009 0010 #include <QAbstractListModel> 0011 #include <QUrl> 0012 0013 class QJsonObject; 0014 0015 class TabState 0016 { 0017 public: 0018 static TabState fromJson(const QJsonObject &obj); 0019 QJsonObject toJson() const; 0020 0021 TabState() = default; 0022 TabState(const QUrl &url, const bool isMobile); 0023 0024 bool operator==(const TabState &other) const; 0025 0026 bool isMobile() const; 0027 void setIsMobile(bool isMobile); 0028 0029 bool isDeveloperToolsOpen() const; 0030 void setIsDeveloperToolsOpen(bool isDeveloperToolsOpen); 0031 0032 QUrl url() const; 0033 void setUrl(const QUrl &url); 0034 0035 private: 0036 QUrl m_url; 0037 bool m_isMobile = true; 0038 bool m_isDeveloperToolsOpen = false; 0039 }; 0040 0041 class TabsModel : public QAbstractListModel 0042 { 0043 Q_OBJECT 0044 0045 Q_PROPERTY(int currentTab READ currentTab WRITE setCurrentTab NOTIFY currentTabChanged) 0046 Q_PROPERTY(bool isMobileDefault READ isMobileDefault WRITE setIsMobileDefault NOTIFY isMobileDefaultChanged) 0047 Q_PROPERTY(bool privateMode READ privateMode WRITE setPrivateMode NOTIFY privateModeChanged REQUIRED) 0048 0049 enum RoleNames { UrlRole = Qt::UserRole + 1, IsMobileRole, IsDeveloperToolsOpen }; 0050 0051 public: 0052 explicit TabsModel(QObject *parent = nullptr); 0053 0054 QHash<int, QByteArray> roleNames() const override; 0055 QVariant data(const QModelIndex &index, int role) const override; 0056 int rowCount(const QModelIndex &parent = QModelIndex()) const override; 0057 0058 int currentTab() const; 0059 void setCurrentTab(int index); 0060 0061 const std::vector<TabState> &tabs() const; 0062 0063 Q_INVOKABLE TabState tab(int index); 0064 0065 Q_INVOKABLE void loadInitialTabs(); 0066 0067 Q_INVOKABLE void newTab(const QUrl &url); 0068 Q_INVOKABLE void createEmptyTab(); 0069 Q_INVOKABLE void closeTab(int index); 0070 0071 Q_INVOKABLE void setUrl(int index, const QUrl &url); 0072 Q_INVOKABLE void setIsMobile(int index, bool isMobile); 0073 Q_INVOKABLE void toggleDeveloperTools(int index); 0074 0075 Q_INVOKABLE bool isDeveloperToolsOpen(int index); 0076 bool isMobileDefault() const; 0077 void setIsMobileDefault(bool def); 0078 0079 bool privateMode() const; 0080 void setPrivateMode(bool privateMode); 0081 0082 protected: 0083 bool loadTabs(); 0084 bool saveTabs() const; 0085 0086 private: 0087 int m_currentTab = 0; 0088 std::vector<TabState> m_tabs{}; 0089 bool m_privateMode = false; 0090 bool m_tabsReadOnly = false; 0091 bool m_isMobileDefault = false; 0092 bool m_initialTabsLoaded = false; 0093 0094 Q_SIGNALS: 0095 void currentTabChanged(); 0096 void isMobileDefaultChanged(); 0097 void privateModeChanged(); 0098 }; 0099 0100 #endif // TABSMODEL_H