File: ktexteditorpluginintegration.h

package info (click to toggle)
kdevelop 4%3A22.12.2-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 70,096 kB
  • sloc: cpp: 284,635; javascript: 3,558; python: 3,422; sh: 1,319; ansic: 685; xml: 331; php: 95; lisp: 66; makefile: 39; sed: 12
file content (125 lines) | stat: -rw-r--r-- 3,470 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
/*
    SPDX-FileCopyrightText: 2015 Milian Wolff <mail@milianw.de>

    SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
*/

#ifndef KDEVPLATFORM_KTEXTEDITOR_PLUGIN_INTEGRATION_H
#define KDEVPLATFORM_KTEXTEDITOR_PLUGIN_INTEGRATION_H

#include <QObject>
#include <QPointer>
#include <QHash>

#include <KTextEditor/MainWindow>
#include <KTextEditor/Plugin>

#include <interfaces/iplugin.h>

namespace KDevelop {
class ObjectListTracker;
class MainWindow;
}

namespace KTextEditorIntegration {

/**
 * Class mimicking the KTextEditor::Application interface
 */
class Application : public QObject
{
    Q_OBJECT
public:
    explicit Application(QObject *parent = nullptr);
    ~Application() override;

public Q_SLOTS:
    KTextEditor::MainWindow *activeMainWindow() const;
    QList<KTextEditor::MainWindow *> mainWindows() const;

    KTextEditor::Plugin *plugin(const QString &id) const;

    QList<KTextEditor::Document *> documents();

    KTextEditor::Document *openUrl(const QUrl &url, const QString &encoding = QString());
    KTextEditor::Document *findUrl(const QUrl &url) const;

    bool closeDocument(KTextEditor::Document *document) const;

    bool quit() const;
};

class MainWindow : public QObject
{
    Q_OBJECT
public:
    explicit MainWindow(KDevelop::MainWindow *mainWindow);
    ~MainWindow() override;

public Q_SLOTS:
    QWidget *createToolView(KTextEditor::Plugin *plugin, const QString &identifier,
                            KTextEditor::MainWindow::ToolViewPosition pos,
                            const QIcon &icon, const QString &text);

    KXMLGUIFactory *guiFactory() const;

    QWidget *window() const;

    QList<KTextEditor::View *> views() const;

    KTextEditor::View *activeView() const;
    KTextEditor::View *activateView(KTextEditor::Document *doc);

    QObject *pluginView(const QString &id) const;
    void splitView(Qt::Orientation orientation);
    bool closeView(KTextEditor::View *kteView);
    bool closeSplitView(KTextEditor::View *kteView);
    bool viewsInSameSplitView(KTextEditor::View* kteView1, KTextEditor::View* kteView2) const;

    QWidget *createViewBar(KTextEditor::View *view);
    void deleteViewBar(KTextEditor::View *view);
    void showViewBar(KTextEditor::View *view);
    void hideViewBar(KTextEditor::View *view);
    void addWidgetToViewBar(KTextEditor::View *view, QWidget *widget);

    KTextEditor::View *openUrl(const QUrl &url, const QString &encoding = QString());
    bool showToolView(QWidget *widget);

public:
    KTextEditor::MainWindow *interface() const;

    void addPluginView(const QString &id, QObject *pluginView);
    void removePluginView(const QString &id);

private:
    KDevelop::MainWindow* const m_mainWindow;
    KTextEditor::MainWindow *m_interface;
    QHash<QString, QPointer<QObject>> m_pluginViews;
    QHash<KTextEditor::View*, QWidget*> m_viewBars;
};

class Plugin : public KDevelop::IPlugin
{
    Q_OBJECT
public:
    explicit Plugin(KTextEditor::Plugin *plugin, QObject *parent = nullptr);
    ~Plugin() override;

    KXMLGUIClient* createGUIForMainWindow(Sublime::MainWindow *window) override;

    void unload() override;

    KTextEditor::Plugin *interface() const;

    QString pluginId() const;

private:
    QPointer<KTextEditor::Plugin> m_plugin;
    // view objects and tool views that should get deleted when the plugin gets unloaded
    KDevelop::ObjectListTracker *m_tracker;
};

void initialize();

}
#endif