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"