File indexing completed on 2024-05-19 05:41:19

0001 #ifndef CUSTOMRULEMODEL_H
0002 #define CUSTOMRULEMODEL_H
0003 
0004 #include "convertoroperator.h"
0005 #include "rwidgets_global.h"
0006 #include "unit.h"
0007 #include "unitmodel.h"
0008 #include <QAbstractTableModel>
0009 #include <vector>
0010 namespace GMTOOL
0011 {
0012 class RWIDGET_EXPORT CustomRuleModel : public CategoryModel
0013 {
0014     Q_OBJECT
0015 
0016 public:
0017     explicit CustomRuleModel(QObject* parent= nullptr);
0018 
0019     // Header:
0020     QVariant headerData(int section, Qt::Orientation orientation, int role= Qt::DisplayRole) const override;
0021 
0022     bool setHeaderData(int section, Qt::Orientation orientation, const QVariant& value,
0023                        int role= Qt::EditRole) override;
0024 
0025     // Basic functionality:
0026     // int rowCount(const QModelIndex &parent = QModelIndex()) const override;
0027     int columnCount(const QModelIndex& parent= QModelIndex()) const override;
0028 
0029     QVariant data(const QModelIndex& index, int role= Qt::DisplayRole) const override;
0030 
0031     // Editable:
0032     bool setData(const QModelIndex& index, const QVariant& value, int role= Qt::EditRole) override;
0033 
0034     Qt::ItemFlags flags(const QModelIndex& index) const override;
0035 
0036     /* QModelIndex mapToSource(const QModelIndex &proxyIndex) const;
0037      QModelIndex mapFromSource(const QModelIndex &sourceIndex) const;*/
0038     QModelIndex parent(const QModelIndex& child) const override;
0039     QModelIndex index(int row, int column, const QModelIndex& parent) const override;
0040 
0041     // Add data:
0042     bool insertUnit();
0043 
0044     // Remove data:
0045     bool removeUnit(const QModelIndex& index);
0046 
0047     qreal convert(QPair<const Unit*, const Unit*> pair, qreal value) const;
0048 
0049     QPair<const Unit*, const Unit*> makePair(const QModelIndex& index) const;
0050 
0051     CategoryModel* units() const;
0052     void setUnits(CategoryModel* units);
0053 
0054     void setCurrentCategoryId(const QString& cat, int categoryId);
0055 
0056     QHash<QPair<const Unit*, const Unit*>, ConvertorOperator*>* convertionRules() const;
0057     void setConvertionRules(QHash<QPair<const Unit*, const Unit*>, ConvertorOperator*>* convertionRules);
0058 
0059     QModelIndex buddy(const QModelIndex& index) const override;
0060 
0061 private:
0062     // CategoryModel* m_units = nullptr;
0063     QHash<QPair<const Unit*, const Unit*>, ConvertorOperator*>* m_convertionRules;
0064     int m_currentCatId= 0;
0065 };
0066 
0067 } // namespace GMTOOL
0068 #endif // CUSTOMRULEMODEL_H