mirror of
https://github.com/subsurface/subsurface.git
synced 2025-01-19 06:15:26 +00:00
Merge branch 'suit' of git://git.hohndel.org/subsurface
Pull exposure suit tracking from Dirk Hohndel. * 'suit' of git://git.hohndel.org/subsurface: Add exposure protection tracking
This commit is contained in:
commit
91e7dcc555
8 changed files with 50 additions and 5 deletions
|
@ -15,6 +15,7 @@ typedef struct {
|
|||
gboolean cylinder;
|
||||
gboolean temperature;
|
||||
gboolean totalweight;
|
||||
gboolean suit;
|
||||
gboolean nitrox;
|
||||
gboolean sac;
|
||||
gboolean otu;
|
||||
|
|
2
dive.c
2
dive.c
|
@ -486,6 +486,7 @@ struct dive *fixup_dive(struct dive *dive)
|
|||
add_people(dive->buddy);
|
||||
add_people(dive->divemaster);
|
||||
add_location(dive->location);
|
||||
add_suit(dive->suit);
|
||||
for (i = 0; i < MAX_CYLINDERS; i++) {
|
||||
cylinder_t *cyl = dive->cylinder + i;
|
||||
add_cylinder_description(&cyl->type);
|
||||
|
@ -703,6 +704,7 @@ struct dive *try_to_merge(struct dive *a, struct dive *b)
|
|||
MERGE_TXT(res, a, b, buddy);
|
||||
MERGE_TXT(res, a, b, divemaster);
|
||||
MERGE_MAX(res, a, b, rating);
|
||||
MERGE_TXT(res, a, b, suit);
|
||||
MERGE_MAX(res, a, b, number);
|
||||
MERGE_MAX(res, a, b, maxdepth.mm);
|
||||
res->meandepth.mm = 0;
|
||||
|
|
2
dive.h
2
dive.h
|
@ -243,6 +243,7 @@ struct dive {
|
|||
temperature_t airtemp, watertemp;
|
||||
cylinder_t cylinder[MAX_CYLINDERS];
|
||||
weightsystem_t weightsystem[MAX_WEIGHTSYSTEMS];
|
||||
char *suit;
|
||||
int sac, otu;
|
||||
struct event *events;
|
||||
int samples, alloc_samples;
|
||||
|
@ -342,6 +343,7 @@ extern void add_cylinder_description(cylinder_type_t *);
|
|||
extern void add_weightsystem_description(weightsystem_t *);
|
||||
extern void add_people(const char *string);
|
||||
extern void add_location(const char *string);
|
||||
extern void add_suit(const char *string);
|
||||
extern void remember_event(const char *eventname);
|
||||
extern void evn_foreach(void (*callback)(const char *, int *, void *), void *data);
|
||||
|
||||
|
|
18
divelist.c
18
divelist.c
|
@ -26,7 +26,7 @@ struct DiveList {
|
|||
GtkWidget *container_widget;
|
||||
GtkListStore *model;
|
||||
GtkTreeViewColumn *nr, *date, *stars, *depth, *duration, *location;
|
||||
GtkTreeViewColumn *temperature, *cylinder, *totalweight, *nitrox, *sac, *otu;
|
||||
GtkTreeViewColumn *temperature, *cylinder, *totalweight, *suit, *nitrox, *sac, *otu;
|
||||
int changed;
|
||||
};
|
||||
|
||||
|
@ -45,6 +45,7 @@ enum {
|
|||
DIVE_DURATION, /* int: in seconds */
|
||||
DIVE_TEMPERATURE, /* int: in mkelvin */
|
||||
DIVE_TOTALWEIGHT, /* int: in grams */
|
||||
DIVE_SUIT, /* "wet, 3mm" */
|
||||
DIVE_CYLINDER,
|
||||
DIVE_NITROX, /* int: dummy */
|
||||
DIVE_SAC, /* int: in ml/min */
|
||||
|
@ -534,6 +535,11 @@ static void get_cylinder(struct dive *dive, char **str)
|
|||
get_string(str, dive->cylinder[0].type.description);
|
||||
}
|
||||
|
||||
static void get_suit(struct dive *dive, char **str)
|
||||
{
|
||||
get_string(str, dive->suit);
|
||||
}
|
||||
|
||||
/*
|
||||
* Set up anything that could have changed due to editing
|
||||
* of dive information
|
||||
|
@ -542,10 +548,11 @@ static void fill_one_dive(struct dive *dive,
|
|||
GtkTreeModel *model,
|
||||
GtkTreeIter *iter)
|
||||
{
|
||||
char *location, *cylinder;
|
||||
char *location, *cylinder, *suit;
|
||||
|
||||
get_cylinder(dive, &cylinder);
|
||||
get_location(dive, &location);
|
||||
get_suit(dive, &suit);
|
||||
|
||||
gtk_list_store_set(GTK_LIST_STORE(model), iter,
|
||||
DIVE_NR, dive->number,
|
||||
|
@ -555,10 +562,12 @@ static void fill_one_dive(struct dive *dive,
|
|||
DIVE_SAC, dive->sac,
|
||||
DIVE_OTU, dive->otu,
|
||||
DIVE_TOTALWEIGHT, total_weight(dive),
|
||||
DIVE_SUIT, suit,
|
||||
-1);
|
||||
|
||||
free(location);
|
||||
free(cylinder);
|
||||
free(suit);
|
||||
}
|
||||
|
||||
static gboolean set_one_dive(GtkTreeModel *model,
|
||||
|
@ -617,6 +626,7 @@ void update_dive_list_col_visibility(void)
|
|||
gtk_tree_view_column_set_visible(dive_list.cylinder, visible_cols.cylinder);
|
||||
gtk_tree_view_column_set_visible(dive_list.temperature, visible_cols.temperature);
|
||||
gtk_tree_view_column_set_visible(dive_list.totalweight, visible_cols.totalweight);
|
||||
gtk_tree_view_column_set_visible(dive_list.suit, visible_cols.suit);
|
||||
gtk_tree_view_column_set_visible(dive_list.nitrox, visible_cols.nitrox);
|
||||
gtk_tree_view_column_set_visible(dive_list.sac, visible_cols.sac);
|
||||
gtk_tree_view_column_set_visible(dive_list.otu, visible_cols.otu);
|
||||
|
@ -646,6 +656,7 @@ static void fill_dive_list(void)
|
|||
DIVE_LOCATION, "location",
|
||||
DIVE_TEMPERATURE, dive->watertemp.mkelvin,
|
||||
DIVE_TOTALWEIGHT, 0,
|
||||
DIVE_SUIT, dive->suit,
|
||||
DIVE_SAC, 0,
|
||||
-1);
|
||||
}
|
||||
|
@ -679,6 +690,7 @@ static struct divelist_column {
|
|||
[DIVE_DURATION] = { "min", duration_data_func, NULL, ALIGN_RIGHT },
|
||||
[DIVE_TEMPERATURE] = { UTF8_DEGREE "F", temperature_data_func, NULL, ALIGN_RIGHT, &visible_cols.temperature },
|
||||
[DIVE_TOTALWEIGHT] = { "lbs", weight_data_func, NULL, ALIGN_RIGHT, &visible_cols.totalweight },
|
||||
[DIVE_SUIT] = { "Suit", NULL, NULL, ALIGN_LEFT, &visible_cols.suit },
|
||||
[DIVE_CYLINDER] = { "Cyl", NULL, NULL, 0, &visible_cols.cylinder },
|
||||
[DIVE_NITROX] = { "O" UTF8_SUBSCRIPT_2 "%", nitrox_data_func, nitrox_sort_func, 0, &visible_cols.nitrox },
|
||||
[DIVE_SAC] = { "SAC", sac_data_func, NULL, 0, &visible_cols.sac },
|
||||
|
@ -786,6 +798,7 @@ GtkWidget *dive_list_create(void)
|
|||
G_TYPE_INT, /* Duration */
|
||||
G_TYPE_INT, /* Temperature */
|
||||
G_TYPE_INT, /* Total weight */
|
||||
G_TYPE_STRING, /* Suit */
|
||||
G_TYPE_STRING, /* Cylinder */
|
||||
G_TYPE_INT, /* Nitrox */
|
||||
G_TYPE_INT, /* SAC */
|
||||
|
@ -807,6 +820,7 @@ GtkWidget *dive_list_create(void)
|
|||
dive_list.duration = divelist_column(&dive_list, dl_column + DIVE_DURATION);
|
||||
dive_list.temperature = divelist_column(&dive_list, dl_column + DIVE_TEMPERATURE);
|
||||
dive_list.totalweight = divelist_column(&dive_list, dl_column + DIVE_TOTALWEIGHT);
|
||||
dive_list.suit = divelist_column(&dive_list, dl_column + DIVE_SUIT);
|
||||
dive_list.cylinder = divelist_column(&dive_list, dl_column + DIVE_CYLINDER);
|
||||
dive_list.nitrox = divelist_column(&dive_list, dl_column + DIVE_NITROX);
|
||||
dive_list.sac = divelist_column(&dive_list, dl_column + DIVE_SAC);
|
||||
|
|
|
@ -349,6 +349,7 @@ OPTIONCALLBACK(sac_toggle, visible_cols.sac)
|
|||
OPTIONCALLBACK(nitrox_toggle, visible_cols.nitrox)
|
||||
OPTIONCALLBACK(temperature_toggle, visible_cols.temperature)
|
||||
OPTIONCALLBACK(totalweight_toggle, visible_cols.totalweight)
|
||||
OPTIONCALLBACK(suit_toggle, visible_cols.suit)
|
||||
OPTIONCALLBACK(cylinder_toggle, visible_cols.cylinder)
|
||||
|
||||
static void event_toggle(GtkWidget *w, gpointer _data)
|
||||
|
@ -440,6 +441,11 @@ static void preferences_dialog(GtkWidget *w, gpointer data)
|
|||
gtk_box_pack_start(GTK_BOX(box), button, FALSE, FALSE, 6);
|
||||
g_signal_connect(G_OBJECT(button), "toggled", G_CALLBACK(totalweight_toggle), NULL);
|
||||
|
||||
button = gtk_check_button_new_with_label("Show Suit");
|
||||
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), visible_cols.suit);
|
||||
gtk_box_pack_start(GTK_BOX(box), button, FALSE, FALSE, 6);
|
||||
g_signal_connect(G_OBJECT(button), "toggled", G_CALLBACK(suit_toggle), NULL);
|
||||
|
||||
font = gtk_font_button_new_with_font(divelist_font);
|
||||
gtk_box_pack_start(GTK_BOX(vbox), font, FALSE, FALSE, 5);
|
||||
|
||||
|
@ -464,6 +470,7 @@ static void preferences_dialog(GtkWidget *w, gpointer data)
|
|||
subsurface_set_conf("lbs", PREF_BOOL, BOOL_TO_PTR(output_units.weight == LBS));
|
||||
subsurface_set_conf("TEMPERATURE", PREF_BOOL, BOOL_TO_PTR(visible_cols.temperature));
|
||||
subsurface_set_conf("TOTALWEIGHT", PREF_BOOL, BOOL_TO_PTR(visible_cols.totalweight));
|
||||
subsurface_set_conf("SUIT", PREF_BOOL, BOOL_TO_PTR(visible_cols.suit));
|
||||
subsurface_set_conf("CYLINDER", PREF_BOOL, BOOL_TO_PTR(visible_cols.cylinder));
|
||||
subsurface_set_conf("NITROX", PREF_BOOL, BOOL_TO_PTR(visible_cols.nitrox));
|
||||
subsurface_set_conf("SAC", PREF_BOOL, BOOL_TO_PTR(visible_cols.sac));
|
||||
|
@ -734,6 +741,7 @@ void init_ui(int *argcp, char ***argvp)
|
|||
visible_cols.cylinder = PTR_TO_BOOL(subsurface_get_conf("CYLINDER", PREF_BOOL));
|
||||
visible_cols.temperature = PTR_TO_BOOL(subsurface_get_conf("TEMPERATURE", PREF_BOOL));
|
||||
visible_cols.totalweight = PTR_TO_BOOL(subsurface_get_conf("TOTALWEIGHT", PREF_BOOL));
|
||||
visible_cols.suit = PTR_TO_BOOL(subsurface_get_conf("SUIT", PREF_BOOL));
|
||||
visible_cols.nitrox = PTR_TO_BOOL(subsurface_get_conf("NITROX", PREF_BOOL));
|
||||
visible_cols.otu = PTR_TO_BOOL(subsurface_get_conf("OTU", PREF_BOOL));
|
||||
visible_cols.sac = PTR_TO_BOOL(subsurface_get_conf("SAC", PREF_BOOL));
|
||||
|
|
21
info.c
21
info.c
|
@ -19,9 +19,9 @@
|
|||
#include "display-gtk.h"
|
||||
#include "divelist.h"
|
||||
|
||||
static GtkEntry *location, *buddy, *divemaster, *rating;
|
||||
static GtkEntry *location, *buddy, *divemaster, *rating, *suit;
|
||||
static GtkTextView *notes;
|
||||
static GtkListStore *location_list, *people_list, *star_list;
|
||||
static GtkListStore *location_list, *people_list, *star_list, *suit_list;
|
||||
|
||||
static char *get_text(GtkTextView *view)
|
||||
{
|
||||
|
@ -96,6 +96,7 @@ void show_dive_info(struct dive *dive)
|
|||
SET_TEXT_VALUE(divemaster);
|
||||
SET_TEXT_VALUE(buddy);
|
||||
SET_TEXT_VALUE(location);
|
||||
SET_TEXT_VALUE(suit);
|
||||
gtk_entry_set_text(rating, star_strings[dive->rating]);
|
||||
gtk_text_buffer_set_text(gtk_text_view_get_buffer(notes),
|
||||
dive && dive->notes ? dive->notes : "", -1);
|
||||
|
@ -298,6 +299,11 @@ void add_location(const char *string)
|
|||
add_string_list_entry(string, location_list);
|
||||
}
|
||||
|
||||
void add_suit(const char *string)
|
||||
{
|
||||
add_string_list_entry(string, suit_list);
|
||||
}
|
||||
|
||||
static int get_rating(const char *string)
|
||||
{
|
||||
int rating_val = 0;
|
||||
|
@ -310,7 +316,7 @@ static int get_rating(const char *string)
|
|||
}
|
||||
|
||||
struct dive_info {
|
||||
GtkComboBoxEntry *location, *divemaster, *buddy, *rating;
|
||||
GtkComboBoxEntry *location, *divemaster, *buddy, *rating, *suit;
|
||||
GtkTextView *notes;
|
||||
};
|
||||
|
||||
|
@ -338,6 +344,12 @@ static void save_dive_info_changes(struct dive *dive, struct dive_info *info)
|
|||
changed = 1;
|
||||
}
|
||||
|
||||
new_text = get_combo_box_entry_text(info->suit, &dive->suit);
|
||||
if (new_text) {
|
||||
add_suit(new_text);
|
||||
changed = 1;
|
||||
}
|
||||
|
||||
rating_string = strdup(star_strings[dive->rating]);
|
||||
new_text = get_combo_box_entry_text(info->rating, &rating_string);
|
||||
if (new_text) {
|
||||
|
@ -380,6 +392,7 @@ static void dive_info_widget(GtkWidget *box, struct dive *dive, struct dive_info
|
|||
gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, TRUE, 0);
|
||||
|
||||
info->rating = text_entry(hbox, "Rating", star_list, star_strings[dive->rating]);
|
||||
info->suit = text_entry(hbox, "Suit", suit_list, dive->suit);
|
||||
|
||||
info->notes = text_view(box, "Notes", READ_WRITE);
|
||||
if (dive->notes && *dive->notes)
|
||||
|
@ -564,6 +577,7 @@ GtkWidget *extended_dive_info_widget(void)
|
|||
add_string_list_entry(THREE_STARS, star_list);
|
||||
add_string_list_entry(FOUR_STARS, star_list);
|
||||
add_string_list_entry(FIVE_STARS, star_list);
|
||||
suit_list = gtk_list_store_new(1, G_TYPE_STRING);
|
||||
|
||||
gtk_container_set_border_width(GTK_CONTAINER(vbox), 6);
|
||||
location = text_value(vbox, "Location");
|
||||
|
@ -578,6 +592,7 @@ GtkWidget *extended_dive_info_widget(void)
|
|||
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0);
|
||||
|
||||
rating = text_value(hbox, "Rating");
|
||||
suit = text_value(hbox, "Suit");
|
||||
|
||||
notes = text_view(vbox, "Notes", READ_ONLY);
|
||||
return vbox;
|
||||
|
|
|
@ -1100,6 +1100,8 @@ static void try_to_fill_dive(struct dive **divep, const char *name, char *buf)
|
|||
return;
|
||||
if (MATCH(".location", utf8_string, &dive->location))
|
||||
return;
|
||||
if (MATCH(".suit", utf8_string, &dive->suit))
|
||||
return;
|
||||
if (MATCH(".notes", utf8_string, &dive->notes))
|
||||
return;
|
||||
if (MATCH(".divemaster", utf8_string, &dive->divemaster))
|
||||
|
|
|
@ -183,6 +183,7 @@ static void save_overview(FILE *f, struct dive *dive)
|
|||
show_utf8(f, dive->divemaster, " <divemaster>","</divemaster>\n");
|
||||
show_utf8(f, dive->buddy, " <buddy>","</buddy>\n");
|
||||
show_utf8(f, dive->notes, " <notes>","</notes>\n");
|
||||
show_utf8(f, dive->suit, " <suit>","</suit>\n");
|
||||
}
|
||||
|
||||
static void save_cylinder_info(FILE *f, struct dive *dive)
|
||||
|
|
Loading…
Add table
Reference in a new issue