hold on :) Glance, take a look on my answer to the trac and try to do that - saner code. :)
On Fri, Jul 11, 2014 at 6:51 PM, Anton Lundin <[email protected]> wrote: > This adds some delegates to fixup the editor SpinBox'es in the > DivePlannerPointsModel, to prevent user from entering negative values. > > Fixes #609 > > Signed-off-by: Anton Lundin <[email protected]> > --- > qt-ui/diveplanner.cpp | 6 +++++ > qt-ui/modeldelegates.cpp | 64 > ++++++++++++++++++++++++++++++++++++++++++++++++ > qt-ui/modeldelegates.h | 22 +++++++++++++++++ > 3 files changed, 92 insertions(+) > > diff --git a/qt-ui/diveplanner.cpp b/qt-ui/diveplanner.cpp > index 5e07dcb..db02865 100644 > --- a/qt-ui/diveplanner.cpp > +++ b/qt-ui/diveplanner.cpp > @@ -253,6 +253,12 @@ DivePlannerWidget::DivePlannerWidget(QWidget *parent, > Qt::WindowFlags f) : QWidg > ui.tableWidget->setModel(DivePlannerPointsModel::instance()); > DivePlannerPointsModel::instance()->setRecalc(true); > > ui.tableWidget->view()->setItemDelegateForColumn(DivePlannerPointsModel::GAS, > new AirTypesDelegate(this)); > + // This makes shure the spinbox gets a setMinimum(0) on it so we > can't have negative time or depth. > + > ui.tableWidget->view()->setItemDelegateForColumn(DivePlannerPointsModel::DEPTH, > new SpinBoxDelegate(this)); > + > ui.tableWidget->view()->setItemDelegateForColumn(DivePlannerPointsModel::RUNTIME, > new SpinBoxDelegate(this)); > + > ui.tableWidget->view()->setItemDelegateForColumn(DivePlannerPointsModel::DURATION, > new SpinBoxDelegate(this)); > + // This one is a Double, so its a bit special. > + > ui.tableWidget->view()->setItemDelegateForColumn(DivePlannerPointsModel::CCSETPOINT, > new DoubleSpinBoxDelegate(this)); > ui.cylinderTableWidget->setTitle(tr("Available gases")); > ui.cylinderTableWidget->setModel(CylindersModel::instance()); > QTableView *view = ui.cylinderTableWidget->view(); > diff --git a/qt-ui/modeldelegates.cpp b/qt-ui/modeldelegates.cpp > index dc6af56..c2335d5 100644 > --- a/qt-ui/modeldelegates.cpp > +++ b/qt-ui/modeldelegates.cpp > @@ -364,3 +364,67 @@ void ProfilePrintDelegate::paint(QPainter *painter, > const QStyleOptionViewItem & > } > QStyledItemDelegate::paint(painter, option, index); > } > + > +SpinBoxDelegate::SpinBoxDelegate(QObject *parent) : > QStyledItemDelegate(parent) {} > + > +QWidget *SpinBoxDelegate::createEditor(QWidget *parent, > + const QStyleOptionViewItem &/* option */, > + const QModelIndex &/* index */) const > +{ > + QSpinBox *editor = new QSpinBox(parent); > + editor->setMinimum(0); > + > + return editor; > +} > + > +void SpinBoxDelegate::setEditorData(QWidget *editor, const QModelIndex > &index) const > +{ > + QSpinBox *spinBox = static_cast<QSpinBox*>(editor); > + spinBox->setValue(index.model()->data(index, Qt::EditRole).toInt()); > +} > + > +void SpinBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel > *model, const QModelIndex &index) const > +{ > + QSpinBox *spinBox = static_cast<QSpinBox*>(editor); > + spinBox->interpretText(); > + > + model->setData(index, spinBox->value(), Qt::EditRole); > +} > + > +void SpinBoxDelegate::updateEditorGeometry(QWidget *editor, const > QStyleOptionViewItem &option, const QModelIndex &/* index */) const > +{ > + editor->setGeometry(option.rect); > +} > + > +DoubleSpinBoxDelegate::DoubleSpinBoxDelegate(QObject *parent) : > QStyledItemDelegate(parent) {} > + > +QWidget *DoubleSpinBoxDelegate::createEditor(QWidget *parent, > + const QStyleOptionViewItem &/* option */, > + const QModelIndex &/* index */) const > +{ > + QDoubleSpinBox *editor = new QDoubleSpinBox(parent); > + editor->setMinimum(0); > + editor->setSingleStep(0.1); > + > + return editor; > +} > + > +void DoubleSpinBoxDelegate::setEditorData(QWidget *editor, const QModelIndex > &index) const > +{ > + QDoubleSpinBox *spinBox = static_cast<QDoubleSpinBox*>(editor); > + > + spinBox->setValue(index.model()->data(index, > Qt::EditRole).toDouble()); > +} > + > +void DoubleSpinBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel > *model, const QModelIndex &index) const > +{ > + QDoubleSpinBox *spinBox = static_cast<QDoubleSpinBox*>(editor); > + spinBox->interpretText(); > + > + model->setData(index, spinBox->value(), Qt::EditRole); > +} > + > +void DoubleSpinBoxDelegate::updateEditorGeometry(QWidget *editor, const > QStyleOptionViewItem &option, const QModelIndex &/* index */) const > +{ > + editor->setGeometry(option.rect); > +} > diff --git a/qt-ui/modeldelegates.h b/qt-ui/modeldelegates.h > index e2b705e..b286347 100644 > --- a/qt-ui/modeldelegates.h > +++ b/qt-ui/modeldelegates.h > @@ -88,4 +88,26 @@ public: > void paint(QPainter *painter, const QStyleOptionViewItem &option, > const QModelIndex &index) const; > }; > > +class SpinBoxDelegate : public QStyledItemDelegate { > + Q_OBJECT > +public: > + explicit SpinBoxDelegate(QObject *parent = 0); > + > + QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem > &option, const QModelIndex &index) const; > + void setEditorData(QWidget *editor, const QModelIndex &index) const; > + void setModelData(QWidget *editor, QAbstractItemModel *model, const > QModelIndex &index) const; > + void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem > &option, const QModelIndex &index) const; > +}; > + > +class DoubleSpinBoxDelegate : public QStyledItemDelegate { > + Q_OBJECT > +public: > + explicit DoubleSpinBoxDelegate(QObject *parent = 0); > + > + QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem > &option, const QModelIndex &index) const; > + void setEditorData(QWidget *editor, const QModelIndex &index) const; > + void setModelData(QWidget *editor, QAbstractItemModel *model, const > QModelIndex &index) const; > + void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem > &option, const QModelIndex &index) const; > +}; > + > #endif // MODELDELEGATES_H > -- > 1.9.1 > > _______________________________________________ > subsurface mailing list > [email protected] > http://lists.hohndel.org/cgi-bin/mailman/listinfo/subsurface _______________________________________________ subsurface mailing list [email protected] http://lists.hohndel.org/cgi-bin/mailman/listinfo/subsurface
