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
|
/*
SPDX-FileCopyrightText: 2017-2018 Friedrich W. H. Kossebau <kossebau@kde.org>
SPDX-License-Identifier: GPL-2.0-or-later
*/
#ifndef KDEVPLATFORM_VCSANNOTATIONITEMDELEGATE_H
#define KDEVPLATFORM_VCSANNOTATIONITEMDELEGATE_H
// KDev
#include <vcsrevision.h>
// KF
#include <KTextEditor/AbstractAnnotationItemDelegate>
// Qt
#include <QHash>
#include <QBrush>
namespace KDevelop
{
class VcsAnnotationLine;
class VcsAnnotationItemDelegate : public KTextEditor::AbstractAnnotationItemDelegate
{
Q_OBJECT
public:
VcsAnnotationItemDelegate(KTextEditor::View* view, KTextEditor::AnnotationModel* model, QObject* parent);
~VcsAnnotationItemDelegate() override;
public: // AbstractAnnotationItemDelegate APO
void paint(QPainter* painter, const KTextEditor::StyleOptionAnnotationItem& option,
KTextEditor::AnnotationModel* model, int line) const override;
QSize sizeHint(const KTextEditor::StyleOptionAnnotationItem& option,
KTextEditor::AnnotationModel* model, int line) const override;
bool helpEvent(QHelpEvent* event, KTextEditor::View* view,
const KTextEditor::StyleOptionAnnotationItem& option,
KTextEditor::AnnotationModel *model, int line) override;
void hideTooltip(KTextEditor::View *view) override;
private:
void renderBackground(QPainter* painter,
const KTextEditor::StyleOptionAnnotationItem& option,
const VcsAnnotationLine& annotationLine) const;
void renderMessageAndAge(QPainter* painter,
const KTextEditor::StyleOptionAnnotationItem& option,
const QRect& messageRect, const QString& messageText,
const QRect& ageRect, const QString& ageText) const;
void renderAuthor(QPainter* painter,
const KTextEditor::StyleOptionAnnotationItem& option,
const QRect& authorRect, const QString& authorText) const;
void renderHighlight(QPainter* painter,
const KTextEditor::StyleOptionAnnotationItem& option) const;
void doMessageLineLayout(const KTextEditor::StyleOptionAnnotationItem& option,
QRect* messageRect, QRect* ageRect) const;
void doAuthorLineLayout(const KTextEditor::StyleOptionAnnotationItem& option,
QRect* authorRect) const;
protected: // QObject API
bool eventFilter(QObject* object, QEvent* event) override;
private Q_SLOTS:
void resetBackgrounds();
private:
int widthHintFromViewWidth(int viewWidth) const;
private:
KTextEditor::AnnotationModel* const m_model;
// TODO: make this configurable
const int m_maxWidthViewPercent = 25;
mutable QHash<VcsRevision, QBrush> m_backgrounds;
mutable int m_lastCharBasedWidthHint = 0;
mutable int m_lastViewBasedWidthHint = 0;
};
}
#endif
|