File: useswidget.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 (182 lines) | stat: -rw-r--r-- 5,056 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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
/*
    SPDX-FileCopyrightText: 2008 David Nolden <david.nolden.kdevelop@art-master.de>

    SPDX-License-Identifier: LGPL-2.0-only
*/

#ifndef KDEVPLATFORM_USESWIDGET_H
#define KDEVPLATFORM_USESWIDGET_H

#include <QWidget>
#include <QScrollArea>
#include <QSharedPointer>

#include <language/duchain/indexeddeclaration.h>
#include <language/duchain/indexedtopducontext.h>
#include <language/languageexport.h>
#include "usescollector.h"
#include <language/editor/persistentmovingrange.h>

class QLabel;
class QVBoxLayout;
class QHBoxLayout;
class QBoxLayout;
class QProgressBar;

namespace KDevelop {
class CodeRepresentation;

class IndexedDeclaration;
///A widget representing one use of a Declaration in a specific context
class KDEVPLATFORMLANGUAGE_EXPORT OneUseWidget
    : public QWidget
{
    Q_OBJECT

public:
    OneUseWidget(IndexedDeclaration declaration, const IndexedString& document, KTextEditor::Range range,
                 const CodeRepresentation& code);
    ~OneUseWidget() override;

    void setHighlighted(bool highlight);
    bool isHighlighted() const;
    void activateLink();

private:
    void mousePressEvent(QMouseEvent* event) override;
    void resizeEvent (QResizeEvent* event) override;

    PersistentMovingRange::Ptr m_range;
    IndexedDeclaration m_declaration;
    IndexedString m_document;
    QString m_sourceLine;

    QLabel* m_label;
    QLabel* m_icon;
    QHBoxLayout* m_layout;
    bool m_isHighlighted = false;
};

class KDEVPLATFORMLANGUAGE_EXPORT NavigatableWidgetList
    : public QScrollArea
{
    Q_OBJECT

public:
    explicit NavigatableWidgetList(bool allowScrolling = false, uint maxHeight = 0, bool vertical = true);
    ~NavigatableWidgetList() override;
    void addItem(QWidget* widget, int pos = -1);
    void addHeaderItem(QWidget* widget, Qt::Alignment alignment = {});
    ///Whether items were added to this list using addItem(..)
    bool hasItems() const;
    ///Deletes all items that were added using addItem
    void deleteItems();
    QList<QWidget*> items() const;
    void setShowHeader(bool show);

protected:
    QBoxLayout* m_itemLayout;
    QVBoxLayout* m_layout;

private:
    QHBoxLayout* m_headerLayout;
    bool m_allowScrolling, m_useArrows;
};

class KDEVPLATFORMLANGUAGE_EXPORT ContextUsesWidget
    : public NavigatableWidgetList
{
    Q_OBJECT

public:
    ContextUsesWidget(const CodeRepresentation& code, const QList<IndexedDeclaration>& usedDeclaration,
                      IndexedDUContext context);
Q_SIGNALS:
    void navigateDeclaration(KDevelop::IndexedDeclaration);

private Q_SLOTS:
    void linkWasActivated(const QString&);

private:
    IndexedDUContext m_context;
};

class KDEVPLATFORMLANGUAGE_EXPORT DeclarationWidget
    : public NavigatableWidgetList
{
    Q_OBJECT

public:
    DeclarationWidget(const KDevelop::CodeRepresentation& code, const KDevelop::IndexedDeclaration& declaration);
};

/**
 * Represents the uses of a declaration within one top-context
 */
class KDEVPLATFORMLANGUAGE_EXPORT TopContextUsesWidget
    : public NavigatableWidgetList
{
    Q_OBJECT

public:
    TopContextUsesWidget(IndexedDeclaration declaration, const QList<IndexedDeclaration>& localDeclarations,
                         IndexedTopDUContext topContext);
    void setExpanded(bool);
    int usesCount() const;

private Q_SLOTS:
    void labelClicked();

private:
    IndexedTopDUContext m_topContext;
    IndexedDeclaration m_declaration;
    QLabel* m_icon;
    QLabel* m_toggleButton;
    QList<IndexedDeclaration> m_allDeclarations;
    int m_usesCount;
};

/**
 * A widget that allows browsing through all the uses of a declaration, and also through all declarations of it.
 */
class KDEVPLATFORMLANGUAGE_EXPORT UsesWidget
    : public NavigatableWidgetList
{
    Q_OBJECT

public:
    ///This class can be overridden to do additional processing while the uses-widget shows the uses.
    struct KDEVPLATFORMLANGUAGE_EXPORT UsesWidgetCollector
        : public UsesCollector
    {
public:
        void setWidget(UsesWidget* widget);
        explicit UsesWidgetCollector(IndexedDeclaration decl);
        void processUses(KDevelop::ReferencedTopDUContext topContext) override;
        void maximumProgress(uint max) override;
        void progress(uint processed, uint total) override;
        UsesWidget* m_widget;
    };
    QSize sizeHint () const override;
    ///@param customCollector allows specifying an own subclass of UsesWidgetCollector.
    explicit UsesWidget(const IndexedDeclaration& declaration,
                        const QSharedPointer<UsesWidgetCollector>& customCollector = {});
    ~UsesWidget() override;
    void setAllExpanded(bool expanded);
    unsigned int countAllUses() const;
Q_SIGNALS:
    void navigateDeclaration(KDevelop::IndexedDeclaration);

private:
    const QString headerLineText() const;
    QLabel* m_headerLine;
    QSharedPointer<UsesWidgetCollector> m_collector;
    QProgressBar* m_progressBar;

public Q_SLOTS:
    void headerLinkActivated(const QString& linkName);
    void redrawHeaderLine();
};
}

#endif