File indexing completed on 2024-05-05 05:52:22
0001 /*************************************************************************** 0002 plugin_katetextfilter.h - description 0003 ------------------- 0004 begin : FRE Feb 23 2001 0005 copyright : (C) 2001 by Joseph Wenninger 0006 email : jowenn@bigfoot.com 0007 ***************************************************************************/ 0008 0009 /*************************************************************************** 0010 * * 0011 * SPDX-License-Identifier: GPL-2.0-or-later 0012 * * 0013 ***************************************************************************/ 0014 0015 #pragma once 0016 0017 #include <KTextEditor/Application> 0018 #include <KTextEditor/Command> 0019 #include <KTextEditor/Document> 0020 #include <KTextEditor/MainWindow> 0021 #include <KTextEditor/Plugin> 0022 #include <KTextEditor/View> 0023 0024 #include <KProcess> 0025 #include <QVariantList> 0026 0027 class PluginKateTextFilter : public KTextEditor::Plugin 0028 { 0029 Q_OBJECT 0030 0031 public: 0032 /** 0033 * Plugin constructor. 0034 */ 0035 explicit PluginKateTextFilter(QObject *parent = nullptr, const QVariantList & = QVariantList()); 0036 0037 ~PluginKateTextFilter() override; 0038 0039 QObject *createView(KTextEditor::MainWindow *mainWindow) override; 0040 0041 void runFilter(KTextEditor::View *kv, const QString &filter); 0042 0043 private: 0044 QString m_strFilterOutput; 0045 QString m_stderrOutput; 0046 QString m_last_command; 0047 KProcess *m_pFilterProcess = nullptr; 0048 QStringList completionList; 0049 bool copyResult = false; 0050 bool mergeOutput = false; 0051 bool newDocument = false; 0052 KTextEditor::MainWindow *m_mainWindow; 0053 public Q_SLOTS: 0054 void slotEditFilter(); 0055 void slotFilterReceivedStdout(); 0056 void slotFilterReceivedStderr(); 0057 void slotFilterProcessExited(int exitCode, QProcess::ExitStatus exitStatus); 0058 }; 0059 0060 class PluginKateTextFilterCommand : public KTextEditor::Command 0061 { 0062 Q_OBJECT 0063 0064 public: 0065 PluginKateTextFilterCommand(PluginKateTextFilter *plugin); 0066 // Kate::Command 0067 bool exec(KTextEditor::View *view, const QString &cmd, QString &msg, const KTextEditor::Range &range = KTextEditor::Range::invalid()) override; 0068 bool help(KTextEditor::View *view, const QString &cmd, QString &msg) override; 0069 0070 private: 0071 PluginKateTextFilter *m_plugin; 0072 }; 0073 0074 /** 0075 * Plugin view to merge the actions into the UI 0076 */ 0077 class PluginViewKateTextFilter : public QObject, public KXMLGUIClient 0078 { 0079 Q_OBJECT 0080 0081 public: 0082 /** 0083 * Construct plugin view 0084 * @param plugin our plugin 0085 * @param mainwindows the mainwindow for this view 0086 */ 0087 explicit PluginViewKateTextFilter(PluginKateTextFilter *plugin, KTextEditor::MainWindow *mainwindow); 0088 0089 /** 0090 * Our Destructor 0091 */ 0092 ~PluginViewKateTextFilter() override; 0093 0094 private: 0095 /** 0096 * the main window we belong to 0097 */ 0098 KTextEditor::MainWindow *m_mainWindow; 0099 };