Members of the KDE Community are recommended to subscribe to the kde-community mailing list at https://mail.kde.org/mailman/listinfo/kde-community to allow them to participate in important discussions and receive other important announcements

Commit 3d041e4c authored by Thomas Fjellstrom's avatar Thomas Fjellstrom Committed by Christoph Cullmann

Add kcolorschemechooser support and related setting menu entry

This patch takes code from kdevelop that add a settings menu entry to allow color scheme changes per instance of kate.

Differential Revision: https://phabricator.kde.org/D11785
parent 1ed0c476
......@@ -26,6 +26,7 @@ set (KATE_LIBRARY_SRCS
kateviewspace.cpp
katesavemodifieddialog.cpp
katemwmodonhddialog.cpp
katecolorschemechooser.cpp
katetabbutton.cpp
katetabbar.cpp
......
......@@ -100,6 +100,7 @@
<text>&amp;Settings</text>
<Action name="settings_show_tab_bar" append="show_merge"/>
<Action name="settings_show_full_path" append="show_merge"/>
<Action name="colorscheme_menu"/>
</Menu>
<Menu name="help">
<text>&amp;Help</text>
......
/*************************************************************************************
* This file is part of KDevPlatform *
* Copyright 2016 Zhigalin Alexander <alexander@zhigalin.tk> *
* *
* This library is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Lesser General Public *
* License as published by the Free Software Foundation; either *
* version 2.1 of the License, or (at your option) version 3, or any *
* later version accepted by the membership of KDE e.V. (or its *
* successor approved by the membership of KDE e.V.), which shall *
* act as a proxy defined in Section 6 of version 3 of the license. *
* *
* This library is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with this library. If not, see <http://www.gnu.org/licenses/>. *
*************************************************************************************/
#include "katecolorschemechooser.h"
#include <QStringList>
#include <QFileInfo>
#include <QActionGroup>
#include <QApplication>
#include <QAction>
#include <QStandardPaths>
#include <QDirIterator>
#include <QMenu>
#include <QModelIndex>
#include <KActionMenu>
#include <KColorSchemeManager>
#include <KLocalizedString>
#include <KActionCollection>
#include <KSharedConfig>
#include <KConfigGroup>
#include "katemainwindow.h"
#include "katedebug.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 Theme"));
}
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
{
KSharedConfigPtr config = KSharedConfig::openConfig(QLatin1String("kdeglobals"));
KConfigGroup group(config, "General");
return group.readEntry("ColorScheme", QStringLiteral("Breeze"));
}
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()));
}
/*************************************************************************************
* This file is part of KDevPlatform *
* Copyright 2016 Zhigalin Alexander <alexander@zhigalin.tk> *
* *
* This library is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Lesser General Public *
* License as published by the Free Software Foundation; either *
* version 2.1 of the License, or (at your option) version 3, or any *
* later version accepted by the membership of KDE e.V. (or its *
* successor approved by the membership of KDE e.V.), which shall *
* act as a proxy defined in Section 6 of version 3 of the license. *
* *
* This library is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with this library. If not, see <http://www.gnu.org/licenses/>. *
*************************************************************************************/
#ifndef COLORSCHEMECHOOSER_H
#define COLORSCHEMECHOOSER_H
#include <QObject>
#include <QAction>
#include <QApplication>
#include <QString>
#include <KColorSchemeManager>
class KActionCollection;
/**
* Provides a menu that will offer to change the color scheme
*
* Furthermore, it will save the selection in the user configuration.
*/
class KateColorSchemeChooser : public QAction
{
public:
KateColorSchemeChooser(QObject* parent);
QString currentSchemeName() const;
private Q_SLOTS:
void slotSchemeChanged(QAction* triggeredAction);
private:
QString loadCurrentScheme() const;
void saveCurrentScheme(const QString &name);
QString currentDesktopDefaultScheme() const;
};
#endif // COLORSCHEMECHOOSER_H
......@@ -36,6 +36,7 @@
#include "katequickopen.h"
#include "kateupdatedisabler.h"
#include "katedebug.h"
#include "katecolorschemechooser.h"
#include <KActionMenu>
#include <KAboutApplicationDialog>
......@@ -79,6 +80,7 @@
#include <QDir>
#include <ktexteditor/sessionconfiginterface.h>
//END
KateMwModOnHdDialog *KateMainWindow::s_modOnHdDialog = nullptr;
......@@ -229,6 +231,9 @@ void KateMainWindow::setupImportantActions()
connect(m_paShowPath, SIGNAL(toggled(bool)), this, SLOT(updateCaption()));
m_paShowPath->setWhatsThis(i18n("Show the complete document path in the window caption"));
// Load themes
actionCollection()->addAction(QStringLiteral("colorscheme_menu"), new KateColorSchemeChooser(actionCollection()));
QAction * a = actionCollection()->addAction(KStandardAction::Back, QStringLiteral("view_prev_tab"));
a->setText(i18n("&Previous Tab"));
a->setWhatsThis(i18n("Focus the previous tab."));
......
......@@ -523,6 +523,7 @@ private:
KToggleAction *m_paShowMenuBar;
KToggleAction *m_paShowStatusBar;
KToggleAction *m_paShowTabBar;
QWidget *m_bottomViewBarContainer;
KateContainerStackedLayout *m_bottomContainerStack;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment