diff options
Diffstat (limited to 'src/plugins/studiowelcome/userpresets.h')
-rw-r--r-- | src/plugins/studiowelcome/userpresets.h | 51 |
1 files changed, 44 insertions, 7 deletions
diff --git a/src/plugins/studiowelcome/userpresets.h b/src/plugins/studiowelcome/userpresets.h index 4f6053ef26..3f614f4ea0 100644 --- a/src/plugins/studiowelcome/userpresets.h +++ b/src/plugins/studiowelcome/userpresets.h @@ -25,8 +25,10 @@ #pragma once +#include <memory> #include <vector> -#include <QSettings> +#include <QFile> +#include <QDebug> namespace StudioWelcome { @@ -68,24 +70,59 @@ inline bool operator==(const UserPresetData &lhs, const UserPresetData &rhs) return lhs.categoryId == rhs.categoryId && lhs.wizardName == rhs.wizardName && lhs.name == rhs.name && lhs.screenSize == rhs.screenSize && lhs.useQtVirtualKeyboard == rhs.useQtVirtualKeyboard && lhs.qtVersion == rhs.qtVersion - && lhs.styleName == rhs.styleName; + && lhs.styleName == rhs.styleName;; } +enum class StorePolicy {UniqueNames, UniqueValues}; + +class StoreIo +{ +public: + virtual ~StoreIo() {} + + virtual QByteArray read() const = 0; + virtual void write(const QByteArray &bytes) = 0; +}; + +class FileStoreIo : public StoreIo +{ +public: + explicit FileStoreIo(const QString &fileName); + FileStoreIo(FileStoreIo &&other): m_file{std::move(other.m_file)} {} + FileStoreIo& operator=(FileStoreIo &&other) { m_file = std::move(other.m_file); return *this; } + + QByteArray read() const override; + void write(const QByteArray &data) override; + +private: + QString fullFilePath(const QString &fileName) const; + + std::unique_ptr<QFile> m_file; + + Q_DISABLE_COPY(FileStoreIo) +}; + class UserPresetsStore { public: - UserPresetsStore(); - UserPresetsStore(std::unique_ptr<QSettings> &&settings); + UserPresetsStore(const QString &fileName, StorePolicy policy); + UserPresetsStore(std::unique_ptr<StoreIo> &&store, StorePolicy policy); bool save(const UserPresetData &preset); - void remove(const QString &category, const QString &name); std::vector<UserPresetData> fetchAll() const; + void remove(const QString &category, const QString &name); + std::vector<UserPresetData> remove(const UserPresetData &preset); + + void setMaximum(int maximum) { m_maximum = maximum; } + void setReverseOrder() { m_reverse = true; } private: - QString fullFilePath() const; void savePresets(const std::vector<UserPresetData> &presets); - std::unique_ptr<QSettings> m_settings; + std::unique_ptr<StoreIo> m_store; + StorePolicy m_policy = StorePolicy::UniqueNames; + bool m_reverse = false; + int m_maximum = -1; }; } // namespace StudioWelcome |