119 lines
3.8 KiB
C++
119 lines
3.8 KiB
C++
#include "config.hpp"
|
|
#include "appearanceconfig.hpp"
|
|
#include "backgroundconfig.hpp"
|
|
#include "barconfig.hpp"
|
|
#include "borderconfig.hpp"
|
|
#include "controlcenterconfig.hpp"
|
|
#include "dashboardconfig.hpp"
|
|
#include "generalconfig.hpp"
|
|
#include "launcherconfig.hpp"
|
|
#include "lockconfig.hpp"
|
|
#include "monitorconfigmanager.hpp"
|
|
#include "notifsconfig.hpp"
|
|
#include "osdconfig.hpp"
|
|
#include "serviceconfig.hpp"
|
|
#include "sessionconfig.hpp"
|
|
#include "sidebarconfig.hpp"
|
|
#include "tokens.hpp"
|
|
#include "userpaths.hpp"
|
|
#include "utilitiesconfig.hpp"
|
|
#include "winfoconfig.hpp"
|
|
|
|
#include <qqmlengine.h>
|
|
#include <qstandardpaths.h>
|
|
|
|
namespace caelestia::config {
|
|
|
|
namespace {
|
|
|
|
QString configDir() {
|
|
return QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation) + QStringLiteral("/caelestia/");
|
|
}
|
|
|
|
} // namespace
|
|
|
|
GlobalConfig::GlobalConfig(QObject* parent)
|
|
: RootConfig(parent)
|
|
, m_appearance(new AppearanceConfig(this))
|
|
, m_general(new GeneralConfig(this))
|
|
, m_background(new BackgroundConfig(this))
|
|
, m_bar(new BarConfig(this))
|
|
, m_border(new BorderConfig(this))
|
|
, m_dashboard(new DashboardConfig(this))
|
|
, m_controlCenter(new ControlCenterConfig(this))
|
|
, m_launcher(new LauncherConfig(this))
|
|
, m_notifs(new NotifsConfig(this))
|
|
, m_osd(new OsdConfig(this))
|
|
, m_session(new SessionConfig(this))
|
|
, m_winfo(new WInfoConfig(this))
|
|
, m_lock(new LockConfig(this))
|
|
, m_utilities(new UtilitiesConfig(this))
|
|
, m_sidebar(new SidebarConfig(this))
|
|
, m_services(new ServiceConfig(this))
|
|
, m_paths(new UserPaths(this)) {
|
|
setupFileBackend(configDir() + QStringLiteral("shell.json"));
|
|
}
|
|
|
|
GlobalConfig::GlobalConfig(GlobalConfig* fallback, const QString& filePath, const QString& screen, QObject* parent)
|
|
: RootConfig(parent)
|
|
, m_appearance(new AppearanceConfig(this))
|
|
, m_general(new GeneralConfig(this))
|
|
, m_background(new BackgroundConfig(this))
|
|
, m_bar(new BarConfig(this))
|
|
, m_border(new BorderConfig(this))
|
|
, m_dashboard(new DashboardConfig(this))
|
|
, m_controlCenter(new ControlCenterConfig(this))
|
|
, m_launcher(new LauncherConfig(this))
|
|
, m_notifs(new NotifsConfig(this))
|
|
, m_osd(new OsdConfig(this))
|
|
, m_session(new SessionConfig(this))
|
|
, m_winfo(new WInfoConfig(this))
|
|
, m_lock(new LockConfig(this))
|
|
, m_utilities(new UtilitiesConfig(this))
|
|
, m_sidebar(new SidebarConfig(this))
|
|
, m_services(new ServiceConfig(this))
|
|
, m_paths(new UserPaths(this)) {
|
|
if (!filePath.isEmpty())
|
|
setupFileBackend(filePath, screen);
|
|
if (fallback)
|
|
syncFromGlobal(fallback);
|
|
|
|
// Bind appearance computed properties to token base values
|
|
bindAppearanceTokens();
|
|
}
|
|
|
|
GlobalConfig* GlobalConfig::instance() {
|
|
static GlobalConfig instance;
|
|
instance.bindAppearanceTokens();
|
|
return &instance;
|
|
}
|
|
|
|
GlobalConfig* GlobalConfig::defaults() {
|
|
if (!m_defaults)
|
|
m_defaults = new GlobalConfig(nullptr, QString(), QString(), this);
|
|
return m_defaults;
|
|
}
|
|
|
|
void GlobalConfig::bindAppearanceTokens() {
|
|
if (m_tokensBound)
|
|
return;
|
|
|
|
qCDebug(lcConfig) << "GlobalConfig::bindAppearanceTokens: binding appearance to token values";
|
|
auto* const tokenAppearance = TokenConfig::instance()->appearance();
|
|
m_appearance->rounding()->bindTokens(tokenAppearance->rounding());
|
|
m_appearance->spacing()->bindTokens(tokenAppearance->spacing());
|
|
m_appearance->padding()->bindTokens(tokenAppearance->padding());
|
|
m_appearance->anim()->durations()->bindTokens(tokenAppearance->animDurations());
|
|
m_tokensBound = true;
|
|
}
|
|
|
|
GlobalConfig* GlobalConfig::forScreen(const QString& screen) {
|
|
return MonitorConfigManager::instance()->configForScreen(screen);
|
|
}
|
|
|
|
GlobalConfig* GlobalConfig::create(QQmlEngine*, QJSEngine*) {
|
|
QQmlEngine::setObjectOwnership(instance(), QQmlEngine::CppOwnership);
|
|
return instance();
|
|
}
|
|
|
|
} // namespace caelestia::config
|