#pragma once #include "theme.h" #include #include namespace rcx { class ThemeManager : public QObject { Q_OBJECT public: static ThemeManager& instance(); QVector themes() const; int currentIndex() const { return m_currentIdx; } const Theme& current() const; void setCurrent(int index); void addTheme(const Theme& theme); void updateTheme(int index, const Theme& theme); void removeTheme(int index); void loadUserThemes(); void saveUserThemes() const; QString themeFilePath(int index) const; void previewTheme(const Theme& theme); void revertPreview(); signals: void themeChanged(const rcx::Theme& theme); private: ThemeManager(); QVector m_builtIn; // built-in themes (possibly overridden) QVector m_builtInDefaults; // originals loaded from disk QVector m_user; int m_currentIdx = 0; int builtInCount() const { return m_builtIn.size(); } void loadBuiltInThemes(); QString builtInDir() const; QString userDir() const; bool m_previewing = false; Theme m_savedTheme; }; } // namespace rcx