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