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