diff --git a/kate/ollie_kate.cpp b/kate/ollie_kate.cpp index 4f2e9ac..bcf9114 100644 --- a/kate/ollie_kate.cpp +++ b/kate/ollie_kate.cpp @@ -12,6 +12,7 @@ #endif #include +#include #include #include #include @@ -19,6 +20,7 @@ #include #include #include +#include K_PLUGIN_CLASS_WITH_JSON(OllieKatePlugin, "metadata.json") @@ -54,6 +56,64 @@ void OllieKatePlugin::loadConfig() m_completionEnabled = grp.readEntry("CompletionEnabled", true); } +void OllieKatePlugin::saveConfig() +{ + KConfigGroup grp(KSharedConfig::openConfig(), QStringLiteral("Ollie")); + grp.writeEntry("CompletionEnabled", m_completionEnabled); + grp.sync(); +} + +void OllieKatePlugin::setCompletionEnabled(bool enabled) +{ + m_completionEnabled = enabled; + saveConfig(); +} + +int OllieKatePlugin::configPages() const +{ + return 1; +} + +KTextEditor::ConfigPage *OllieKatePlugin::configPage(int number, QWidget *parent) +{ + if (number != 0) return nullptr; + + class OllieConfigPage : public KTextEditor::ConfigPage + { + public: + OllieConfigPage(OllieKatePlugin *plugin, QWidget *parent) + : KTextEditor::ConfigPage(parent), m_plugin(plugin) + { + auto *layout = new QVBoxLayout(this); + m_enabledCheck = new QCheckBox(QStringLiteral("Automatic completion (ghost text)"), this); + layout->addWidget(m_enabledCheck); + layout->addStretch(); + reset(); + connect(m_enabledCheck, &QCheckBox::toggled, this, &ConfigPage::changed); + } + + QString name() const override { return QStringLiteral("Ollie"); } + QString fullName() const override { return QStringLiteral("Ollie Settings"); } + QIcon icon() const override { return QIcon::fromTheme(QStringLiteral("system-run")); } + + void apply() override { + m_plugin->setCompletionEnabled(m_enabledCheck->isChecked()); + } + void reset() override { + m_enabledCheck->setChecked(m_plugin->completionEnabled()); + } + void defaults() override { + m_enabledCheck->setChecked(true); + } + + private: + OllieKatePlugin *m_plugin; + QCheckBox *m_enabledCheck; + }; + + return new OllieConfigPage(this, parent); +} + // --- View --- OllieKateView::OllieKateView(OllieKatePlugin *plugin, KTextEditor::MainWindow *mainWindow) @@ -494,6 +554,7 @@ void OllieKateView::setupGhostProvider() } m_ghost = new OllieGhostProvider(view, m_plugin, this); + m_ghost->setEnabled(m_plugin->completionEnabled()); if (QWidget *proxy = view->focusProxy()) { proxy->installEventFilter(this); diff --git a/kate/ollie_kate.h b/kate/ollie_kate.h index 4ef6c87..ea127eb 100644 --- a/kate/ollie_kate.h +++ b/kate/ollie_kate.h @@ -2,6 +2,7 @@ #define OLLIE_KATE_PLUGIN_H #include +#include #include #include #if QT_VERSION_MAJOR >= 6 @@ -32,14 +33,18 @@ public: ~OllieKatePlugin() override = default; QObject *createView(KTextEditor::MainWindow *mainWindow) override; + int configPages() const override; + KTextEditor::ConfigPage *configPage(int number, QWidget *parent) override; // Completion config accessors QString completionBackend() const { return m_completionBackend; } QString completionModel() const { return m_completionModel; } bool completionEnabled() const { return m_completionEnabled; } + void setCompletionEnabled(bool enabled); private: void loadConfig(); + void saveConfig(); QString m_completionBackend; QString m_completionModel;