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