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
|