1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
|
/*
* SPDX-FileCopyrightText: 2020 Jonah BrĂ¼chert <jbb@kaidan.im>
*
* SPDX-License-Identifier: LGPL-2.0-only
*/
#ifndef TABSMODEL_H
#define TABSMODEL_H
#include <QAbstractListModel>
#include <QUrl>
class QJsonObject;
class TabState
{
public:
static TabState fromJson(const QJsonObject &obj);
QJsonObject toJson() const;
TabState() = default;
TabState(const QUrl &url, const bool isMobile);
bool operator==(const TabState &other) const;
bool isMobile() const;
void setIsMobile(bool isMobile);
bool isDeveloperToolsOpen() const;
void setIsDeveloperToolsOpen(bool isDeveloperToolsOpen);
QUrl url() const;
void setUrl(const QUrl &url);
private:
QUrl m_url;
bool m_isMobile = true;
bool m_isDeveloperToolsOpen = false;
};
class TabsModel : public QAbstractListModel
{
Q_OBJECT
Q_PROPERTY(int currentTab READ currentTab WRITE setCurrentTab NOTIFY currentTabChanged)
Q_PROPERTY(bool isMobileDefault READ isMobileDefault WRITE setIsMobileDefault NOTIFY isMobileDefaultChanged)
Q_PROPERTY(bool privateMode READ privateMode WRITE setPrivateMode NOTIFY privateModeChanged REQUIRED)
enum RoleNames { UrlRole = Qt::UserRole + 1, IsMobileRole, IsDeveloperToolsOpen };
public:
explicit TabsModel(QObject *parent = nullptr);
QHash<int, QByteArray> roleNames() const override;
QVariant data(const QModelIndex &index, int role) const override;
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
int currentTab() const;
void setCurrentTab(int index);
const std::vector<TabState> &tabs() const;
Q_INVOKABLE TabState tab(int index);
Q_INVOKABLE void loadInitialTabs();
Q_INVOKABLE void newTab(const QUrl &url);
Q_INVOKABLE void createEmptyTab();
Q_INVOKABLE void setLatestTab();
Q_INVOKABLE void closeTab(int index);
Q_INVOKABLE void setUrl(int index, const QUrl &url);
Q_INVOKABLE void setIsMobile(int index, bool isMobile);
Q_INVOKABLE void toggleDeveloperTools(int index);
Q_INVOKABLE bool isDeveloperToolsOpen(int index);
bool isMobileDefault() const;
void setIsMobileDefault(bool def);
bool privateMode() const;
void setPrivateMode(bool privateMode);
protected:
bool loadTabs();
bool saveTabs() const;
private:
int m_currentTab = 0;
std::vector<TabState> m_tabs{};
bool m_privateMode = false;
bool m_tabsReadOnly = false;
bool m_isMobileDefault = false;
bool m_initialTabsLoaded = false;
Q_SIGNALS:
void currentTabChanged();
void isMobileDefaultChanged();
void privateModeChanged();
};
#endif // TABSMODEL_H
|