File: browsemanager.h

package info (click to toggle)
kdevelop 4%3A5.6.2-4
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 57,892 kB
  • sloc: cpp: 278,773; javascript: 3,558; python: 3,385; sh: 1,317; ansic: 689; xml: 273; php: 95; makefile: 40; lisp: 13; sed: 12
file content (136 lines) | stat: -rw-r--r-- 3,625 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
126
127
128
129
130
131
132
133
134
135
136
/*
 * This file is part of KDevelop
 *
 * Copyright 2008 David Nolden <david.nolden.kdevelop@art-master.de>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Library General Public License as
 * published by the Free Software Foundation; either version 2 of the
 * License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public
 * License along with this program; if not, write to the
 * Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 */

#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