diff options
-rw-r--r-- | dive.c | 14 | ||||
-rw-r--r-- | dive.h | 1 | ||||
-rw-r--r-- | planner.h | 1 | ||||
-rw-r--r-- | qt-ui/diveplanner.cpp | 58 | ||||
-rw-r--r-- | qt-ui/diveplanner.h | 2 | ||||
-rw-r--r-- | qt-ui/maintab.cpp | 7 | ||||
-rw-r--r-- | qt-ui/maintab.h | 1 |
7 files changed, 54 insertions, 30 deletions
@@ -195,6 +195,20 @@ struct dive *alloc_dive(void) return dive; } +/* only copies events from the first dive computer */ +void copy_events(struct dive *s, struct dive *d) +{ + struct event *ev; + if (!s || !d) + return; + ev = s->dc.events; + d->dc.events = NULL; + while (ev != NULL) { + add_event(&d->dc, ev->time.seconds, ev->type, ev->flags, ev->value, ev->name); + ev = ev->next; + } +} + void copy_cylinders(struct dive *s, struct dive *d) { int i; @@ -653,6 +653,7 @@ extern unsigned int dc_airtemp(struct divecomputer *dc); extern struct dive *merge_dives(struct dive *a, struct dive *b, int offset, bool prefer_downloaded); extern struct dive *try_to_merge(struct dive *a, struct dive *b, bool prefer_downloaded); extern void renumber_dives(int nr); +extern void copy_events(struct dive *s, struct dive *d); extern void copy_cylinders(struct dive *s, struct dive *d); extern void copy_samples(struct dive *s, struct dive *d); @@ -11,6 +11,7 @@ extern int validate_po2(const char *text, int *mbar_po2); extern timestamp_t current_time_notz(void); extern void show_planned_dive(char **error_string_p); extern void set_last_stop(bool last_stop_6m); +extern void get_gas_from_events(struct divecomputer *dc, int time, int *o2, int *he); extern struct diveplan diveplan; extern struct dive *planned_dive; diff --git a/qt-ui/diveplanner.cpp b/qt-ui/diveplanner.cpp index 2b4b1d1d2..398d11fc3 100644 --- a/qt-ui/diveplanner.cpp +++ b/qt-ui/diveplanner.cpp @@ -412,17 +412,16 @@ void DivePlannerGraphics::mouseDoubleClickEvent(QMouseEvent* event) int minutes = rint(timeLine->valueAt(mappedPos)); int milimeters = rint(depthLine->valueAt(mappedPos) / M_OR_FT(1,1)) * M_OR_FT(1,1); - plannerModel->addStop(milimeters, minutes * 60, tr("Air"), 0); + plannerModel->addStop(milimeters, minutes * 60, O2_IN_AIR, 0, 0); } void DivePlannerPointsModel::createSimpleDive() { - plannerModel->addStop(M_OR_FT(15,45), 1 * 60, tr("Air"), 0); - plannerModel->addStop(M_OR_FT(15,45), 40 * 60, tr("Air"), 0); -// plannerModel->addStop(9000, 26 * 60, tr("Air"), 0); -// plannerModel->addStop(9000, 41 * 60, tr("Air"), 0); - plannerModel->addStop(M_OR_FT(5,15), 42 * 60, tr("Air"), 0); - plannerModel->addStop(M_OR_FT(5,15), 45 * 60, tr("Air"), 0); + plannerModel->addStop(0, 0, O2_IN_AIR, 0, 0); + plannerModel->addStop(M_OR_FT(15,45), 1 * 60, O2_IN_AIR, 0, 0); + plannerModel->addStop(M_OR_FT(15,45), 40 * 60, O2_IN_AIR, 0, 0); + plannerModel->addStop(M_OR_FT(5,15), 42 * 60, O2_IN_AIR, 0, 0); + plannerModel->addStop(M_OR_FT(5,15), 45 * 60, O2_IN_AIR, 0, 0); } void DivePlannerPointsModel::loadFromDive(dive* d) @@ -431,14 +430,23 @@ void DivePlannerPointsModel::loadFromDive(dive* d) * as soon as the model is modified, it will * remove all samples from the current dive. * */ + struct dive *backupDive = alloc_dive(); + backupDive->when = current_dive->when; // do we need anything else? + copy_samples(current_dive, backupDive); + copy_cylinders(current_dive, backupDive); + copy_events(current_dive, backupDive); backupSamples.clear(); - for(int i = 1; i < d->dc.samples-1; i++){ + for(int i = 0; i < d->dc.samples-1; i++){ backupSamples.push_back( d->dc.sample[i]); } + save_dive(stdout, current_dive); + save_dive(stdout, backupDive); Q_FOREACH(const sample &s, backupSamples){ - // we need to use the correct gas - plannerModel->addStop(s.depth.mm, s.time.seconds, tr("Air"), 0); + int o2 = 0, he = 0; + get_gas_from_events(&backupDive->dc, s.time.seconds, &o2, &he); + qDebug() << "time / depth" << s.time.seconds << s.depth.mm << "o2/he" << o2 << he; + plannerModel->addStop(s.depth.mm, s.time.seconds, o2, he, 0); } } @@ -466,6 +474,10 @@ void DivePlannerGraphics::drawProfile() plannerModel->createTemporaryPlan(); struct diveplan diveplan = plannerModel->getDiveplan(); struct divedatapoint *dp = diveplan.dp; + if (!dp) { + plannerModel->deleteTemporaryPlan(); + return; + } while(dp->next) dp = dp->next; @@ -1076,9 +1088,10 @@ bool divePointsLessThan(const divedatapoint& p1, const divedatapoint& p2) return p1.time <= p2.time; } -int DivePlannerPointsModel::addStop(int milimeters, int minutes, const QString& gas, int ccpoint) +int DivePlannerPointsModel::addStop(int milimeters, int minutes, int o2, int he, int ccpoint) { int row = divepoints.count(); +#if 0 // this seems bogus if(milimeters == 0 && minutes == 0) { if(row == 0) { milimeters = M_OR_FT(10,30); @@ -1089,6 +1102,7 @@ int DivePlannerPointsModel::addStop(int milimeters, int minutes, const QString& minutes = p.time + 600; } } +#endif // check if there's already a new stop before this one: for (int i = 0; i < divepoints.count(); i++) { @@ -1104,16 +1118,9 @@ int DivePlannerPointsModel::addStop(int milimeters, int minutes, const QString& divedatapoint point; point.depth = milimeters; point.time = minutes; - if (row == 0) { - point.o2 = 209; - point.he = 0; - point.po2 = 0; - } else { - divedatapoint before = at(row-1); - point.o2 = before.o2; - point.he = before.he; - point.po2 = 0; - } + point.o2 = o2; + point.he = he; + point.po2 = ccpoint; divepoints.append( point ); std::sort(divepoints.begin(), divepoints.end(), divePointsLessThan); endInsertRows(); @@ -1174,8 +1181,8 @@ void DivePlannerPointsModel::createTemporaryPlan() // Get the user-input and calculate the dive info // Not sure if this is the place to create the diveplan... // We just start with a surface node at time = 0 - struct divedatapoint *dp = create_dp(0, 0, 209, 0, 0); - dp->entered = TRUE; + struct divedatapoint *dp = NULL; // create_dp(0, 0, 209, 0, 0); +// dp->entered = TRUE; diveplan.dp = dp; int lastIndex = -1; for (int i = 0; i < rowCount(); i++) { @@ -1194,6 +1201,7 @@ void DivePlannerPointsModel::createTemporaryPlan() if (mode == ADD) { copy_samples(tempDive, current_dive); copy_cylinders(tempDive, current_dive); + copy_events(tempDive, current_dive); } #if DEBUG_PLAN dump_plan(&diveplan); @@ -1206,7 +1214,9 @@ void DivePlannerPointsModel::undoEdition() divepoints.clear(); endRemoveRows(); Q_FOREACH(const sample &s, backupSamples){ - plannerModel->addStop(s.depth.mm, s.time.seconds, tr("Air"), 0); + int o2, he; + get_gas_from_events(¤t_dive->dc, s.time.seconds, &o2, &he); + plannerModel->addStop(s.depth.mm, s.time.seconds, o2, he, 0); } } diff --git a/qt-ui/diveplanner.h b/qt-ui/diveplanner.h index 6883f62eb..83bfadc32 100644 --- a/qt-ui/diveplanner.h +++ b/qt-ui/diveplanner.h @@ -41,7 +41,7 @@ public: int size(); struct diveplan getDiveplan(); public slots: - int addStop(int meters = 0, int minutes = 0,const QString& gas = QString(), int ccpoint = 0 ); + int addStop(int meters = 0, int minutes = 0, int o2 = 0, int he = 0, int ccpoint = 0 ); void setGFHigh(short gfhigh); void setGFLow(short ghflow); void setSurfacePressure(int pressure); diff --git a/qt-ui/maintab.cpp b/qt-ui/maintab.cpp index dfcb48a0c..8230cf663 100644 --- a/qt-ui/maintab.cpp +++ b/qt-ui/maintab.cpp @@ -538,14 +538,13 @@ void MainTab::rejectChanges() if (mainWindow() && mainWindow()->dive_list()->selectedTrips.count() == 1){ ui.notes->setText(notesBackup[NULL].notes ); ui.location->setText(notesBackup[NULL].location); - }else{ + } else { if (editMode == ADD) { // clean up delete_single_dive(selected_dive); DivePlannerPointsModel::instance()->cancelPlan(); - } - else if (editMode == MANUALLY_ADDED_DIVE ){ - DivePlannerPointsModel::instance()->undoEdition(); + } else if (editMode == MANUALLY_ADDED_DIVE ) { + DivePlannerPointsModel::instance()->undoEdition(); // that's BOGUS... just copy the original dive back and be done with it... } struct dive *curr = current_dive; ui.notes->setText(notesBackup[curr].notes ); diff --git a/qt-ui/maintab.h b/qt-ui/maintab.h index 22a705530..68803c02d 100644 --- a/qt-ui/maintab.h +++ b/qt-ui/maintab.h @@ -94,7 +94,6 @@ private: * dive to this structure, making all editions there, * then applying the changes on the other dives.*/ struct dive multiEditEquipmentPlaceholder; - Completers completers; void resetPallete(); void saveTags(); |