Show the actice divecomputer's data in the Info notebook

While the profile switched between different divecomputers, the Dive Info
notebook always showed either information from the first divecomputer or
(with some of the recent changes) information that had been collected from
all divecomputers and somehow consolidated for the dive.

With this commit we now show the data from the same divecomputer that is
also shown in the profile (which means if some data is available from one
of the divecomputers and not from another that will be correctly reflected
in the Dive Info notebook as the user cycles through the divecomputers.

This does beg the question if we should have some kind of "best data
available, considering all divecomputers" mode - but that's definitely not
something I'll tackle prior to 3.0.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Dirk Hohndel 2013-02-09 06:17:25 -08:00
parent 9e66312d6a
commit 0755cc522b
3 changed files with 19 additions and 9 deletions

View file

@ -46,6 +46,7 @@ struct graphics_context {
typedef enum { SC_SCREEN, SC_PRINT } scale_mode_t; typedef enum { SC_SCREEN, SC_PRINT } scale_mode_t;
extern void plot(struct graphics_context *gc, struct dive *dive, scale_mode_t scale); extern void plot(struct graphics_context *gc, struct dive *dive, scale_mode_t scale);
extern struct divecomputer *select_dc(struct divecomputer *main);
extern void init_profile_background(struct graphics_context *gc); extern void init_profile_background(struct graphics_context *gc);
extern void attach_tooltip(int x, int y, int w, int h, const char *text); extern void attach_tooltip(int x, int y, int w, int h, const char *text);
extern void get_plot_details(struct graphics_context *gc, int time, char *buf, size_t bufsize); extern void get_plot_details(struct graphics_context *gc, int time, char *buf, size_t bufsize);

View file

@ -1955,7 +1955,7 @@ static int nr_dcs(struct divecomputer *main)
return i; return i;
} }
static struct divecomputer *select_dc(struct divecomputer *main) struct divecomputer *select_dc(struct divecomputer *main)
{ {
int i = dc_number; int i = dc_number;
struct divecomputer *dc = main; struct divecomputer *dc = main;

View file

@ -525,6 +525,9 @@ static char *get_time_string(int seconds, int maxdays)
return buf; return buf;
} }
/* we try to show the data from the currently selected divecomputer
* right now for some values (e.g., surface pressure) we could fall back
* to dive data, but for consistency we don't. */
static void show_single_dive_stats(struct dive *dive) static void show_single_dive_stats(struct dive *dive)
{ {
char buf[80]; char buf[80];
@ -534,10 +537,12 @@ static void show_single_dive_stats(struct dive *dive)
int idx, offset, gas_used, mbar; int idx, offset, gas_used, mbar;
struct dive *prev_dive; struct dive *prev_dive;
struct tm tm; struct tm tm;
struct divecomputer *dc;
process_all_dives(dive, &prev_dive); process_all_dives(dive, &prev_dive);
if (!dive) if (!dive)
return; return;
dc = select_dc(&dive->dc);
utc_mkdate(dive->when, &tm); utc_mkdate(dive->when, &tm);
snprintf(buf, sizeof(buf), snprintf(buf, sizeof(buf),
/*++GETTEXT 80 chars: weekday, monthname, day, year, hour, min */ /*++GETTEXT 80 chars: weekday, monthname, day, year, hour, min */
@ -554,28 +559,32 @@ static void show_single_dive_stats(struct dive *dive)
get_time_string(dive->when - (prev_dive->when + get_duration_in_sec(prev_dive)), 4)); get_time_string(dive->when - (prev_dive->when + get_duration_in_sec(prev_dive)), 4));
else else
set_label(single_w.surf_intv, _("unknown")); set_label(single_w.surf_intv, _("unknown"));
value = get_depth_units(dive->maxdepth.mm, &decimals, &unit); value = get_depth_units(dc->maxdepth.mm, &decimals, &unit);
set_label(single_w.max_depth, "%.*f %s", decimals, value, unit); set_label(single_w.max_depth, "%.*f %s", decimals, value, unit);
value = get_depth_units(dive->dc.meandepth.mm, &decimals, &unit); value = get_depth_units(dc->meandepth.mm, &decimals, &unit);
set_label(single_w.avg_depth, "%.*f %s", decimals, value, unit); set_label(single_w.avg_depth, "%.*f %s", decimals, value, unit);
set_label(single_w.viz, star_strings[dive->visibility]); set_label(single_w.viz, star_strings[dive->visibility]);
if (dive->dc.watertemp.mkelvin) { if (dc->watertemp.mkelvin) {
value = get_temp_units(dive->dc.watertemp.mkelvin, &unit); value = get_temp_units(dc->watertemp.mkelvin, &unit);
set_label(single_w.water_temp, "%.1f %s", value, unit); set_label(single_w.water_temp, "%.1f %s", value, unit);
} else { } else {
set_label(single_w.water_temp, ""); set_label(single_w.water_temp, "");
} }
if (dive->dc.airtemp.mkelvin) { if (dc->airtemp.mkelvin) {
value = get_temp_units(dive->dc.airtemp.mkelvin, &unit); value = get_temp_units(dc->airtemp.mkelvin, &unit);
set_label(single_w.air_temp, "%.1f %s", value, unit); set_label(single_w.air_temp, "%.1f %s", value, unit);
} else { } else {
set_label(single_w.air_temp, ""); set_label(single_w.air_temp, "");
} }
mbar = get_surface_pressure_in_mbar(dive, FALSE); mbar = dc->surface_pressure.mbar;
/* it would be easy to get dive data here:
* if (!mbar)
* mbar = get_surface_pressure_in_mbar(dive, FALSE);
*/
if (mbar) { if (mbar) {
set_label(single_w.air_press, "%d mbar", mbar); set_label(single_w.air_press, "%d mbar", mbar);
} else { } else {
set_label(single_w.air_press, _("unknown")); set_label(single_w.air_press, "");
} }
value = get_volume_units(dive->sac, &decimals, &unit); value = get_volume_units(dive->sac, &decimals, &unit);
if (value > 0) if (value > 0)