KTextAddons

textautogeneratelistviewdelegate.h
1/*
2 SPDX-FileCopyrightText: 2025 Laurent Montel <montel@kde.org>
3
4 SPDX-License-Identifier: GPL-2.0-or-later
5*/
6#pragma once
7
8#include "lrucache.h"
9#include <QItemDelegate>
10#include <QTextDocument>
11#include <memory>
12class QListView;
13namespace TextAutogenerateText
14{
15class TextAutogenerateListViewTextSelection;
16class TextAutogenerateListViewDelegate : public QItemDelegate
17{
19public:
20 explicit TextAutogenerateListViewDelegate(QListView *view);
21 ~TextAutogenerateListViewDelegate() override;
22
23 void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
24 [[nodiscard]] QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override;
25
26 void clearSizeHintCache();
27
28 void removeMessageCache(const QByteArray &uuid);
29
30 void clearCache();
31
32 void selectAll(const QStyleOptionViewItem &option, const QModelIndex &index);
33
34 [[nodiscard]] bool mouseEvent(QEvent *event, const QStyleOptionViewItem &option, const QModelIndex &index);
35 [[nodiscard]] bool helpEvent(QHelpEvent *event, QAbstractItemView *view, const QStyleOptionViewItem &option, const QModelIndex &index) override;
36 [[nodiscard]] bool maybeStartDrag(QMouseEvent *event, const QStyleOptionViewItem &option, const QModelIndex &index);
37
38 [[nodiscard]] QString selectedText() const;
39 [[nodiscard]] bool hasSelection() const;
40 [[nodiscard]] QTextDocument *documentForIndex(const QModelIndex &index, int width) const;
41
43 void updateView(const QModelIndex &index);
44
45private:
46 struct MessageLayout {
47 // Text message
48 QRect textRect;
49 qreal baseLine; // used to draw sender/timestamp
50 };
51
52 [[nodiscard]] QSize sizeHint(const QModelIndex &index, int maxWidth, const QStyleOptionViewItem &option, qreal *pBaseLine) const;
53 [[nodiscard]] QSize textSizeHint(QTextDocument *doc, qreal *pBaseLine) const;
54 [[nodiscard]] TextAutogenerateListViewDelegate::MessageLayout doLayout(const QStyleOptionViewItem &option, const QModelIndex &index) const;
55 [[nodiscard]] std::unique_ptr<QTextDocument> createTextDocument(const QString &text, int width) const;
56 void draw(QPainter *painter, QRect rect, const QModelIndex &index, const QStyleOptionViewItem &option) const;
57 [[nodiscard]] bool handleMouseEvent(QMouseEvent *mouseEvent, QRect messageRect, const QStyleOptionViewItem &option, const QModelIndex &index);
58 [[nodiscard]] bool maybeStartDrag(QMouseEvent *mouseEvent, QRect messageRect, const QStyleOptionViewItem &option, const QModelIndex &index);
59 // Cache SizeHint value
60 // We need to clear it when we resize widget.
61 mutable LRUCache<QByteArray, QSize> mSizeHintCache;
62
63 mutable LRUCache<QByteArray, std::unique_ptr<QTextDocument>> mDocumentCache;
64 QAbstractItemView *const mListView;
65 TextAutogenerateListViewTextSelection *const mTextSelection;
66};
67}
Q_OBJECTQ_OBJECT
Q_SIGNALSQ_SIGNALS
virtual bool event(QEvent *e)
This file is part of the KDE documentation.
Documentation copyright © 1996-2025 The KDE developers.
Generated on Fri Apr 18 2025 12:00:52 by doxygen 1.13.2 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.