diff options
author | Tomaz Canabrava <tcanabrava@kde.org> | 2013-07-18 10:24:02 -0300 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2013-07-18 12:01:05 -0700 |
commit | 7e029980b80b176282743fe3b43a3cc49bac9154 (patch) | |
tree | 3fb3b17d5c1490c6f018f72ff3573a83b1eae287 /qt-ui/modeldelegates.cpp | |
parent | 4f49a69d7db9f26dea52c8effafba1f63261aa98 (diff) | |
download | subsurface-7e029980b80b176282743fe3b43a3cc49bac9154.tar.gz |
'Cancel' action Cancels editing Cylinders.
Made the default 'Cancel' action correctly cancel
the cylinder edition. This is needed only because
we bypassed the default behavior on Qt that took
care of this, because we wanted to have more control
on how the view would update the items accordingly
with wich one of the cylinders were selected
on the edition pane - the pressure and size of the
cylinders needed to have it's data set, but the Qt
Model/View system *thinks* that cancel-edition is
simply 'do not commit the edition data, then.' wich
would not work with us, because we passed the strange
data already. So, I created a backup data that serves
us very well. When the user cancels, this backup data
is added back on the cylinder, making everything as
it was before.
[Dirk Hohndel: removed the inadvertendly added boost header]
Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'qt-ui/modeldelegates.cpp')
-rw-r--r-- | qt-ui/modeldelegates.cpp | 51 |
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); +} |