File indexing completed on 2024-04-28 04:37:16

0001 /*
0002     SPDX-FileCopyrightText: 2014 Alex Richardson <arichardson.kde@gmail.com>
0003 
0004     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0005 */
0006 
0007 #include "editorconfigpage.h"
0008 
0009 #include <QIcon>
0010 #include <QVBoxLayout>
0011 
0012 #include <KLocalizedString>
0013 
0014 #include <KTextEditor/Editor>
0015 
0016 using namespace KDevelop;
0017 
0018 namespace {
0019 
0020 class KTextEditorConfigPageAdapter : public ConfigPage
0021 {
0022     Q_OBJECT
0023 
0024 public:
0025     explicit KTextEditorConfigPageAdapter(KTextEditor::ConfigPage* page, QWidget* parent = nullptr)
0026         : ConfigPage(nullptr, nullptr, parent), m_page(page)
0027     {
0028         page->setParent(this);
0029 
0030         auto* layout = new QVBoxLayout(this);
0031         layout->setContentsMargins(0, 0, 0, 0);
0032         layout->addWidget(page);
0033         setLayout(layout);
0034 
0035         connect(page, &KTextEditor::ConfigPage::changed,
0036                 this, &ConfigPage::changed);
0037     }
0038 
0039     ~KTextEditorConfigPageAdapter() override {}
0040 
0041     QString name() const override
0042     {
0043         return m_page->name();
0044     }
0045 
0046     QIcon icon() const override
0047     {
0048         return m_page->icon();
0049     }
0050 
0051     QString fullName() const override
0052     {
0053         return m_page->fullName();
0054     }
0055 
0056 public Q_SLOTS:
0057     void apply() override
0058     {
0059         m_page->apply();
0060     }
0061     void defaults() override
0062     {
0063         m_page->defaults();
0064     }
0065     void reset() override
0066     {
0067         m_page->reset();
0068     }
0069 
0070 protected:
0071     bool needsResetDuringInitialization() const override
0072     {
0073         // Optimization: KateThemeConfigPage::reset() is very slow (takes about 600 ms);
0074         // neither KTextEditor nor Kate calls reset() after creating a KTextEditor::ConfigPage.
0075         return false;
0076     }
0077 
0078 private:
0079     KTextEditor::ConfigPage* const m_page;
0080 };
0081 
0082 }
0083 
0084 EditorConfigPage::EditorConfigPage(QWidget* parent)
0085     : ConfigPage(nullptr, nullptr, parent)
0086 {
0087     setObjectName(QStringLiteral("editorconfig"));
0088 }
0089 
0090 EditorConfigPage::~EditorConfigPage() {}
0091 
0092 QString EditorConfigPage::name() const
0093 {
0094     return i18nc("@title:tab", "Editor");
0095 }
0096 
0097 QIcon EditorConfigPage::icon() const
0098 {
0099     return QIcon::fromTheme(QStringLiteral("accessories-text-editor"));
0100 }
0101 
0102 QString EditorConfigPage::fullName() const
0103 {
0104     return i18n("Configure Text Editor");
0105 }
0106 
0107 int EditorConfigPage::childPages() const
0108 {
0109     return KTextEditor::Editor::instance()->configPages();
0110 }
0111 
0112 ConfigPage* EditorConfigPage::childPage(int number)
0113 {
0114     auto page = KTextEditor::Editor::instance()->configPage(number, this);
0115     if (page) {
0116         return new KTextEditorConfigPageAdapter(page, this);
0117     }
0118     return nullptr;
0119 }
0120 
0121 #include "editorconfigpage.moc"
0122 #include "moc_editorconfigpage.cpp"