From b8c94cad69e59e0b0584c23b39ca9a519c84db94 Mon Sep 17 00:00:00 2001 From: "Robert C. Helling" Date: Tue, 8 May 2018 17:26:48 +0200 Subject: Planner: Add combo box for dive mode selection I am not really sure what I am doing here but I copied code from the gas selection. Signed-off-by: Robert C. Helling --- desktop-widgets/diveplanner.cpp | 1 + desktop-widgets/modeldelegates.cpp | 18 ++++++++++++++++++ desktop-widgets/modeldelegates.h | 10 ++++++++++ qt-models/diveplannermodel.cpp | 1 + qt-models/models.cpp | 30 ++++++++++++++++++++++++++++++ qt-models/models.h | 11 +++++++++++ 6 files changed, 71 insertions(+) diff --git a/desktop-widgets/diveplanner.cpp b/desktop-widgets/diveplanner.cpp index fd7dc948e..b22d268d8 100644 --- a/desktop-widgets/diveplanner.cpp +++ b/desktop-widgets/diveplanner.cpp @@ -114,6 +114,7 @@ DivePlannerWidget::DivePlannerWidget(QWidget *parent, Qt::WindowFlags f) : QWidg ui.tableWidget->setModel(plannerModel); plannerModel->setRecalc(true); ui.tableWidget->view()->setItemDelegateForColumn(DivePlannerPointsModel::GAS, new AirTypesDelegate(this)); + ui.tableWidget->view()->setItemDelegateForColumn(DivePlannerPointsModel::DIVEMODE, new DiveTypesDelegate(this)); ui.cylinderTableWidget->setTitle(tr("Available gases")); ui.cylinderTableWidget->setBtnToolTip(tr("Add cylinder")); ui.cylinderTableWidget->setModel(CylindersModel::instance()); diff --git a/desktop-widgets/modeldelegates.cpp b/desktop-widgets/modeldelegates.cpp index 24dc767c4..6a33e60f4 100644 --- a/desktop-widgets/modeldelegates.cpp +++ b/desktop-widgets/modeldelegates.cpp @@ -407,6 +407,24 @@ AirTypesDelegate::AirTypesDelegate(QObject *parent) : ComboBoxDelegate(GasSelect { } +void DiveTypesDelegate::revertModelData(QWidget *widget, QAbstractItemDelegate::EndEditHint hint) +{ + Q_UNUSED(widget) + Q_UNUSED(hint) +} + +void DiveTypesDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const +{ + if (!index.isValid()) + return; + QComboBox *combo = qobject_cast(editor); + model->setData(index, QVariant(combo->currentIndex())); +} + +DiveTypesDelegate::DiveTypesDelegate(QObject *parent) : ComboBoxDelegate(DiveTypeSelectionModel::instance(), parent, false) +{ +} + SpinBoxDelegate::SpinBoxDelegate(int min, int max, int step, QObject *parent): QStyledItemDelegate(parent), min(min), diff --git a/desktop-widgets/modeldelegates.h b/desktop-widgets/modeldelegates.h index 4c46d9b7c..a479b36f0 100644 --- a/desktop-widgets/modeldelegates.h +++ b/desktop-widgets/modeldelegates.h @@ -92,6 +92,16 @@ slots: void revertModelData(QWidget *widget, QAbstractItemDelegate::EndEditHint hint); }; +class DiveTypesDelegate : public ComboBoxDelegate { + Q_OBJECT +public: + explicit DiveTypesDelegate(QObject *parent = 0); + virtual void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const; +public +slots: + void revertModelData(QWidget *widget, QAbstractItemDelegate::EndEditHint hint); +}; + class SpinBoxDelegate : public QStyledItemDelegate { Q_OBJECT public: diff --git a/qt-models/diveplannermodel.cpp b/qt-models/diveplannermodel.cpp index c86526c1a..7a21ef6ce 100644 --- a/qt-models/diveplannermodel.cpp +++ b/qt-models/diveplannermodel.cpp @@ -55,6 +55,7 @@ void DivePlannerPointsModel::createSimpleDive() } updateMaxDepth(); GasSelectionModel::instance()->repopulate(); + DiveTypeSelectionModel::instance()->repopulate(); } void DivePlannerPointsModel::setupStartTime() diff --git a/qt-models/models.cpp b/qt-models/models.cpp index a799b605d..f15073111 100644 --- a/qt-models/models.cpp +++ b/qt-models/models.cpp @@ -67,6 +67,36 @@ QVariant GasSelectionModel::data(const QModelIndex &index, int role) const } return QStringListModel::data(index, role); } +// Dive Type Model for the divetype combo box + +Qt::ItemFlags DiveTypeSelectionModel::flags(const QModelIndex &index) const +{ + Q_UNUSED(index); + return Qt::ItemIsEnabled | Qt::ItemIsSelectable; +} + +DiveTypeSelectionModel *DiveTypeSelectionModel::instance() +{ + static DiveTypeSelectionModel self; + return &self; +} + +void DiveTypeSelectionModel::repopulate() +{ + QStringList modes = QStringList(); + for (int i = 0; i < FREEDIVE; i++) + modes.append(QString(divemode_text[i])); + setStringList(modes); +} + +QVariant DiveTypeSelectionModel::data(const QModelIndex &index, int role) const +{ + if (role == Qt::FontRole) { + return defaultModelFont(); + } + return QStringListModel::data(index, role); +} + // Language Model, The Model to populate the list of possible Languages. diff --git a/qt-models/models.h b/qt-models/models.h index ab8130a57..445e3a2a6 100644 --- a/qt-models/models.h +++ b/qt-models/models.h @@ -33,6 +33,17 @@ slots: void repopulate(); }; +class DiveTypeSelectionModel : public QStringListModel { + Q_OBJECT +public: + static DiveTypeSelectionModel *instance(); + Qt::ItemFlags flags(const QModelIndex &index) const; + virtual QVariant data(const QModelIndex &index, int role) const; +public +slots: + void repopulate(); +}; + class LanguageModel : public QAbstractListModel { Q_OBJECT -- cgit v1.2.3-70-g09d2