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

0001 /*
0002     SPDX-FileCopyrightText: 2015 Milian Wolff <mail@milianw.de>
0003 
0004     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0005 */
0006 
0007 #ifndef KDEVPLATFORM_KTEXTEDITOR_PLUGIN_INTEGRATION_H
0008 #define KDEVPLATFORM_KTEXTEDITOR_PLUGIN_INTEGRATION_H
0009 
0010 #include <QObject>
0011 #include <QPointer>
0012 #include <QHash>
0013 
0014 #include <KTextEditor/MainWindow>
0015 #include <KTextEditor/Plugin>
0016 
0017 #include <interfaces/iplugin.h>
0018 
0019 namespace KDevelop {
0020 class ObjectListTracker;
0021 class MainWindow;
0022 }
0023 
0024 namespace KTextEditorIntegration {
0025 
0026 /**
0027  * Class mimicking the KTextEditor::Application interface
0028  */
0029 class Application : public QObject
0030 {
0031     Q_OBJECT
0032 public:
0033     explicit Application(QObject *parent = nullptr);
0034     ~Application() override;
0035 
0036 public Q_SLOTS:
0037     KTextEditor::MainWindow *activeMainWindow() const;
0038     QList<KTextEditor::MainWindow *> mainWindows() const;
0039 
0040     KTextEditor::Plugin *plugin(const QString &id) const;
0041 
0042     QList<KTextEditor::Document *> documents();
0043 
0044     KTextEditor::Document *openUrl(const QUrl &url, const QString &encoding = QString());
0045     KTextEditor::Document *findUrl(const QUrl &url) const;
0046 
0047     bool closeDocument(KTextEditor::Document *document) const;
0048 
0049     bool quit() const;
0050 };
0051 
0052 class MainWindow : public QObject
0053 {
0054     Q_OBJECT
0055 public:
0056     explicit MainWindow(KDevelop::MainWindow *mainWindow);
0057     ~MainWindow() override;
0058 
0059 public Q_SLOTS:
0060     QWidget *createToolView(KTextEditor::Plugin *plugin, const QString &identifier,
0061                             KTextEditor::MainWindow::ToolViewPosition pos,
0062                             const QIcon &icon, const QString &text);
0063 
0064     KXMLGUIFactory *guiFactory() const;
0065 
0066     QWidget *window() const;
0067 
0068     QList<KTextEditor::View *> views() const;
0069 
0070     KTextEditor::View *activeView() const;
0071     KTextEditor::View *activateView(KTextEditor::Document *doc);
0072 
0073     QObject *pluginView(const QString &id) const;
0074     void splitView(Qt::Orientation orientation);
0075     bool closeView(KTextEditor::View *kteView);
0076     bool closeSplitView(KTextEditor::View *kteView);
0077     bool viewsInSameSplitView(KTextEditor::View* kteView1, KTextEditor::View* kteView2) const;
0078 
0079     QWidget *createViewBar(KTextEditor::View *view);
0080     void deleteViewBar(KTextEditor::View *view);
0081     void showViewBar(KTextEditor::View *view);
0082     void hideViewBar(KTextEditor::View *view);
0083     void addWidgetToViewBar(KTextEditor::View *view, QWidget *widget);
0084 
0085     KTextEditor::View *openUrl(const QUrl &url, const QString &encoding = QString());
0086     bool showToolView(QWidget *widget);
0087 
0088 public:
0089     KTextEditor::MainWindow *interface() const;
0090 
0091     void addPluginView(const QString &id, QObject *pluginView);
0092     void removePluginView(const QString &id);
0093 
0094 private:
0095     KDevelop::MainWindow* const m_mainWindow;
0096     KTextEditor::MainWindow *m_interface;
0097     QHash<QString, QPointer<QObject>> m_pluginViews;
0098     QHash<KTextEditor::View*, QWidget*> m_viewBars;
0099 };
0100 
0101 class Plugin : public KDevelop::IPlugin
0102 {
0103     Q_OBJECT
0104 public:
0105     explicit Plugin(KTextEditor::Plugin *plugin, QObject *parent = nullptr);
0106     ~Plugin() override;
0107 
0108     KXMLGUIClient* createGUIForMainWindow(Sublime::MainWindow *window) override;
0109 
0110     void unload() override;
0111 
0112     KTextEditor::Plugin *interface() const;
0113 
0114     QString pluginId() const;
0115 
0116 private:
0117     QPointer<KTextEditor::Plugin> m_plugin;
0118     // view objects and tool views that should get deleted when the plugin gets unloaded
0119     KDevelop::ObjectListTracker *m_tracker;
0120 };
0121 
0122 void initialize();
0123 
0124 }
0125 #endif