81 lines
2.7 KiB
C++
81 lines
2.7 KiB
C++
#pragma once
|
|
|
|
#include <qqmlintegration.h>
|
|
#include <qqmlparserstatus.h>
|
|
#include <qquickattachedpropertypropagator.h>
|
|
|
|
namespace caelestia::config {
|
|
|
|
class AnimTokens;
|
|
class AppearancePadding;
|
|
class AppearanceRounding;
|
|
class AppearanceSpacing;
|
|
class AppearanceTransparency;
|
|
class FontTokens;
|
|
class GlobalConfig;
|
|
class SizeTokens;
|
|
class TokenConfig;
|
|
|
|
class Tokens : public QQuickAttachedPropertyPropagator, public QQmlParserStatus {
|
|
Q_OBJECT
|
|
Q_INTERFACES(QQmlParserStatus)
|
|
QML_ELEMENT
|
|
QML_UNCREATABLE("")
|
|
QML_ATTACHED(Tokens)
|
|
Q_MOC_INCLUDE("anim.hpp")
|
|
Q_MOC_INCLUDE("appearanceconfig.hpp")
|
|
Q_MOC_INCLUDE("font.hpp")
|
|
Q_MOC_INCLUDE("tokens.hpp")
|
|
|
|
Q_PROPERTY(QString screen READ screen WRITE inheritScreen NOTIFY sourceChanged)
|
|
Q_PROPERTY(const caelestia::config::AppearanceRounding* rounding READ rounding NOTIFY sourceChanged)
|
|
Q_PROPERTY(const caelestia::config::AppearanceSpacing* spacing READ spacing NOTIFY sourceChanged)
|
|
Q_PROPERTY(const caelestia::config::AppearancePadding* padding READ padding NOTIFY sourceChanged)
|
|
Q_PROPERTY(const caelestia::config::AppearanceTransparency* transparency READ transparency NOTIFY sourceChanged)
|
|
Q_PROPERTY(const caelestia::config::SizeTokens* sizes READ sizes NOTIFY sourceChanged)
|
|
Q_PROPERTY(const caelestia::config::FontTokens* font READ font NOTIFY sourceChanged)
|
|
Q_PROPERTY(const caelestia::config::AnimTokens* anim READ anim NOTIFY sourceChanged)
|
|
|
|
public:
|
|
explicit Tokens(QObject* parent = nullptr);
|
|
|
|
[[nodiscard]] QString screen() const;
|
|
void inheritScreen(const QString& screen);
|
|
|
|
[[nodiscard]] const AppearanceRounding* rounding() const;
|
|
[[nodiscard]] const AppearanceSpacing* spacing() const;
|
|
[[nodiscard]] const AppearancePadding* padding() const;
|
|
[[nodiscard]] const AppearanceTransparency* transparency() const;
|
|
|
|
[[nodiscard]] const SizeTokens* sizes() const;
|
|
[[nodiscard]] const FontTokens* font() const;
|
|
[[nodiscard]] const AnimTokens* anim() const;
|
|
|
|
[[nodiscard]] Q_INVOKABLE static TokenConfig* forScreen(const QString& screen);
|
|
|
|
static Tokens* qmlAttachedProperties(QObject* object);
|
|
|
|
signals:
|
|
void sourceChanged();
|
|
|
|
protected:
|
|
void attachedParentChange(
|
|
QQuickAttachedPropertyPropagator* newParent, QQuickAttachedPropertyPropagator* oldParent) override;
|
|
|
|
private:
|
|
void classBegin() override;
|
|
void componentComplete() override;
|
|
|
|
void propagateScreen();
|
|
void bindAnim();
|
|
void bindFont();
|
|
|
|
bool m_complete = false;
|
|
QString m_screen;
|
|
GlobalConfig* m_config = nullptr;
|
|
TokenConfig* m_tokens = nullptr;
|
|
FontTokens* m_font = nullptr;
|
|
AnimTokens* m_anim = nullptr;
|
|
};
|
|
|
|
} // namespace caelestia::config
|