diff --git a/Maia/BackendLib/ThemesModel.hpp b/Maia/BackendLib/ThemesModel.hpp index f906c00..4a62cc5 100644 --- a/Maia/BackendLib/ThemesModel.hpp +++ b/Maia/BackendLib/ThemesModel.hpp @@ -1,22 +1,17 @@ #pragma once -#include - -#include #include +#include +#include -class ThemesModel : public QAbstractListModel{ +class ThemesModel : public QAbstractListModel +{ Q_OBJECT - QML_ELEMENT - struct Theme { - QString themeId; - QString themeName; - bool themeActive = false; - bool operator==(const Theme& other) const { - return themeId == other.themeId; - } - }; + Q_PROPERTY(QString activeThemeId + READ activeThemeId + NOTIFY activeThemeChanged) + public: enum ThemeRoles { ThemeIdRole = Qt::UserRole + 1, @@ -24,13 +19,30 @@ class ThemesModel : public QAbstractListModel{ ThemeActiveRole }; - ThemesModel(QObject* parent = nullptr); + explicit ThemesModel(QObject *parent = nullptr); + int rowCount(const QModelIndex &parent = QModelIndex()) const override; - QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; + QVariant data(const QModelIndex &index, + int role = Qt::DisplayRole) const override; QHash roleNames() const override; - Q_INVOKABLE void setActiveFrontend(const QString& themeId); + QString activeThemeId() const; + + Q_INVOKABLE void setActiveFrontend(const QString &frontendId); + Q_INVOKABLE void setActiveTheme(const QString &themeId); + +signals: + void activeThemeChanged(); + private: - std::vector themes; + struct Theme { + QString themeId; + QString themeName; + bool themeActive; + }; + void initializeThemes(); + + QVector themes; + QString m_activeThemeId; };