nosignal-shell/plugin/src/Caelestia/Config/tokensattached.hpp
2 * r + 2 * t 850d9fc1c9 feat: forward declare where possible
Hopefully speeds up compile times by at least a bit
2026-04-18 02:04:47 +10:00

78 lines
2.6 KiB
C++

#pragma once
#include <qqmlintegration.h>
#include <qqmlparserstatus.h>
#include <qquickattachedpropertypropagator.h>
namespace caelestia::config {
class AnimTokens;
class AppearanceFont;
class AppearancePadding;
class AppearanceRounding;
class AppearanceSpacing;
class AppearanceTransparency;
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("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::AppearanceFont* font READ font 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::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 AppearanceFont* font() const;
[[nodiscard]] const AppearanceTransparency* transparency() const;
[[nodiscard]] const SizeTokens* sizes() 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();
bool m_complete = false;
QString m_screen;
GlobalConfig* m_config = nullptr;
TokenConfig* m_tokens = nullptr;
AnimTokens* m_anim = nullptr;
};
} // namespace caelestia::config