Git commit 895160f40b9f55c50a17f7a9d968b952bcac4f50 by Christoph Cullmann. Committed on 28/09/2020 at 14:16. Pushed by cullmann into branch 'master'.
improve Kate config dialog GUI: improved config dialog remove tree, plain list avoid application/editor separation move editor component things to top, as that is the stuff most people want to change, e.g. fonts/colors/editing behaviors M +57 -60 kate/kateconfigdialog.cpp M +15 -14 kate/kateconfigdialog.h M +1 -1 kate/katemainwindow.cpp https://invent.kde.org/utilities/kate/commit/895160f40b9f55c50a17f7a9d968b952bcac4f50 diff --git a/kate/kateconfigdialog.cpp b/kate/kateconfigdialog.cpp index 46f9f9dd4..22c543230 100644 --- a/kate/kateconfigdialog.cpp +++ b/kate/kateconfigdialog.cpp @@ -8,8 +8,6 @@ #include "kateconfigdialog.h" -#include "ui_sessionconfigwidget.h" - #include "kateapp.h" #include "kateconfigplugindialogpage.h" #include "katedebug.h" @@ -38,34 +36,47 @@ #include <QLabel> #include <QVBoxLayout> -KateConfigDialog::KateConfigDialog(KateMainWindow *parent, KTextEditor::View *view) +KateConfigDialog::KateConfigDialog(KateMainWindow *parent) : KPageDialog(parent) , m_mainWindow(parent) - , m_view(view) { - setFaceType(Tree); + // setFaceType(List); setWindowTitle(i18n("Configure")); setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Apply | QDialogButtonBox::Cancel | QDialogButtonBox::Help); setObjectName(QStringLiteral("configdialog")); - KSharedConfig::Ptr config = KSharedConfig::openConfig(); - KConfigGroup cgGeneral = KConfigGroup(config, "General"); + // first: add the KTextEditor config pages + // rational: most people want to alter e.g. the fonts, the colors or some other editor stuff first + addEditorPages(); + // second: add out own config pages + // this includes all plugin config pages, added to the bottom + addBehaviorPage(); + addSessionPage(); + addFeedbackPage(); + addPluginsPage(); + addPluginPages(); + + // handle dialog actions + connect(this, &KateConfigDialog::accepted, this, &KateConfigDialog::slotApply); + connect(buttonBox()->button(QDialogButtonBox::Apply), &QPushButton::clicked, this, &KateConfigDialog::slotApply); + connect(buttonBox()->button(QDialogButtonBox::Help), &QPushButton::clicked, this, &KateConfigDialog::slotHelp); + connect(this, &KateConfigDialog::currentPageChanged, this, &KateConfigDialog::slotCurrentPageChanged); + + // ensure no stray signals already set this! buttonBox()->button(QDialogButtonBox::Apply)->setEnabled(false); + m_dataChanged = false; +} - KPageWidgetItem *applicationItem = addPage(new QWidget, i18n("Application")); - applicationItem->setIcon(QIcon::fromTheme(QStringLiteral("preferences-other"))); - applicationItem->setHeader(i18n("Application Options")); - applicationItem->setCheckable(false); - applicationItem->setEnabled(false); - m_applicationPage = applicationItem; +void KateConfigDialog::addBehaviorPage() +{ + KSharedConfig::Ptr config = KSharedConfig::openConfig(); + KConfigGroup cgGeneral = KConfigGroup(config, "General"); - // BEGIN General page QFrame *generalFrame = new QFrame; - KPageWidgetItem *item = addSubPage(applicationItem, generalFrame, i18n("General")); - item->setHeader(i18n("General Options")); + KPageWidgetItem *item = addPage(generalFrame, i18n("Behavior")); + item->setHeader(i18n("Behavior Options")); item->setIcon(QIcon::fromTheme(QStringLiteral("go-home"))); - setCurrentPage(item); QVBoxLayout *layout = new QVBoxLayout(generalFrame); layout->setContentsMargins(0, 0, 0, 0); @@ -77,7 +88,7 @@ KateConfigDialog::KateConfigDialog(KateMainWindow *parent, KTextEditor::View *vi // modified files notification m_modNotifications = new QCheckBox(i18n("Wa&rn about files modified by foreign processes"), buttonGroup); - m_modNotifications->setChecked(parent->modNotificationEnabled()); + m_modNotifications->setChecked(m_mainWindow->modNotificationEnabled()); m_modNotifications->setWhatsThis( i18n("If enabled, when Kate receives focus you will be asked what to do with " "files that have been modified on the hard disk. If not enabled, you will " @@ -89,7 +100,7 @@ KateConfigDialog::KateConfigDialog(KateMainWindow *parent, KTextEditor::View *vi // Closing last file closes Kate m_modCloseAfterLast = new QCheckBox(i18n("Close Kate entirely when the last file is closed"), buttonGroup); - m_modCloseAfterLast->setChecked(parent->modCloseAfterLast()); + m_modCloseAfterLast->setChecked(m_mainWindow->modCloseAfterLast()); m_modCloseAfterLast->setWhatsThis( i18n("If enabled, Kate will shutdown when the last file being edited is closed, " "otherwise a blank page will open so that you can start a new file.")); @@ -185,15 +196,19 @@ KateConfigDialog::KateConfigDialog(KateMainWindow *parent, KTextEditor::View *vi layout->addWidget(buttonGroup); layout->addStretch(1); // :-] works correct without autoadd - // END General page +} + +void KateConfigDialog::addSessionPage() +{ + KSharedConfig::Ptr config = KSharedConfig::openConfig(); + KConfigGroup cgGeneral = KConfigGroup(config, "General"); - // BEGIN Session page QWidget *sessionsPage = new QWidget(); - item = addSubPage(applicationItem, sessionsPage, i18n("Session")); + auto item = addPage(sessionsPage, i18n("Session")); item->setHeader(i18n("Session Management")); item->setIcon(QIcon::fromTheme(QStringLiteral("view-history"))); - sessionConfigUi = new Ui::SessionConfigWidget(); + sessionConfigUi.reset(new Ui::SessionConfigWidget()); sessionConfigUi->setupUi(sessionsPage); // restore view config @@ -214,9 +229,10 @@ KateConfigDialog::KateConfigDialog(KateMainWindow *parent, KTextEditor::View *vi connect(sessionConfigUi->startNewSessionRadioButton, &QRadioButton::toggled, this, &KateConfigDialog::slotChanged); connect(sessionConfigUi->loadLastUserSessionRadioButton, &QRadioButton::toggled, this, &KateConfigDialog::slotChanged); connect(sessionConfigUi->manuallyChooseSessionRadioButton, &QRadioButton::toggled, this, &KateConfigDialog::slotChanged); - // END Session page +} - // BEGIN Plugins page +void KateConfigDialog::addPluginsPage() +{ QFrame *page = new QFrame(this); QVBoxLayout *vlayout = new QVBoxLayout(page); vlayout->setContentsMargins(0, 0, 0, 0); @@ -226,22 +242,17 @@ KateConfigDialog::KateConfigDialog(KateMainWindow *parent, KTextEditor::View *vi vlayout->addWidget(configPluginPage); connect(configPluginPage, &KateConfigPluginPage::changed, this, &KateConfigDialog::slotChanged); - item = addSubPage(applicationItem, page, i18n("Plugins")); + auto item = addPage(page, i18n("Plugins")); item->setHeader(i18n("Plugin Manager")); item->setIcon(QIcon::fromTheme(QStringLiteral("preferences-plugin"))); +} - const KatePluginList &pluginList(KateApp::self()->pluginManager()->pluginList()); - for (const KatePluginInfo &plugin : pluginList) { - if (plugin.load) { - addPluginPage(plugin.plugin); - } - } - // END Plugins page - +void KateConfigDialog::addFeedbackPage() +{ #ifdef WITH_KUSERFEEDBACK // KUserFeedback Config - page = new QFrame(this); - vlayout = new QVBoxLayout(page); + auto page = new QFrame(this); + auto vlayout = new QVBoxLayout(page); vlayout->setContentsMargins(0, 0, 0, 0); vlayout->setSpacing(0); @@ -250,34 +261,20 @@ KateConfigDialog::KateConfigDialog(KateMainWindow *parent, KTextEditor::View *vi connect(m_userFeedbackWidget, &KUserFeedback::FeedbackConfigWidget::configurationChanged, this, &KateConfigDialog::slotChanged); vlayout->addWidget(m_userFeedbackWidget); - item = addSubPage(applicationItem, page, i18n("User Feedback")); + auto item = addPage(page, i18n("User Feedback")); item->setHeader(i18n("User Feedback")); item->setIcon(QIcon::fromTheme(QStringLiteral("preferences-desktop-locale"))); #endif - - // editor widgets from kwrite/kwdialog - m_editorPage = addPage(new QWidget, i18n("Editor Component")); - m_editorPage->setIcon(QIcon::fromTheme(QStringLiteral("accessories-text-editor"))); - m_editorPage->setHeader(i18n("Editor Component Options")); - m_editorPage->setCheckable(false); - m_editorPage->setEnabled(false); - - addEditorPages(); - - connect(this, &KateConfigDialog::accepted, this, &KateConfigDialog::slotApply); - connect(buttonBox()->button(QDialogButtonBox::Apply), &QPushButton::clicked, this, &KateConfigDialog::slotApply); - connect(buttonBox()->button(QDialogButtonBox::Help), &QPushButton::clicked, this, &KateConfigDialog::slotHelp); - connect(this, &KateConfigDialog::currentPageChanged, this, &KateConfigDialog::slotCurrentPageChanged); - - resize(minimumSizeHint()); - - // ensure no stray signals already set this! - m_dataChanged = false; } -KateConfigDialog::~KateConfigDialog() +void KateConfigDialog::addPluginPages() { - delete sessionConfigUi; + const KatePluginList &pluginList(KateApp::self()->pluginManager()->pluginList()); + for (const KatePluginInfo &plugin : pluginList) { + if (plugin.load) { + addPluginPage(plugin.plugin); + } + } } void KateConfigDialog::addEditorPages() @@ -286,7 +283,7 @@ void KateConfigDialog::addEditorPages() KTextEditor::ConfigPage *page = KTextEditor::Editor::instance()->configPage(i, this); connect(page, &KTextEditor::ConfigPage::changed, this, &KateConfigDialog::slotChanged); m_editorPages.push_back(page); - KPageWidgetItem *item = addSubPage(m_editorPage, page, page->name()); + KPageWidgetItem *item = addPage(page, page->name()); item->setHeader(page->fullName()); item->setIcon(page->icon()); } @@ -303,7 +300,7 @@ void KateConfigDialog::addPluginPage(KTextEditor::Plugin *plugin) KTextEditor::ConfigPage *cp = plugin->configPage(i, page); page->layout()->addWidget(cp); - KPageWidgetItem *item = addSubPage(m_applicationPage, page, cp->name()); + KPageWidgetItem *item = addPage(page, cp->name()); item->setHeader(cp->fullName()); item->setIcon(cp->icon()); diff --git a/kate/kateconfigdialog.h b/kate/kateconfigdialog.h index 03fd3b313..8b75c234e 100644 --- a/kate/kateconfigdialog.h +++ b/kate/kateconfigdialog.h @@ -18,21 +18,20 @@ #include <KPageDialog> +#include <memory> + #ifdef WITH_KUSERFEEDBACK #include <KUserFeedback/FeedbackConfigWidget> #endif +#include "ui_sessionconfigwidget.h" + class QCheckBox; class QComboBox; class QSpinBox; class KateMainWindow; class KPluralHandlingSpinBox; -namespace Ui -{ -class SessionConfigWidget; -} - struct PluginPageListItem { KTextEditor::Plugin *plugin; int idInPlugin; @@ -46,8 +45,7 @@ class KateConfigDialog : public KPageDialog Q_OBJECT public: - KateConfigDialog(KateMainWindow *parent, KTextEditor::View *view); - ~KateConfigDialog() override; + KateConfigDialog(KateMainWindow *parent); public: // static /** @@ -72,9 +70,16 @@ protected: void closeEvent(QCloseEvent *event) override; private: - KateMainWindow *m_mainWindow; + void addBehaviorPage(); + void addSessionPage(); + void addPluginsPage(); + void addFeedbackPage(); + void addPluginPages(); + void addEditorPages(); + +private: + KateMainWindow * const m_mainWindow; - KTextEditor::View *m_view; bool m_dataChanged = false; QCheckBox *m_modNotifications; @@ -86,14 +91,10 @@ private: QSpinBox *m_tabLimit; // Sessions Page - Ui::SessionConfigWidget *sessionConfigUi; + std::unique_ptr<Ui::SessionConfigWidget> sessionConfigUi; QHash<KPageWidgetItem *, PluginPageListItem *> m_pluginPages; QList<KTextEditor::ConfigPage *> m_editorPages; - KPageWidgetItem *m_applicationPage; - KPageWidgetItem *m_editorPage; - - void addEditorPages(); #ifdef WITH_KUSERFEEDBACK KUserFeedback::FeedbackConfigWidget *m_userFeedbackWidget = nullptr; diff --git a/kate/katemainwindow.cpp b/kate/katemainwindow.cpp index 96f31c491..130a53612 100644 --- a/kate/katemainwindow.cpp +++ b/kate/katemainwindow.cpp @@ -843,7 +843,7 @@ bool KateMainWindow::showPluginConfigPage(KTextEditor::Plugin *configpageinterfa return false; } - KateConfigDialog *dlg = new KateConfigDialog(this, m_viewManager->activeView()); + KateConfigDialog *dlg = new KateConfigDialog(this); if (configpageinterface) { dlg->showAppPluginPage(configpageinterface, id); }
