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 };