Kstars

tabledelegate.cpp
1/* Common Table View Delegates
2
3 Collection of delegates assigned to each individual column
4 in the table view.
5
6 SPDX-FileCopyrightText: 2022 Jasem Mutlaq <mutlaqja@ikarustech.com>
7
8 SPDX-License-Identifier: GPL-2.0-or-later
9*/
10
11#include "tabledelegate.h"
12#include <QCheckBox>
13#include <QSpinBox>
14#include <QDoubleSpinBox>
15#include <QComboBox>
16#include <QDateTimeEdit>
17#include <QApplication>
18
19QWidget * ToggleDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &, const QModelIndex &) const
20{
21 QCheckBox *editor = new QCheckBox(parent);
22 return editor;
23}
24
25
26void ToggleDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
27{
28 int value = index.model()->data(index, Qt::EditRole).toInt();
29 dynamic_cast<QCheckBox*>(editor)->setChecked(value == 1);
30}
31
32void ToggleDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &) const
33{
34 QStyleOptionButton checkboxstyle;
35 QRect checkbox_rect = QApplication::style()->subElementRect(QStyle::SE_CheckBoxIndicator, &checkboxstyle);
36
37 //center
38 checkboxstyle.rect = option.rect;
39 checkboxstyle.rect.setLeft(option.rect.x() + option.rect.width() / 2 - checkbox_rect.width() / 2);
40
41 editor->setGeometry(checkboxstyle.rect);
42}
43
44void ToggleDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
45{
46 int value = dynamic_cast<QCheckBox*>(editor)->isChecked() ? 1 : 0;
47 model->setData(index, value, Qt::EditRole);
48}
49
50void ToggleDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
51{
52 QStyleOptionButton checkboxstyle;
53 QRect checkbox_rect = QApplication::style()->subElementRect(QStyle::SE_CheckBoxIndicator, &checkboxstyle);
54
55 QRect rect(option.rect.x() + option.rect.width() / 2 - checkbox_rect.width() / 2,
56 option.rect.y() + option.rect.height() / 2 - checkbox_rect.height() / 2,
57 checkbox_rect.width(), checkbox_rect.height());
58
59 drawCheck(painter, option, rect, index.data().toBool() ? Qt::Checked : Qt::Unchecked);
60}
61
62bool ToggleDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &,
63 const QModelIndex &index)
64{
65 if (event->type() == QEvent::MouseButtonRelease)
66 {
67 bool checked = index.model()->data(index, Qt::DisplayRole).toBool();
68 // Toggle value
69 int value = checked ? 0 : 1;
70 return model->setData(index, value, Qt::EditRole);
71 }
72
73 return false;
74}
75
76/////////////////////////////////////////////////////////
77// Double Delegate
78/////////////////////////////////////////////////////////
79
80QWidget * DoubleDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &, const QModelIndex &) const
81{
82 QDoubleSpinBox *editor = new QDoubleSpinBox(parent);
83 editor->setFrame(false);
84 editor->setDecimals(3);
85
86 if (step > 0)
87 {
88 editor->setMinimum(min);
89 editor->setMaximum(max);
90 editor->setSingleStep(step);
91 }
92 else
93 {
94 editor->setMinimum(0.001);
95 editor->setMaximum(120);
96 editor->setSingleStep(1);
97 }
98 return editor;
99}
100
101void DoubleDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
102{
103 double value = index.model()->data(index, Qt::EditRole).toDouble();
104 dynamic_cast<QDoubleSpinBox*>(editor)->setValue(value);
105}
106
107void DoubleDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
108{
109 double value = dynamic_cast<QDoubleSpinBox*>(editor)->value();
110 model->setData(index, value, Qt::EditRole);
111}
112
113void DoubleDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &) const
114{
115 editor->setGeometry(option.rect);
116}
117
118/////////////////////////////////////////////////////////
119// Integer Delegate
120/////////////////////////////////////////////////////////
121
122QWidget * IntegerDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &, const QModelIndex &) const
123{
124 QSpinBox *editor = new QSpinBox(parent);
125 editor->setFrame(false);
126 if (step > 0)
127 {
128 editor->setMinimum(min);
129 editor->setMaximum(max);
130 editor->setSingleStep(step);
131 }
132 else
133 {
134 editor->setMinimum(-10000);
135 editor->setMaximum(10000);
136 editor->setSingleStep(100);
137 }
138 return editor;
139}
140
141
142void IntegerDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
143{
144 int value = index.model()->data(index, Qt::EditRole).toInt();
145 dynamic_cast<QSpinBox*>(editor)->setValue(value);
146}
147
148void IntegerDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
149{
150 int value = dynamic_cast<QSpinBox*>(editor)->value();
151 model->setData(index, value, Qt::EditRole);
152}
153
154void IntegerDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &) const
155{
156 editor->setGeometry(option.rect);
157}
158
159/////////////////////////////////////////////////////////
160// Combo Delegate
161/////////////////////////////////////////////////////////
162
163ComboDelegate::ComboDelegate(QObject *parent) : QStyledItemDelegate(parent)
164{
165 m_Values.insert(0, "--");
166}
167
168QWidget * ComboDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &, const QModelIndex &) const
169{
170 QComboBox *editor = new QComboBox(parent);
171 editor->addItems(m_Values);
172 return editor;
173}
174
175
176void ComboDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
177{
178 QString currentCombo = index.model()->data(index, Qt::EditRole).toString();
179 dynamic_cast<QComboBox*>(editor)->setCurrentText(currentCombo);
180}
181
182void ComboDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
183{
184 QString value = dynamic_cast<QComboBox*>(editor)->currentText();
185 model->setData(index, value, Qt::EditRole);
186}
187
188void ComboDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &) const
189{
190 editor->setGeometry(option.rect);
191}
192
193void ComboDelegate::setValues(const QStringList &list)
194{
195 m_Values = list;
196 m_Values.insert(0, "--");
197}
198
199/////////////////////////////////////////////////////////
200// Datetime Delegate
201/////////////////////////////////////////////////////////
202
203QWidget * DatetimeDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &, const QModelIndex &) const
204{
205 QDateTimeEdit *editor = new QDateTimeEdit(parent);
206 editor->setDisplayFormat(format);
209 editor->setCalendarPopup(calPopup);
210 editor->setFrame(false);
211 return editor;
212}
213
214void DatetimeDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
215{
216 QDateTime value = index.model()->data(index, Qt::EditRole).toDateTime();
217 dynamic_cast<QDateTimeEdit*>(editor)->setDateTime(value);
218}
219
220void DatetimeDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
221{
222 QDateTime value = dynamic_cast<QDateTimeEdit*>(editor)->dateTime();
223 model->setData(index, value.toString(format), Qt::EditRole);
224}
225
226void DatetimeDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &) const
227{
228 editor->setGeometry(option.rect);
229}
KIOCORE_EXPORT QStringList list(const QString &fileClass)
virtual QVariant data(const QModelIndex &index, int role) const const=0
virtual bool setData(const QModelIndex &index, const QVariant &value, int role)
void setFrame(bool)
QStyle * style()
void addItems(const QStringList &texts)
QDateTime fromString(QStringView string, QStringView format, QCalendar cal)
QString toString(QStringView format, QCalendar cal) const const
void setCalendarPopup(bool enable)
void setDisplayFormat(const QString &format)
void setMaximumDateTime(const QDateTime &dt)
void setMinimumDateTime(const QDateTime &dt)
void setDecimals(int prec)
void setMaximum(double max)
void setMinimum(double min)
void setSingleStep(double val)
MouseButtonRelease
virtual void drawCheck(QPainter *painter, const QStyleOptionViewItem &option, const QRect &rect, Qt::CheckState state) const const
iterator insert(const_iterator before, parameter_type value)
QVariant data(int role) const const
const QAbstractItemModel * model() const const
virtual bool event(QEvent *e)
QObject * parent() const const
int height() const const
int width() const const
void setMaximum(int max)
void setMinimum(int min)
void setSingleStep(int val)
SE_CheckBoxIndicator
virtual QRect subElementRect(SubElement element, const QStyleOption *option, const QWidget *widget) const const=0
EditRole
bool toBool() const const
QDateTime toDateTime() const const
double toDouble(bool *ok) const const
int toInt(bool *ok) const const
QString toString() const const
void setGeometry(const QRect &)
This file is part of the KDE documentation.
Documentation copyright © 1996-2025 The KDE developers.
Generated on Fri Feb 28 2025 11:55:59 by doxygen 1.13.2 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.