diff options
-rw-r--r-- | dive.h | 2 | ||||
-rw-r--r-- | planner.c | 15 | ||||
-rw-r--r-- | planner.h | 2 | ||||
-rw-r--r-- | qt-ui/diveplanner.cpp | 4 |
4 files changed, 18 insertions, 5 deletions
@@ -719,7 +719,7 @@ void free_dps(struct divedatapoint *dp); void get_gas_string(int o2, int he, char *buf, int len); struct divedatapoint *create_dp(int time_incr, int depth, int o2, int he, int po2); void dump_plan(struct diveplan *diveplan); -void plan(struct diveplan *diveplan, char **cached_datap, struct dive **divep, char **error_string_p); +void plan(struct diveplan *diveplan, char **cached_datap, struct dive **divep, bool add_deco, char **error_string_p); void delete_single_dive(int idx); struct event *get_next_event(struct event *event, char *name); @@ -594,7 +594,7 @@ static void add_plan_to_notes(struct diveplan *diveplan, struct dive *dive) } #endif -void plan(struct diveplan *diveplan, char **cached_datap, struct dive **divep, char **error_string_p) +void plan(struct diveplan *diveplan, char **cached_datap, struct dive **divep, bool add_deco, char **error_string_p) { struct dive *dive; struct sample *sample; @@ -623,6 +623,19 @@ void plan(struct diveplan *diveplan, char **cached_datap, struct dive **divep, c get_gas_from_events(&dive->dc, sample->time.seconds, &o2, &he); po2 = dive->dc.sample[dive->dc.samples - 1].po2; depth = dive->dc.sample[dive->dc.samples - 1].depth.mm; + + /* if all we wanted was the dive just get us back to the surface */ + if (!add_deco) { + transitiontime = depth / 150; /* this still needs to be made configurable */ + plan_add_segment(diveplan, transitiontime, 0, o2, he, po2); + /* re-create the dive */ + delete_single_dive(dive_table.nr - 1); + *divep = dive = create_dive_from_plan(diveplan, error_string_p); + if (dive) + record_dive(dive); + return; + } + tissue_tolerance = tissue_at_end(dive, cached_datap, error_string_p); ceiling = deco_allowed_depth(tissue_tolerance, diveplan->surface_pressure / 1000.0, dive, 1); #if DEBUG_PLAN & 4 @@ -6,7 +6,7 @@ extern "C" { #endif -extern void plan(struct diveplan *diveplan, char **cache_datap, struct dive **divep, char **error_string_p); +extern void plan(struct diveplan *diveplan, char **cache_datap, struct dive **divep, bool add_plan, char **error_string_p); extern int validate_gas(const char *text, int *o2_p, int *he_p); extern int validate_time(const char *text, int *sec_p, int *rel_p); extern int validate_depth(const char *text, int *mm_p); diff --git a/qt-ui/diveplanner.cpp b/qt-ui/diveplanner.cpp index 20dbabd68..d634aadf8 100644 --- a/qt-ui/diveplanner.cpp +++ b/qt-ui/diveplanner.cpp @@ -1148,7 +1148,7 @@ void DivePlannerPointsModel::createTemporaryPlan() char *cache = NULL; tempDive = NULL; char *errorString = NULL; - plan(&diveplan, &cache, &tempDive, &errorString); + plan(&diveplan, &cache, &tempDive, isPlanner(), &errorString); #if DEBUG_PLAN dump_plan(&diveplan); #endif @@ -1181,7 +1181,7 @@ void DivePlannerPointsModel::createPlan() char *errorString = NULL; createTemporaryPlan(); - plan(&diveplan, &cache, &tempDive, &errorString); + plan(&diveplan, &cache, &tempDive, isPlanner(), &errorString); mark_divelist_changed(TRUE); // Remove and clean the diveplan, so we don't delete |