KWin
Loading...
Searching...
No Matches
auroraeconfig.cpp
Go to the documentation of this file.
1/*
2 SPDX-FileCopyrightText: 2009, 2010, 2012 Martin Gräßlin <mgraesslin@kde.org>
3
4 SPDX-License-Identifier: GPL-2.0-or-later
5*/
6
7#include "auroraeconfig.h"
8#include "auroraeshared.h"
9#include <KDecoration2/DecorationButton>
10#include <KLocalizedString>
11#include <KLocalizedTranslator>
12#include <KPluginFactory>
13#include <QComboBox>
14#include <QCoreApplication>
15#include <QFileInfo>
16#include <QHBoxLayout>
17#include <QLabel>
18#include <QUiLoader>
19
21
22namespace Aurorae
23{
24
25ConfigurationModule::ConfigurationModule(QObject *parent, const KPluginMetaData &data, const QVariantList &args)
26 : KCModule(parent, data)
27 , m_theme(findTheme(args))
28 , m_buttonSize(int(KDecoration2::BorderSize::Normal) - s_indexMapper)
29{
30 init();
31}
32
33void ConfigurationModule::init()
34{
35 if (m_theme.startsWith(QLatin1String("__aurorae__svg__"))) {
36 // load the generic setting module
37 initSvg();
38 } else {
39 initQml();
40 }
41}
42
43void ConfigurationModule::initSvg()
44{
45 QWidget *form = new QWidget(widget());
46 form->setLayout(new QHBoxLayout(form));
47 QComboBox *sizes = new QComboBox(form);
48 sizes->addItem(i18nc("@item:inlistbox Button size:", "Tiny"));
49 sizes->addItem(i18nc("@item:inlistbox Button size:", "Normal"));
50 sizes->addItem(i18nc("@item:inlistbox Button size:", "Large"));
51 sizes->addItem(i18nc("@item:inlistbox Button size:", "Very Large"));
52 sizes->addItem(i18nc("@item:inlistbox Button size:", "Huge"));
53 sizes->addItem(i18nc("@item:inlistbox Button size:", "Very Huge"));
54 sizes->addItem(i18nc("@item:inlistbox Button size:", "Oversized"));
55 sizes->setObjectName(QStringLiteral("kcfg_ButtonSize"));
56
57 QLabel *label = new QLabel(i18n("Button size:"), form);
58 label->setBuddy(sizes);
59 form->layout()->addWidget(label);
60 form->layout()->addWidget(sizes);
61
62 widget()->setLayout(new QVBoxLayout);
63 widget()->layout()->addWidget(form);
64
65 KCoreConfigSkeleton *skel = new KCoreConfigSkeleton(KSharedConfig::openConfig(QStringLiteral("auroraerc")), this);
66 skel->setCurrentGroup(m_theme.mid(16));
67 skel->addItemInt(QStringLiteral("ButtonSize"),
68 m_buttonSize,
69 int(KDecoration2::BorderSize::Normal) - s_indexMapper,
70 QStringLiteral("ButtonSize"));
71 addConfig(skel, form);
72}
73
74void ConfigurationModule::initQml()
75{
76 const QString packageRoot = QStandardPaths::locate(QStandardPaths::GenericDataLocation,
77 QLatin1String("kwin/decorations/") + m_theme,
78 QStandardPaths::LocateDirectory);
79 if (packageRoot.isEmpty()) {
80 return;
81 }
82
83 const KPluginMetaData metaData = KPluginMetaData::fromJsonFile(packageRoot + QLatin1String("/metadata.json"));
84 if (!metaData.isValid()) {
85 return;
86 }
87
88 const QString xml = packageRoot + QLatin1String("/contents/config/main.xml");
89 const QString ui = packageRoot + QLatin1String("/contents/ui/config.ui");
90 if (!QFileInfo::exists(xml) || !QFileInfo::exists(ui)) {
91 return;
92 }
93
94 KLocalizedTranslator *translator = new KLocalizedTranslator(this);
95 QCoreApplication::instance()->installTranslator(translator);
96 const QString translationDomain = metaData.value("X-KWin-Config-TranslationDomain");
97 if (!translationDomain.isEmpty()) {
98 translator->setTranslationDomain(translationDomain);
99 }
100
101 // load the KConfigSkeleton
102 QFile configFile(xml);
103 KSharedConfigPtr auroraeConfig = KSharedConfig::openConfig("auroraerc");
104 KConfigGroup configGroup = auroraeConfig->group(m_theme);
105 m_skeleton = new KConfigLoader(configGroup, &configFile, this);
106 // load the ui file
107 QUiLoader *loader = new QUiLoader(this);
108 loader->setLanguageChangeEnabled(true);
109 QFile uiFile(ui);
110 uiFile.open(QFile::ReadOnly);
111 QWidget *customConfigForm = loader->load(&uiFile, widget());
112 translator->addContextToMonitor(customConfigForm->objectName());
113 uiFile.close();
114 widget()->setLayout(new QVBoxLayout);
115 widget()->layout()->addWidget(customConfigForm);
116 // connect the ui file with the skeleton
117 addConfig(m_skeleton, customConfigForm);
118
119 // send a custom event to the translator to retranslate using our translator
120 QEvent le(QEvent::LanguageChange);
121 QCoreApplication::sendEvent(customConfigForm, &le);
122}
123
124}
125
126#include "auroraeconfig.moc"
127
128#include "moc_auroraeconfig.cpp"
K_PLUGIN_CLASS_WITH_JSON(KCMKWinRules, "kcm_kwinrules.json")