summaryrefslogtreecommitdiffstats
path: root/qt-ui/modeldelegates.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'qt-ui/modeldelegates.cpp')
-rw-r--r--qt-ui/modeldelegates.cpp51
1 files changed, 46 insertions, 5 deletions
diff --git a/qt-ui/modeldelegates.cpp b/qt-ui/modeldelegates.cpp
index 58a7e141b..9ab706c59 100644
--- a/qt-ui/modeldelegates.cpp
+++ b/qt-ui/modeldelegates.cpp
@@ -15,6 +15,10 @@
#include <QKeyEvent>
#include <QAbstractItemView>
+// Gets the index of the model in the currentRow and column.
+// currCombo is defined below.
+#define IDX( XX ) mymodel->index(currCombo.currRow, XX)
+
StarWidgetsDelegate::StarWidgetsDelegate(QWidget* parent):
QStyledItemDelegate(parent),
parentWidget(parent)
@@ -133,6 +137,12 @@ void ComboBoxDelegate::updateEditorGeometry(QWidget* editor, const QStyleOptionV
editor->setGeometry(defaultRect);
}
+struct RevertCylinderData{
+ QString type;
+ int pressure;
+ int size;
+} currCylinderData;
+
void TankInfoDelegate::setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& thisindex) const
{
CylindersModel *mymodel = qobject_cast<CylindersModel *>(currCombo.model);
@@ -154,13 +164,39 @@ void TankInfoDelegate::setModelData(QWidget* editor, QAbstractItemModel* model,
if ( mymodel->data(thisindex, CylindersModel::TYPE).toString() == currCombo.activeText){
return;
}
- mymodel->setData(model->index(currCombo.currRow, CylindersModel::TYPE), currCombo.activeText, Qt::EditRole);
- mymodel->passInData(model->index(currCombo.currRow, CylindersModel::WORKINGPRESS), tankPressure);
- mymodel->passInData(model->index(currCombo.currRow, CylindersModel::SIZE), tankSize);
+
+ mymodel->setData(IDX(CylindersModel::TYPE), currCombo.activeText, Qt::EditRole);
+ mymodel->passInData(IDX(CylindersModel::WORKINGPRESS), tankPressure);
+ mymodel->passInData(IDX(CylindersModel::SIZE), tankSize);
}
TankInfoDelegate::TankInfoDelegate(QObject* parent): ComboBoxDelegate(TankInfoModel::instance(), parent)
{
+ connect(this, SIGNAL(closeEditor(QWidget*,QAbstractItemDelegate::EndEditHint)),
+ this, SLOT(revertModelData(QWidget*, QAbstractItemDelegate::EndEditHint)));
+}
+
+void TankInfoDelegate::revertModelData(QWidget* widget, QAbstractItemDelegate::EndEditHint hint)
+{
+ if (hint == QAbstractItemDelegate::NoHint || hint == QAbstractItemDelegate::RevertModelCache){
+ CylindersModel *mymodel = qobject_cast<CylindersModel *>(currCombo.model);
+ mymodel->setData(IDX(CylindersModel::TYPE), currCylinderData.type, Qt::EditRole);
+ mymodel->passInData(IDX(CylindersModel::WORKINGPRESS), currCylinderData.pressure);
+ mymodel->passInData(IDX(CylindersModel::SIZE), currCylinderData.size);
+ }
+}
+
+QWidget* TankInfoDelegate::createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const
+{
+ // ncreate editor needs to be called before because it will populate a few
+ // things in the currCombo global var.
+ QWidget *delegate = ComboBoxDelegate::createEditor(parent, option, index);
+ CylindersModel *mymodel = qobject_cast<CylindersModel *>(currCombo.model);
+ cylinder_t *cyl = mymodel->cylinderAt(index);
+ currCylinderData.type = cyl->type.description;
+ currCylinderData.pressure = cyl->type.workingpressure.mbar;
+ currCylinderData.size = cyl->type.size.mliter;
+ return delegate;
}
void WSInfoDelegate::setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& thisindex) const
@@ -184,11 +220,16 @@ void WSInfoDelegate::setModelData(QWidget* editor, QAbstractItemModel* model, co
if (mymodel->data(thisindex, WeightModel::TYPE).toString() == currCombo.activeText){
return;
}
- mymodel->setData(model->index(currCombo.currRow, WeightModel::TYPE), v, Qt::EditRole);
- mymodel->passInData(model->index(currCombo.currRow, WeightModel::WEIGHT), grams);
+ mymodel->setData(IDX(WeightModel::TYPE), v, Qt::EditRole);
+ mymodel->passInData(IDX(WeightModel::WEIGHT), grams);
qDebug() << "Fixme, every weigth is 0.0 grams. see:" << grams;
}
WSInfoDelegate::WSInfoDelegate(QObject* parent): ComboBoxDelegate(WSInfoModel::instance(), parent)
{
}
+
+QWidget* WSInfoDelegate::createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const
+{
+ return ComboBoxDelegate::createEditor(parent, option, index);
+}