File indexing completed on 2024-04-28 04:37:14

0001 /*
0002     SPDX-FileCopyrightText: 2016 Zhigalin Alexander <alexander@zhigalin.tk>
0003 
0004     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0005 */
0006 
0007 #include "colorschemechooser.h"
0008 
0009 #include <QAction>
0010 #include <QMenu>
0011 #include <QModelIndex>
0012 
0013 #include <KActionMenu>
0014 #include <KColorSchemeManager>
0015 #include <KLocalizedString>
0016 #include <KSharedConfig>
0017 #include <KConfigGroup>
0018 
0019 #include <interfaces/isession.h>
0020 #include "mainwindow.h"
0021 #include "core.h"
0022 #include "debug.h"
0023 
0024 namespace KDevelop
0025 {
0026 
0027 ColorSchemeChooser::ColorSchemeChooser(QObject* parent)
0028     : QAction(parent)
0029 {
0030     auto manager = new KColorSchemeManager(parent);
0031 
0032     const auto scheme(currentSchemeName());
0033     qCDebug(SHELL) << "Color scheme : " << scheme;
0034 
0035     auto selectionMenu = manager->createSchemeSelectionMenu(scheme, this);
0036 
0037     connect(selectionMenu->menu(), &QMenu::triggered,
0038             this, &ColorSchemeChooser::slotSchemeChanged);
0039 
0040     manager->activateScheme(manager->indexForScheme(scheme));
0041 
0042     setMenu(selectionMenu->menu());
0043     menu()->setIcon(QIcon::fromTheme(QStringLiteral("preferences-desktop-color")));
0044     menu()->setTitle(i18n("&Window Color Scheme"));
0045 }
0046 
0047 QString ColorSchemeChooser::loadCurrentScheme() const
0048 {
0049     KSharedConfigPtr config = KSharedConfig::openConfig();
0050     KConfigGroup cg(config, "UiSettings");
0051     // Since 5.67 KColorSchemeManager includes a system color scheme option that reacts to system
0052     // scheme changes. This scheme will be activated if we pass an empty string to KColorSchemeManager
0053     // So no need anymore to read the current global scheme ourselves if no custom one is configured.
0054     return cg.readEntry("ColorScheme");
0055 }
0056 
0057 void ColorSchemeChooser::saveCurrentScheme(const QString &name)
0058 {
0059     KSharedConfigPtr config = KSharedConfig::openConfig();
0060     KConfigGroup cg(config, "UiSettings");
0061     cg.writeEntry("ColorScheme", name);
0062     cg.sync();
0063 }
0064 
0065 QString ColorSchemeChooser::currentSchemeName() const
0066 {
0067     if(!menu()) return loadCurrentScheme();
0068 
0069     QAction* const action = menu()->activeAction();
0070 
0071     if(action) return KLocalizedString::removeAcceleratorMarker(action->text());
0072     // See above
0073     return QString();
0074 }
0075 
0076 void ColorSchemeChooser::slotSchemeChanged(QAction* triggeredAction)
0077 {
0078     saveCurrentScheme(KLocalizedString::removeAcceleratorMarker(triggeredAction->text()));
0079 }
0080 
0081 }  // namespace KDevelop
0082 
0083 #include "moc_colorschemechooser.cpp"