nosignal-shell/plugin/src/Caelestia/Config/appearanceconfig.hpp
2026-04-22 22:47:18 +10:00

267 lines
7.9 KiB
C++

#pragma once
#include "configobject.hpp"
#include <qstring.h>
namespace caelestia::config {
// Forward declare token types from advancedconfig.hpp
class RoundingTokens;
class SpacingTokens;
class PaddingTokens;
class FontSizeTokens;
class AnimDurationTokens;
class AppearanceRounding : public ConfigObject {
Q_OBJECT
QML_ANONYMOUS
CONFIG_PROPERTY(qreal, scale, 1)
Q_PROPERTY(int extraSmall READ extraSmall NOTIFY valuesChanged)
Q_PROPERTY(int small READ small NOTIFY valuesChanged)
Q_PROPERTY(int medium READ medium NOTIFY valuesChanged)
Q_PROPERTY(int large READ large NOTIFY valuesChanged)
Q_PROPERTY(int largeIncreased READ largeIncreased NOTIFY valuesChanged)
Q_PROPERTY(int extraLarge READ extraLarge NOTIFY valuesChanged)
Q_PROPERTY(int extraLargeIncreased READ extraLargeIncreased NOTIFY valuesChanged)
Q_PROPERTY(int extraExtraLarge READ extraExtraLarge NOTIFY valuesChanged)
Q_PROPERTY(int full READ full NOTIFY valuesChanged)
public:
explicit AppearanceRounding(QObject* parent = nullptr)
: ConfigObject(parent) {}
void bindTokens(RoundingTokens* tokens);
[[nodiscard]] int extraSmall() const;
[[nodiscard]] int small() const;
[[nodiscard]] int medium() const;
[[nodiscard]] int large() const;
[[nodiscard]] int largeIncreased() const;
[[nodiscard]] int extraLarge() const;
[[nodiscard]] int extraLargeIncreased() const;
[[nodiscard]] int extraExtraLarge() const;
[[nodiscard]] int full() const;
signals:
void valuesChanged();
private:
RoundingTokens* m_tokens = nullptr;
};
class AppearanceSpacing : public ConfigObject {
Q_OBJECT
QML_ANONYMOUS
CONFIG_PROPERTY(qreal, scale, 1)
Q_PROPERTY(int small READ small NOTIFY valuesChanged)
Q_PROPERTY(int smaller READ smaller NOTIFY valuesChanged)
Q_PROPERTY(int normal READ normal NOTIFY valuesChanged)
Q_PROPERTY(int larger READ larger NOTIFY valuesChanged)
Q_PROPERTY(int large READ large NOTIFY valuesChanged)
public:
explicit AppearanceSpacing(QObject* parent = nullptr)
: ConfigObject(parent) {}
void bindTokens(SpacingTokens* tokens);
[[nodiscard]] int small() const;
[[nodiscard]] int smaller() const;
[[nodiscard]] int normal() const;
[[nodiscard]] int larger() const;
[[nodiscard]] int large() const;
signals:
void valuesChanged();
private:
SpacingTokens* m_tokens = nullptr;
};
class AppearancePadding : public ConfigObject {
Q_OBJECT
QML_ANONYMOUS
CONFIG_PROPERTY(qreal, scale, 1)
Q_PROPERTY(int small READ small NOTIFY valuesChanged)
Q_PROPERTY(int smaller READ smaller NOTIFY valuesChanged)
Q_PROPERTY(int normal READ normal NOTIFY valuesChanged)
Q_PROPERTY(int larger READ larger NOTIFY valuesChanged)
Q_PROPERTY(int large READ large NOTIFY valuesChanged)
public:
explicit AppearancePadding(QObject* parent = nullptr)
: ConfigObject(parent) {}
void bindTokens(PaddingTokens* tokens);
[[nodiscard]] int small() const;
[[nodiscard]] int smaller() const;
[[nodiscard]] int normal() const;
[[nodiscard]] int larger() const;
[[nodiscard]] int large() const;
signals:
void valuesChanged();
private:
PaddingTokens* m_tokens = nullptr;
};
class FontFamily : public ConfigObject {
Q_OBJECT
QML_ANONYMOUS
CONFIG_PROPERTY(QString, sans, QStringLiteral("Rubik"))
CONFIG_PROPERTY(QString, mono, QStringLiteral("CaskaydiaCove NF"))
CONFIG_PROPERTY(QString, material, QStringLiteral("Material Symbols Rounded"))
CONFIG_PROPERTY(QString, clock, QStringLiteral("Rubik"))
public:
explicit FontFamily(QObject* parent = nullptr)
: ConfigObject(parent) {}
};
class FontSize : public ConfigObject {
Q_OBJECT
QML_ANONYMOUS
CONFIG_PROPERTY(qreal, scale, 1)
Q_PROPERTY(int small READ small NOTIFY valuesChanged)
Q_PROPERTY(int smaller READ smaller NOTIFY valuesChanged)
Q_PROPERTY(int normal READ normal NOTIFY valuesChanged)
Q_PROPERTY(int larger READ larger NOTIFY valuesChanged)
Q_PROPERTY(int large READ large NOTIFY valuesChanged)
Q_PROPERTY(int extraLarge READ extraLarge NOTIFY valuesChanged)
public:
explicit FontSize(QObject* parent = nullptr)
: ConfigObject(parent) {}
void bindTokens(FontSizeTokens* tokens);
[[nodiscard]] int small() const;
[[nodiscard]] int smaller() const;
[[nodiscard]] int normal() const;
[[nodiscard]] int larger() const;
[[nodiscard]] int large() const;
[[nodiscard]] int extraLarge() const;
signals:
void valuesChanged();
private:
FontSizeTokens* m_tokens = nullptr;
};
class AppearanceFont : public ConfigObject {
Q_OBJECT
QML_ANONYMOUS
CONFIG_SUBOBJECT(FontFamily, family)
CONFIG_SUBOBJECT(FontSize, size)
public:
explicit AppearanceFont(QObject* parent = nullptr)
: ConfigObject(parent)
, m_family(new FontFamily(this))
, m_size(new FontSize(this)) {}
};
class AnimDurations : public ConfigObject {
Q_OBJECT
QML_ANONYMOUS
CONFIG_GLOBAL_PROPERTY(qreal, scale, 1)
Q_PROPERTY(int small READ small NOTIFY valuesChanged)
Q_PROPERTY(int normal READ normal NOTIFY valuesChanged)
Q_PROPERTY(int large READ large NOTIFY valuesChanged)
Q_PROPERTY(int extraLarge READ extraLarge NOTIFY valuesChanged)
Q_PROPERTY(int expressiveFastSpatial READ expressiveFastSpatial NOTIFY valuesChanged)
Q_PROPERTY(int expressiveDefaultSpatial READ expressiveDefaultSpatial NOTIFY valuesChanged)
Q_PROPERTY(int expressiveSlowSpatial READ expressiveSlowSpatial NOTIFY valuesChanged)
Q_PROPERTY(int expressiveFastEffects READ expressiveFastEffects NOTIFY valuesChanged)
Q_PROPERTY(int expressiveDefaultEffects READ expressiveDefaultEffects NOTIFY valuesChanged)
Q_PROPERTY(int expressiveSlowEffects READ expressiveSlowEffects NOTIFY valuesChanged)
public:
explicit AnimDurations(QObject* parent = nullptr)
: ConfigObject(parent) {}
void bindTokens(AnimDurationTokens* tokens);
[[nodiscard]] int small() const;
[[nodiscard]] int normal() const;
[[nodiscard]] int large() const;
[[nodiscard]] int extraLarge() const;
[[nodiscard]] int expressiveFastSpatial() const;
[[nodiscard]] int expressiveDefaultSpatial() const;
[[nodiscard]] int expressiveSlowSpatial() const;
[[nodiscard]] int expressiveFastEffects() const;
[[nodiscard]] int expressiveDefaultEffects() const;
[[nodiscard]] int expressiveSlowEffects() const;
signals:
void valuesChanged();
private:
AnimDurationTokens* m_tokens = nullptr;
};
class AppearanceAnim : public ConfigObject {
Q_OBJECT
QML_ANONYMOUS
CONFIG_SUBOBJECT(AnimDurations, durations)
public:
explicit AppearanceAnim(QObject* parent = nullptr)
: ConfigObject(parent)
, m_durations(new AnimDurations(this)) {}
};
class AppearanceTransparency : public ConfigObject {
Q_OBJECT
QML_ANONYMOUS
CONFIG_GLOBAL_PROPERTY(bool, enabled, false)
CONFIG_GLOBAL_PROPERTY(qreal, base, 0.85)
CONFIG_GLOBAL_PROPERTY(qreal, layers, 0.4)
public:
explicit AppearanceTransparency(QObject* parent = nullptr)
: ConfigObject(parent) {}
};
class AppearanceConfig : public ConfigObject {
Q_OBJECT
QML_ANONYMOUS
CONFIG_PROPERTY(qreal, deformScale, 1)
CONFIG_SUBOBJECT(AppearanceRounding, rounding)
CONFIG_SUBOBJECT(AppearanceSpacing, spacing)
CONFIG_SUBOBJECT(AppearancePadding, padding)
CONFIG_SUBOBJECT(AppearanceFont, font)
CONFIG_SUBOBJECT(AppearanceAnim, anim)
CONFIG_SUBOBJECT(AppearanceTransparency, transparency)
public:
explicit AppearanceConfig(QObject* parent = nullptr)
: ConfigObject(parent)
, m_rounding(new AppearanceRounding(this))
, m_spacing(new AppearanceSpacing(this))
, m_padding(new AppearancePadding(this))
, m_font(new AppearanceFont(this))
, m_anim(new AppearanceAnim(this))
, m_transparency(new AppearanceTransparency(this)) {}
};
} // namespace caelestia::config