File indexing completed on 2024-04-28 15:09:14
0001 /* Optical Train Delegates 0002 0003 Collection of delegates assigned to each individual column 0004 in the table view. 0005 0006 SPDX-FileCopyrightText: 2022 Jasem Mutlaq <mutlaqja@ikarustech.com> 0007 0008 SPDX-License-Identifier: GPL-2.0-or-later 0009 */ 0010 0011 #pragma once 0012 0013 #include <QStyledItemDelegate> 0014 #include <QItemDelegate> 0015 0016 class QCheckBox; 0017 class QSpinBox; 0018 class QDoubleSpinBox; 0019 class QComboBox; 0020 0021 class NotEditableDelegate : public QStyledItemDelegate 0022 { 0023 Q_OBJECT 0024 public: 0025 explicit NotEditableDelegate(QObject *parent = nullptr) 0026 : QStyledItemDelegate(parent) 0027 {} 0028 0029 protected: 0030 bool editorEvent(QEvent *, QAbstractItemModel *, const QStyleOptionViewItem &, const QModelIndex &) override 0031 { 0032 return false; 0033 } 0034 QWidget* createEditor(QWidget *, const QStyleOptionViewItem &, const QModelIndex &) const override 0035 { 0036 return nullptr; 0037 } 0038 }; 0039 0040 // Not editable delegate to display numbers to 2 decimal places 0041 class NotEditableDelegate2dp : public QStyledItemDelegate 0042 { 0043 Q_OBJECT 0044 public: 0045 explicit NotEditableDelegate2dp(QObject *parent = nullptr) 0046 : QStyledItemDelegate(parent) 0047 {} 0048 0049 QString displayText(const QVariant &value, const QLocale &locale) const 0050 { 0051 QString str = QString::number(value.toDouble(), 'f', 2); 0052 return str; 0053 } 0054 0055 protected: 0056 bool editorEvent(QEvent *, QAbstractItemModel *, const QStyleOptionViewItem &, const QModelIndex &) override 0057 { 0058 return false; 0059 } 0060 QWidget* createEditor(QWidget *, const QStyleOptionViewItem &, const QModelIndex &) const override 0061 { 0062 return nullptr; 0063 } 0064 }; 0065 0066 class ToggleDelegate : public QItemDelegate 0067 { 0068 Q_OBJECT 0069 public: 0070 explicit ToggleDelegate(QObject *parent = nullptr) : QItemDelegate(parent) {} 0071 0072 QWidget * createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override; 0073 void setEditorData(QWidget *editor, const QModelIndex &index) const override; 0074 void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const override; 0075 void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override; 0076 void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override; 0077 bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &, const QModelIndex &index) override; 0078 }; 0079 0080 class DoubleDelegate : public QStyledItemDelegate 0081 { 0082 Q_OBJECT 0083 public: 0084 explicit DoubleDelegate(QObject *parent = nullptr, double min = -1, double max = -1, 0085 double step = -1) : QStyledItemDelegate(parent) 0086 { 0087 this->min = min; 0088 this->max = max; 0089 this->step = step; 0090 } 0091 0092 QWidget * createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override; 0093 void setEditorData(QWidget *editor, const QModelIndex &index) const override; 0094 void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override; 0095 void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const override; 0096 protected: 0097 double min {-1}, max {-1}, step {-1}; 0098 }; 0099 0100 class IntegerDelegate : public QStyledItemDelegate 0101 { 0102 Q_OBJECT 0103 public: 0104 explicit IntegerDelegate(QObject *parent = nullptr, int min = -1, int max = -1, int step = -1) : QStyledItemDelegate(parent) 0105 { 0106 this->min = min; 0107 this->max = max; 0108 this->step = step; 0109 } 0110 0111 QWidget * createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override; 0112 void setEditorData(QWidget *editor, const QModelIndex &index) const override; 0113 void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override; 0114 void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const override; 0115 void setMinMaxStep(int min, int max, int step); 0116 protected: 0117 int min {-1}, max {-1}, step {-1}; 0118 }; 0119 0120 class ComboDelegate : public QStyledItemDelegate 0121 { 0122 Q_OBJECT 0123 public: 0124 explicit ComboDelegate(QObject *parent = nullptr); 0125 0126 QWidget * createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override; 0127 void setEditorData(QWidget *editor, const QModelIndex &index) const override; 0128 void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override; 0129 void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const override; 0130 void setValues(const QStringList &values); 0131 const QStringList &values() const 0132 { 0133 return m_Values; 0134 } 0135 0136 private: 0137 mutable QStringList m_Values; 0138 }; 0139