File: browsemanager.h

package info (click to toggle)
kdevelop 4%3A25.04.0-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 73,508 kB
  • sloc: cpp: 291,803; python: 4,322; javascript: 3,518; sh: 1,316; ansic: 703; xml: 414; php: 95; lisp: 66; makefile: 31; sed: 12
file content (121 lines) | stat: -rw-r--r-- 2,919 bytes parent folder | download | duplicates (3)
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
/*
    SPDX-FileCopyrightText: 2008 David Nolden <david.nolden.kdevelop@art-master.de>

    SPDX-License-Identifier: LGPL-2.0-or-later
*/

#ifndef KDEVPLATFORM_PLUGIN_BROWSEMANAGER_H
#define KDEVPLATFORM_PLUGIN_BROWSEMANAGER_H

#include <QCursor>
#include <QMap>
#include <QObject>
#include <QPointer>
#include <QUrl>
#include <KTextEditor/Cursor>

class QWidget;

namespace KTextEditor {
class View;
class Document;
}

namespace KDevelop {
class IDocument;
}

class EditorViewWatcher
    : public QObject
{
    Q_OBJECT

public:
    explicit EditorViewWatcher(QObject* parent = nullptr);
    QList<KTextEditor::View*> allViews();

private:
    ///Called for every added view. Reimplement this to catch them.
    virtual void viewAdded(KTextEditor::View*);

private Q_SLOTS:
    void viewDestroyed(QObject* view);
    void viewCreated(KTextEditor::Document*, KTextEditor::View*);
    void documentCreated(KDevelop::IDocument* document);

private:
    void addViewInternal(KTextEditor::View* view);
    QList<KTextEditor::View*> m_views;
};

class ContextBrowserPlugin;
class BrowseManager;

class Watcher
    : public EditorViewWatcher
{
    Q_OBJECT

public:
    explicit Watcher(BrowseManager* manager);
    void viewAdded(KTextEditor::View*) override;

private:
    BrowseManager* m_manager;
};

/**
 * Integrates the context-browser with the editor views, by listening for navigation events, and implementing html-like source browsing
 */

class BrowseManager
    : public QObject
{
    Q_OBJECT

public:
    explicit BrowseManager(ContextBrowserPlugin* controller);

    void viewAdded(KTextEditor::View* view);

    ///Installs/uninstalls the event-filter
    void applyEventFilter(QWidget* object, bool install);
Q_SIGNALS:
    ///Emitted when browsing was started using the magic-modifier
    void startDelayedBrowsing(KTextEditor::View* view);
    void stopDelayedBrowsing();
    void invokeAction(int index);

public Q_SLOTS:
    ///Enabled/disables the browsing mode
    void setBrowsing(bool);

private Q_SLOTS:
    void eventuallyStartDelayedBrowsing();

private:
    struct JumpLocation
    {
        QUrl url;
        KTextEditor::Cursor cursor;

        bool isValid() const { return url.isValid() && cursor.isValid(); }
    };

    void resetChangedCursor();
    JumpLocation determineJumpLoc(KTextEditor::Cursor textCursor, const QUrl& viewUrl) const;
    void setHandCursor(QWidget* widget);
    void avoidMenuAltFocus();
    bool eventFilter(QObject* watched, QEvent* event) override;
    ContextBrowserPlugin* m_plugin;
    bool m_browsing;
    int m_browsingByKey;     //Whether the browsing was started because of a key
    Watcher m_watcher;
    //Maps widgets to their previously set cursors
    QMap<QPointer<QWidget>, QCursor> m_oldCursors;
    QTimer* m_delayedBrowsingTimer;
    QPointer<KTextEditor::View> m_browsingStartedInView;
    KTextEditor::Cursor m_buttonPressPosition;
};

#endif