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 "textautogeneratemessagewaitingansweranimation.h"
10#include <QItemDelegate>
11#include <QTextDocument>
12#include <memory>
13class QListView;
14namespace TextAutogenerateText
15{
16class TextAutogenerateListViewTextSelection;
17class TextAutogenerateListViewDelegate : public QItemDelegate
18{
20public:
21 explicit TextAutogenerateListViewDelegate(QListView *view);
22 ~TextAutogenerateListViewDelegate() override;
23
24 void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
25 [[nodiscard]] QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override;
26
27 void clearSizeHintCache();
28
29 void removeMessageCache(const QByteArray &uuid);
30
31 void clearCache();
32
33 void selectAll(const QStyleOptionViewItem &option, const QModelIndex &index);
34
35 [[nodiscard]] bool mouseEvent(QEvent *event, const QStyleOptionViewItem &option, const QModelIndex &index);
36 [[nodiscard]] bool helpEvent(QHelpEvent *event, QAbstractItemView *view, const QStyleOptionViewItem &option, const QModelIndex &index) override;
37 [[nodiscard]] bool maybeStartDrag(QMouseEvent *event, const QStyleOptionViewItem &option, const QModelIndex &index);
38
39 [[nodiscard]] QString selectedText() const;
40 [[nodiscard]] bool hasSelection() const;
41 [[nodiscard]] QTextDocument *documentForIndex(const QModelIndex &index, int width) const;
42
43 void needUpdateIndexBackground(const QPersistentModelIndex &index, const QColor &color);
44 void removeNeedUpdateIndexBackground(const QPersistentModelIndex &index);
45 void needUpdateWaitingAnswerAnimation(const QPersistentModelIndex &index,
46 const QList<TextAutogenerateMessageWaitingAnswerAnimation::ScaleAndOpacity> &scaleAndOpacities);
47 void removeNeedUpdateWaitingAnswerAnimation(const QPersistentModelIndex &index);
49 void updateView(const QModelIndex &index);
50 void editMessage(const QModelIndex &index);
51 void removeMessage(const QModelIndex &index);
52 void copyMessage(const QModelIndex &index);
53 void cancelRequest(const QModelIndex &index);
54
55private:
56 struct MessageLayout {
57 // Text message
58 QRect textRect;
59 qreal baseLine; // used to draw sender/timestamp
60
61 // Decoration
62 QRect decoRect;
63
64 // Date Size
65 QSize dateSize;
66
67 // Remove icon
68 QRect removeIconRect;
69
70 // Edited icon
71 QRect editedIconRect;
72
73 // Favorite icon
74 QRect copyIconRect;
75
76 // Cancel icon
77 QRect cancelIconRect;
78
79 // Date Area
80 QRect dateAreaRect;
81
82 // In progress Area
83 QRect inProgressRect;
84 };
85
86 [[nodiscard]] QSize sizeHint(const QModelIndex &index, int maxWidth, const QStyleOptionViewItem &option, qreal *pBaseLine) const;
87 [[nodiscard]] QSize textSizeHint(QTextDocument *doc, qreal *pBaseLine) const;
88 [[nodiscard]] TextAutogenerateListViewDelegate::MessageLayout doLayout(const QStyleOptionViewItem &option, const QModelIndex &index) const;
89 [[nodiscard]] std::unique_ptr<QTextDocument> createTextDocument(const QString &text, int width) const;
90 void draw(QPainter *painter, const MessageLayout &layout, const QModelIndex &index, const QStyleOptionViewItem &option) const;
91 [[nodiscard]] bool handleMouseEvent(QMouseEvent *mouseEvent, QRect messageRect, const QStyleOptionViewItem &option, const QModelIndex &index);
92 [[nodiscard]] bool maybeStartDrag(QMouseEvent *mouseEvent, QRect messageRect, const QStyleOptionViewItem &option, const QModelIndex &index);
93 void drawDateAndIcons(QPainter *painter, const QModelIndex &index, const QStyleOptionViewItem &option, const MessageLayout &layout) const;
94 [[nodiscard]] int buttonIconSize(const QStyleOptionViewItem &option) const;
95 void drawInProgressIndicator(QPainter *painter, const QModelIndex &index, const QStyleOptionViewItem &option, const MessageLayout &layout) const;
96 void slotUpdateColors();
97
98 const QIcon mEditedIcon;
99 const QIcon mRemoveIcon;
100 const QIcon mCopyIcon;
101 const QIcon mCancelIcon;
102
103 QColor mEditingColorMode;
104
105 // Cache SizeHint value
106 // We need to clear it when we resize widget.
107 mutable LRUCache<QByteArray, QSize> mSizeHintCache;
108 struct IndexBackgroundColor {
109 QPersistentModelIndex index;
110 QColor color;
111 };
112 QList<IndexBackgroundColor> mIndexBackgroundColorList;
113
114 struct IndexScaleAndOpacities {
115 QPersistentModelIndex index;
116 QList<TextAutogenerateMessageWaitingAnswerAnimation::ScaleAndOpacity> scaleAndOpacities;
117 };
118 QList<IndexScaleAndOpacities> mIndexScaleAndOpacitiesList;
119 mutable LRUCache<QByteArray, std::unique_ptr<QTextDocument>> mDocumentCache;
120 QAbstractItemView *const mListView;
121 TextAutogenerateListViewTextSelection *const mTextSelection;
122};
123}
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 May 2 2025 12:06:03 by doxygen 1.13.2 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.