subsurface/core/planner.h
Michael Keller 528532572f Planner: Fix Editing of Plans in Multi-Divecomputer Dives.
Currently editing of planned dives that have been merged with actual
(logged) dives only works if the 'Planned dive' divecomputer is the
first divecomputer, and this divecomputer is selected when clicking
'Edit planned dive'. In other cases the profile of the first
divecomputer is overlaid with the profile of the planned dive, and the
first divecomputer's profile is overwritten when saving the dive plan.
Fix this problem.

Triggered by @SeppoTakalo's comment (https://github.com/subsurface/subsurface/issues/1913#issuecomment-2075562119): Users don't like that planned dives show up as their own entries in the dive list, so being able to merge them with the actual dive after it has been executed is a good feature - but this wasn't working well until now.

Signed-off-by: Michael Keller <github@ike.ch>
2024-05-11 12:51:45 +12:00

65 lines
1.7 KiB
C++

// SPDX-License-Identifier: GPL-2.0
#ifndef PLANNER_H
#define PLANNER_H
#include "units.h"
#include "divemode.h"
/* this should be converted to use our types */
struct divedatapoint {
int time;
depth_t depth;
int cylinderid;
pressure_t minimum_gas;
int setpoint;
bool entered;
struct divedatapoint *next;
enum divemode_t divemode;
};
struct diveplan {
timestamp_t when;
int surface_pressure; /* mbar */
int bottomsac; /* ml/min */
int decosac; /* ml/min */
int salinity;
short gflow;
short gfhigh;
short vpmb_conservatism;
struct divedatapoint *dp;
int eff_gflow, eff_gfhigh;
int surface_interval;
};
struct deco_state_cache;
#ifdef __cplusplus
extern "C" {
#endif
extern int validate_gas(const char *text, struct gasmix *gas);
extern int validate_po2(const char *text, int *mbar_po2);
extern int get_cylinderid_at_time(struct dive *dive, struct divecomputer *dc, duration_t time);
extern bool diveplan_empty(struct diveplan *diveplan);
extern void add_plan_to_notes(struct diveplan *diveplan, struct dive *dive, bool show_disclaimer, bool error);
extern const char *get_planner_disclaimer();
extern void free_dps(struct diveplan *diveplan);
struct divedatapoint *plan_add_segment(struct diveplan *diveplan, int duration, int depth, int cylinderid, int po2, bool entered, enum divemode_t divemode);
#if DEBUG_PLAN
void dump_plan(struct diveplan *diveplan);
#endif
struct decostop {
int depth;
int time;
};
#ifdef __cplusplus
}
#include <string>
extern std::string get_planner_disclaimer_formatted();
extern bool plan(struct deco_state *ds, struct diveplan *diveplan, struct dive *dive, int dcNr, int timestep, struct decostop *decostoptable, deco_state_cache &cache, bool is_planner, bool show_disclaimer);
#endif
#endif // PLANNER_H