File indexing completed on 2024-05-26 05:51:57
0001 /* 0002 SPDX-FileCopyrightText: 2022 Waqar Ahmed <waqar.17a@gmail.com> 0003 SPDX-License-Identifier: LGPL-2.0-or-later 0004 */ 0005 #pragma once 0006 0007 #include "FormattersEnum.h" 0008 0009 #include <KTextEditor/Cursor> 0010 #include <KTextEditor/Editor> 0011 #include <KTextEditor/MainWindow> 0012 #include <KTextEditor/Plugin> 0013 #include <KXMLGUIClient> 0014 #include <QJsonDocument> 0015 #include <QJsonObject> 0016 #include <QPointer> 0017 #include <QVariant> 0018 0019 struct PatchLine; 0020 0021 class FormatPlugin final : public KTextEditor::Plugin 0022 { 0023 Q_OBJECT 0024 public: 0025 explicit FormatPlugin(QObject *parent = nullptr, const QVariantList & = QVariantList()); 0026 0027 QObject *createView(KTextEditor::MainWindow *mainWindow) override; 0028 0029 int configPages() const override 0030 { 0031 return 1; 0032 } 0033 0034 KTextEditor::ConfigPage *configPage(int number, QWidget *parent) override; 0035 void readConfig(); 0036 0037 QJsonObject formatterConfig() const; 0038 QString userConfigPath() const; 0039 0040 bool formatOnSave = false; 0041 0042 Q_SIGNAL void configChanged(); 0043 0044 private: 0045 void readJsonConfig(); 0046 const QJsonDocument m_defaultConfig; 0047 QJsonObject m_formatterConfig; 0048 }; 0049 0050 class FormatPluginView final : public QObject, public KXMLGUIClient 0051 { 0052 Q_OBJECT 0053 0054 public: 0055 explicit FormatPluginView(FormatPlugin *plugin, KTextEditor::MainWindow *mainwindow); 0056 ~FormatPluginView(); 0057 0058 private: 0059 void format(); 0060 void runFormatOnSave(); 0061 void onActiveViewChanged(KTextEditor::View *); 0062 void onFormattedTextReceived(class AbstractFormatter *, KTextEditor::Document *doc, const QByteArray &, int offset); 0063 void onFormattedPatchReceived(KTextEditor::Document *doc, const std::vector<PatchLine> &, bool setCursor = false); 0064 void saveDocument(KTextEditor::Document *doc); 0065 bool formatOnSave() const 0066 { 0067 return m_plugin->formatOnSave; 0068 } 0069 void onConfigChanged(); 0070 0071 QPointer<KTextEditor::Document> m_activeDoc; 0072 QByteArray m_lastChecksum; 0073 FormatPlugin *const m_plugin; 0074 KTextEditor::MainWindow *m_mainWindow; 0075 bool m_triggeredOnSave = false; 0076 QVariant m_lastProjectConfig; 0077 QJsonObject m_lastMergedConfig; 0078 };