diff --git a/desktop-widgets/diveplanner.cpp b/desktop-widgets/diveplanner.cpp index 18fcfeeb2..2fda1f3ac 100644 --- a/desktop-widgets/diveplanner.cpp +++ b/desktop-widgets/diveplanner.cpp @@ -571,7 +571,7 @@ void PlannerWidgets::replanDive() return; copy_dive(current_dive, &displayed_dive); // Planning works on a copy of the dive (for now). DivePlannerPointsModel::instance()->setPlanMode(DivePlannerPointsModel::PLAN); - DivePlannerPointsModel::instance()->loadFromDive(&displayed_dive); + DivePlannerPointsModel::instance()->loadFromDive(&displayed_dive, dc_number); plannerWidget.setReplanButton(true); plannerWidget.setupStartTime(timestampToDateTime(displayed_dive.when)); @@ -580,7 +580,7 @@ void PlannerWidgets::replanDive() if (displayed_dive.salinity) plannerWidget.setSalinity(displayed_dive.salinity); reset_cylinders(&displayed_dive, true); - DivePlannerPointsModel::instance()->cylindersModel()->updateDive(&displayed_dive); + DivePlannerPointsModel::instance()->cylindersModel()->updateDive(&displayed_dive, dc_number); } void PlannerWidgets::printDecoPlan() diff --git a/desktop-widgets/profilewidget.cpp b/desktop-widgets/profilewidget.cpp index cb645310e..9b1d66142 100644 --- a/desktop-widgets/profilewidget.cpp +++ b/desktop-widgets/profilewidget.cpp @@ -226,7 +226,7 @@ void ProfileWidget::divesChanged(const QVector &dives, DiveField field) if (editedDive) { copy_dive(current_dive, editedDive.get()); // TODO: Holy moly that function sends too many signals. Fix it! - DivePlannerPointsModel::instance()->loadFromDive(editedDive.get()); + DivePlannerPointsModel::instance()->loadFromDive(editedDive.get(), editedDc); } plotCurrentDive(); @@ -258,7 +258,7 @@ void ProfileWidget::editDive() copy_dive(current_dive, editedDive.get()); // Work on a copy of the dive originalDive = current_dive; DivePlannerPointsModel::instance()->setPlanMode(DivePlannerPointsModel::ADD); - DivePlannerPointsModel::instance()->loadFromDive(editedDive.get()); + DivePlannerPointsModel::instance()->loadFromDive(editedDive.get(), editedDc); view->setEditState(editedDive.get(), editedDc); } diff --git a/desktop-widgets/tab-widgets/TabDiveEquipment.cpp b/desktop-widgets/tab-widgets/TabDiveEquipment.cpp index 2e5f7d937..efceeebf5 100644 --- a/desktop-widgets/tab-widgets/TabDiveEquipment.cpp +++ b/desktop-widgets/tab-widgets/TabDiveEquipment.cpp @@ -139,7 +139,7 @@ void TabDiveEquipment::toggleTriggeredColumn() void TabDiveEquipment::updateData() { - cylindersModel->updateDive(current_dive); + cylindersModel->updateDive(current_dive, dc_number); weightModel->updateDive(current_dive); if (current_dive && current_dive->suit) diff --git a/qt-models/cylindermodel.cpp b/qt-models/cylindermodel.cpp index 4810e2dc1..c04515c9b 100644 --- a/qt-models/cylindermodel.cpp +++ b/qt-models/cylindermodel.cpp @@ -241,7 +241,8 @@ QVariant CylindersModel::data(const QModelIndex &index, int role) const case SIZE_INT: return static_cast(cyl->type.size.mliter); case SENSORS: { - const struct divecomputer *currentdc = get_dive_dc(current_dive, dc_number); + std::vector sensors; + const struct divecomputer *currentdc = get_dive_dc(d, dcNr); for (int i = 0; i < currentdc->samples; ++i) { auto &sample = currentdc->sample[i]; for (int s = 0; s < MAX_SENSORS; ++s) { @@ -475,7 +476,7 @@ bool CylindersModel::setData(const QModelIndex &index, const QVariant &value, in bool ok = false; int s = vString.toInt(&ok); if (ok) { - Command::editSensors(index.row(), s, dc_number); + Command::editSensors(index.row(), s, dcNr); // We don't use the edit cylinder command and editing sensors is not relevant for planner return true; } @@ -521,10 +522,11 @@ void CylindersModel::clear() { beginResetModel(); d = nullptr; + dcNr = -1; endResetModel(); } -void CylindersModel::updateDive(dive *dIn) +void CylindersModel::updateDive(dive *dIn, int dcNrIn) { #ifdef DEBUG_CYL if (d) @@ -532,6 +534,7 @@ void CylindersModel::updateDive(dive *dIn) #endif beginResetModel(); d = dIn; + dcNr = dcNrIn; numRows = calcNumRows(); endResetModel(); } diff --git a/qt-models/cylindermodel.h b/qt-models/cylindermodel.h index b5a350b4e..bdc5ed4b7 100644 --- a/qt-models/cylindermodel.h +++ b/qt-models/cylindermodel.h @@ -44,7 +44,7 @@ public: void add(); void clear(); - void updateDive(dive *d); + void updateDive(dive *d, int dcNr); void updateDecoDepths(pressure_t olddecopo2); void updateTrashIcon(); void moveAtFirst(int cylid); @@ -65,6 +65,7 @@ slots: private: dive *d; + int dcNr; bool inPlanner; bool hideUnused; int numRows; // Does not include unused cylinders at the end diff --git a/qt-models/diveplannermodel.cpp b/qt-models/diveplannermodel.cpp index fd6cccfcb..93fcf4368 100644 --- a/qt-models/diveplannermodel.cpp +++ b/qt-models/diveplannermodel.cpp @@ -105,9 +105,10 @@ void DivePlannerPointsModel::setupStartTime() } } -void DivePlannerPointsModel::loadFromDive(dive *dIn) +void DivePlannerPointsModel::loadFromDive(dive *dIn, int dcNrIn) { d = dIn; + dcNr = dcNrIn; int depthsum = 0; int samplecount = 0; @@ -115,7 +116,7 @@ void DivePlannerPointsModel::loadFromDive(dive *dIn) struct divecomputer *dc = &(d->dc); const struct event *evd = NULL; enum divemode_t current_divemode = UNDEF_COMP_TYPE; - cylinders.updateDive(d); + cylinders.updateDive(d, dcNr); duration_t lasttime = { 0 }; duration_t lastrecordedtime = {}; duration_t newtime = {}; @@ -197,7 +198,7 @@ void DivePlannerPointsModel::setupCylinders() reset_cylinders(d, true); if (d->cylinders.nr > 0) { - cylinders.updateDive(d); + cylinders.updateDive(d, dcNr); return; // We have at least one cylinder } } @@ -215,7 +216,7 @@ void DivePlannerPointsModel::setupCylinders() add_cylinder(&d->cylinders, 0, cyl); } reset_cylinders(d, false); - cylinders.updateDive(d); + cylinders.updateDive(d, dcNr); } // Update the dive's maximum depth. Returns true if max. depth changed diff --git a/qt-models/diveplannermodel.h b/qt-models/diveplannermodel.h index 59f3c1583..abe066da1 100644 --- a/qt-models/diveplannermodel.h +++ b/qt-models/diveplannermodel.h @@ -60,7 +60,7 @@ public: struct diveplan &getDiveplan(); struct deco_state final_deco_state; - void loadFromDive(dive *d); + void loadFromDive(dive *d, int dcNr); void addStop(int millimeters, int seconds); public slots: @@ -132,6 +132,7 @@ private: void computeVariationsFreeDeco(struct diveplan *diveplan, struct deco_state *ds); int analyzeVariations(struct decostop *min, struct decostop *mid, struct decostop *max, const char *unit); struct dive *d; + int dcNr; CylindersModel cylinders; Mode mode; QVector divepoints;