Krita Source Code Documentation
Loading...
Searching...
No Matches
CommentDelegate.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2020 Saurabh Kumar <saurabhk660@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7#include "CommentDelegate.h"
8
9#include <QLineEdit>
10#include <QDebug>
11#include <QStyle>
12#include <QPainter>
13#include <QApplication>
14#include <QSize>
15#include <QMouseEvent>
16
17#include <kis_icon.h>
18
20 : QStyledItemDelegate(parent)
21{
22}
23
27
28void CommentDelegate::paint(QPainter *p, const QStyleOptionViewItem &option, const QModelIndex &index) const
29{
30 p->save();
31 {
32 QStyle *style = option.widget ? option.widget->style() : QApplication::style();
33 style->drawPrimitive(QStyle::PE_PanelItemViewItem, &option, p, option.widget);
34
35 p->setFont(option.font);
36
37 {
38 QIcon icon =index.model()->data(index, Qt::DecorationRole).value<QIcon>();
39 QRect r = option.rect;
40 r.setSize(QSize(22, 22));
41 icon.paint(p, r);
42 }
43 {
44 QRect r = option.rect;
45 r.translate(25, 0);
46 QString value = index.model()->data(index, Qt::DisplayRole).toString();
47
48 p->drawText(r, Qt::AlignLeft | Qt::AlignVCenter, value);
49 }
50 }
51 p->restore();
52}
53
54QSize CommentDelegate::sizeHint(const QStyleOptionViewItem &option,
55 const QModelIndex &index) const
56{
57 Q_UNUSED(index);
58 return QSize(option.rect.width(), 22);
59}
60
61QWidget *CommentDelegate::createEditor(QWidget *parent,
62 const QStyleOptionViewItem &/*option*/ ,
63 const QModelIndex &/*index*/) const
64{
65 QLineEdit *editor = new QLineEdit(parent);
66 return editor;
67}
68
69bool CommentDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index)
70{
71 QStyleOptionViewItem newOption = option;
72
73 if ((event->type() == QEvent::MouseButtonPress || event->type() == QEvent::MouseButtonDblClick)
74 && (index.flags() & Qt::ItemIsEnabled)) {
75 QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
76
77 QRect visibilityRect = option.rect;
78 visibilityRect.setSize(QSize(22, 22));
79 const bool visibilityClicked = visibilityRect.isValid() &&
80 visibilityRect.contains(mouseEvent->pos());
81
82 const bool leftButton = mouseEvent->buttons() & Qt::LeftButton;
83
84 if (leftButton && visibilityClicked) {
85 model->setData(index, true, Qt::DecorationRole);
86 return true;
87 }
88 }
89 return false;
90}
91
92//set the existing data in the editor
93void CommentDelegate::setEditorData(QWidget *editor,
94 const QModelIndex &index) const
95{
96 QString value = index.model()->data(index, Qt::EditRole).toString();
97
98 QLineEdit *lineEdit = static_cast<QLineEdit*>(editor);
99 lineEdit->setText(value);
100}
101
102void CommentDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
103 const QModelIndex &index) const
104{
105 QLineEdit *lineEdit = static_cast<QLineEdit*>(editor);
106 QString value = lineEdit->text();
107
108 //TO DO: don't add empty string
109 model->setData(index, value, Qt::EditRole);
110}
111
113 const QStyleOptionViewItem &option, const QModelIndex &/*index*/) const
114{
115 editor->setGeometry(option.rect);
116}
float value(const T *src, size_t ch)
const Params2D p
CommentDelegate(QObject *parent)
void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const override
bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index) override
QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override
~CommentDelegate() override
void setEditorData(QWidget *editor, const QModelIndex &index) const override
QWidget * createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override
void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override