/
katecolorschemechooser.cpp
93 lines (76 loc) · 3.2 KB
/
katecolorschemechooser.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
/*************************************************************************************
* This file is part of KDevPlatform *
* SPDX-FileCopyrightText: 2016 Zhigalin Alexander <alexander@zhigalin.tk> *
* *
* SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
*************************************************************************************/
#include "katecolorschemechooser.h"
#include <QActionGroup>
#include <QDirIterator>
#include <QFileInfo>
#include <QMenu>
#include <QModelIndex>
#include <QStandardPaths>
#include <QStringList>
#include <QtGlobal>
#include <KActionCollection>
#include <KActionMenu>
#include <KConfigGroup>
#include <KLocalizedString>
#include <KSharedConfig>
#include <kconfigwidgets_version.h>
#include "katedebug.h"
#include "katemainwindow.h"
KateColorSchemeChooser::KateColorSchemeChooser(QObject *parent)
: QAction(parent)
{
auto manager = new KColorSchemeManager(parent);
const auto scheme(currentSchemeName());
qCDebug(LOG_KATE) << "Color scheme : " << scheme;
auto selectionMenu = manager->createSchemeSelectionMenu(scheme, this);
connect(selectionMenu->menu(), &QMenu::triggered, this, &KateColorSchemeChooser::slotSchemeChanged);
manager->activateScheme(manager->indexForScheme(scheme));
setMenu(selectionMenu->menu());
menu()->setIcon(QIcon::fromTheme(QStringLiteral("preferences-desktop-color")));
menu()->setTitle(i18n("&Color Scheme"));
}
QString KateColorSchemeChooser::loadCurrentScheme() const
{
KSharedConfigPtr config = KSharedConfig::openConfig();
KConfigGroup cg(config, "UiSettings");
return cg.readEntry("ColorScheme", currentDesktopDefaultScheme());
}
void KateColorSchemeChooser::saveCurrentScheme(const QString &name)
{
KSharedConfigPtr config = KSharedConfig::openConfig();
KConfigGroup cg(config, "UiSettings");
cg.writeEntry("ColorScheme", name);
cg.sync();
}
QString KateColorSchemeChooser::currentDesktopDefaultScheme() const
{
#if KCONFIGWIDGETS_VERSION < QT_VERSION_CHECK(5, 67, 0)
KSharedConfigPtr config = KSharedConfig::openConfig(QStringLiteral("kdeglobals"));
KConfigGroup group(config, "General");
const QString scheme = group.readEntry("ColorScheme", QStringLiteral("Breeze"));
const QString path = QStandardPaths::locate(QStandardPaths::GenericDataLocation, QStringLiteral("color-schemes/%1.colors").arg(scheme));
KSharedConfigPtr schemeFile = KSharedConfig::openConfig(path, KConfig::SimpleConfig);
const QString name = KConfigGroup(schemeFile, "General").readEntry("Name", scheme);
return name;
#else
return QString();
#endif
}
QString KateColorSchemeChooser::currentSchemeName() const
{
if (!menu())
return loadCurrentScheme();
QAction *const action = menu()->activeAction();
if (action)
return KLocalizedString::removeAcceleratorMarker(action->text());
return currentDesktopDefaultScheme();
}
void KateColorSchemeChooser::slotSchemeChanged(QAction *triggeredAction)
{
saveCurrentScheme(KLocalizedString::removeAcceleratorMarker(triggeredAction->text()));
}