X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=equipment.c;h=165b9d77cdab94326341e214fb15c54cdf1b9866;hb=77a903a6bb26d60e1736f7d5c118b598916b37f2;hp=579c4554207041a7030c8d7d08c940e37db1efc9;hpb=854bd0269c05adc56caf9667fd68f676520a2941;p=ext%2Fsubsurface.git diff --git a/equipment.c b/equipment.c index 579c455..165b9d7 100644 --- a/equipment.c +++ b/equipment.c @@ -81,9 +81,8 @@ static int convert_pressure(int mbar, double *p) return decimals; } -static int convert_volume_pressure(int ml, int mbar, double *v, double *p) +static void convert_volume_pressure(int ml, int mbar, double *v, double *p) { - int decimals = 1; double volume, pressure; volume = ml / 1000.0; @@ -95,13 +94,11 @@ static int convert_volume_pressure(int ml, int mbar, double *v, double *p) if (output_units.pressure == PSI) { pressure = mbar_to_PSI(mbar); - decimals = 0; } else pressure = mbar / 1000.0; } *v = volume; *p = pressure; - return decimals; } static int convert_weight(int grams, double *m) @@ -311,13 +308,15 @@ static GtkTreeIter *add_weightsystem_type(const char *desc, int weight, GtkTreeI model = GTK_TREE_MODEL(weightsystem_model); gtk_tree_model_foreach(model, match_desc, (void *)desc); - if (!found_match) { - GtkListStore *store = GTK_LIST_STORE(model); - - gtk_list_store_append(store, iter); - gtk_list_store_set(store, iter, - 0, desc, - 1, weight, + if (found_match) { + gtk_list_store_set(GTK_LIST_STORE(model), found_match, + WS_WEIGHT, weight, + -1); + } else if (desc && desc[0]) { + gtk_list_store_append(GTK_LIST_STORE(model), iter); + gtk_list_store_set(GTK_LIST_STORE(model), iter, + WS_DESC, desc, + WS_WEIGHT, weight, -1); return iter; } @@ -405,7 +404,7 @@ static void show_cylinder(cylinder_t *cyl, struct cylinder_widget *cylinder) o2 = cyl->gasmix.o2.permille / 10.0; he = cyl->gasmix.he.permille / 10.0; if (!o2) - o2 = 21.0; + o2 = AIR_PERMILLE / 10.0; gtk_spin_button_set_value(GTK_SPIN_BUTTON(cylinder->o2), o2); gtk_spin_button_set_value(GTK_SPIN_BUTTON(cylinder->he), he); } @@ -448,7 +447,7 @@ int weightsystem_none(void *_data) return !ws->weight.grams && !ws->description; } -static void set_one_cylinder(int index, void *_data, GtkListStore *model, GtkTreeIter *iter) +static void set_one_cylinder(void *_data, GtkListStore *model, GtkTreeIter *iter) { cylinder_t *cyl = _data; unsigned int start, end; @@ -466,7 +465,7 @@ static void set_one_cylinder(int index, void *_data, GtkListStore *model, GtkTre -1); } -static void set_one_weightsystem(int index, void *_data, GtkListStore *model, GtkTreeIter *iter) +static void set_one_weightsystem(void *_data, GtkListStore *model, GtkTreeIter *iter) { weightsystem_t *ws = _data; @@ -494,7 +493,7 @@ static void show_equipment(struct dive *dive, int max, struct equipment_list *equipment_list, void*(*ptr_function)(struct dive*, int), int(*none_function)(void *), - void(*set_one_function)(int, void*, GtkListStore*, GtkTreeIter *)) + void(*set_one_function)(void*, GtkListStore*, GtkTreeIter *)) { int i, used; void *data; @@ -518,7 +517,7 @@ static void show_equipment(struct dive *dive, int max, for (i = 0; i < used; i++) { data = ptr_function(dive, i); gtk_list_store_append(model, &iter); - set_one_function(i, data, model, &iter); + set_one_function(data, model, &iter); } } @@ -626,6 +625,7 @@ static void record_weightsystem_changes(weightsystem_t *ws, struct ws_widget *we GtkComboBox *box; int grams; double value; + GtkTreeIter iter; /* Ignore uninitialized cylinder widgets */ box = weightsystem_widget->description; @@ -641,6 +641,7 @@ static void record_weightsystem_changes(weightsystem_t *ws, struct ws_widget *we grams = value * 1000; ws->weight.grams = grams; ws->description = desc; + add_weightsystem_type(desc, grams, &iter); } /* @@ -667,10 +668,10 @@ static struct tank_info { { "AL100", .cuft = 100, .psi = 3300 }, /* Somewhat common LP steel cylinders */ - { "LP85", .cuft = 85, 2640 }, - { "LP95", .cuft = 95, 2640 }, - { "LP108", .cuft = 108, 2640 }, - { "LP121", .cuft = 121, 2640 }, + { "LP85", .cuft = 85, .psi = 2640 }, + { "LP95", .cuft = 95, .psi = 2640 }, + { "LP108", .cuft = 108, .psi = 2640 }, + { "LP121", .cuft = 121, .psi = 2640 }, /* Somewhat common HP steel cylinders */ { "HP65", .cuft = 65, .psi = 3442 }, @@ -699,23 +700,29 @@ static void fill_tank_list(GtkListStore *store) GtkTreeIter iter; struct tank_info *info = tank_info; - while (info->name) { + for (info = tank_info ; info->name; info++) { int ml = info->ml; int cuft = info->cuft; int psi = info->psi; int mbar; double bar = info->bar; + if (psi && bar) + goto bad_tank_info; + if (ml && cuft) + goto bad_tank_info; + if (cuft && !psi) + goto bad_tank_info; + /* Is it in cuft and psi? */ - if (psi) { + if (psi) bar = psi_to_bar(psi); - if (cuft) { - double airvolume = cuft_to_l(cuft) * 1000.0; - double atm = bar_to_atm(bar); + if (cuft) { + double airvolume = cuft_to_l(cuft) * 1000.0; + double atm = bar_to_atm(bar); - ml = airvolume / atm + 0.5; - } + ml = airvolume / atm + 0.5; } mbar = bar * 1000 + 0.5; @@ -726,7 +733,10 @@ static void fill_tank_list(GtkListStore *store) 1, ml, 2, mbar, -1); - info++; + continue; + +bad_tank_info: + fprintf(stderr, "Bad tank info for '%s'\n", info->name); } } @@ -738,8 +748,6 @@ static struct ws_info { const char *name; int grams; } ws_info[100] = { - /* Need an empty entry for the no weight system case */ - { "", }, { "integrated", 0 }, { "belt", 0 }, { "ankle", 0 }, @@ -1073,7 +1081,7 @@ static void edit_cb(GtkButton *button, GtkTreeView *tree_view) if (!edit_cylinder_dialog(index, &cyl)) return; - set_one_cylinder(index, &cyl, model, &iter); + set_one_cylinder(&cyl, model, &iter); repaint_dive(); } @@ -1089,7 +1097,7 @@ static void add_cb(GtkButton *button, GtkTreeView *tree_view) return; gtk_list_store_append(model, &iter); - set_one_cylinder(index, &cyl, model, &iter); + set_one_cylinder(&cyl, model, &iter); selection = gtk_tree_view_get_selection(tree_view); gtk_tree_selection_select_iter(selection, &iter); @@ -1153,7 +1161,7 @@ static void ws_edit_cb(GtkButton *button, GtkTreeView *tree_view) if (!edit_weightsystem_dialog(index, &ws)) return; - set_one_weightsystem(index, &ws, model, &iter); + set_one_weightsystem(&ws, model, &iter); repaint_dive(); } @@ -1169,7 +1177,7 @@ static void ws_add_cb(GtkButton *button, GtkTreeView *tree_view) return; gtk_list_store_append(model, &iter); - set_one_weightsystem(index, &ws, model, &iter); + set_one_weightsystem(&ws, model, &iter); selection = gtk_tree_view_get_selection(tree_view); gtk_tree_selection_select_iter(selection, &iter); @@ -1337,6 +1345,14 @@ static void row_activated_cb(GtkTreeView *tree_view, edit_cb(NULL, tree_view); } +static void ws_row_activated_cb(GtkTreeView *tree_view, + GtkTreePath *path, + GtkTreeViewColumn *column, + GtkTreeModel *model) +{ + ws_edit_cb(NULL, tree_view); +} + GtkWidget *cylinder_list_widget(void) { GtkListStore *model = cylinder_list.model; @@ -1374,7 +1390,7 @@ GtkWidget *weightsystem_list_widget(void) tree_view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(model)); gtk_widget_set_can_focus(tree_view, FALSE); - g_signal_connect(tree_view, "row-activated", G_CALLBACK(row_activated_cb), model); + g_signal_connect(tree_view, "row-activated", G_CALLBACK(ws_row_activated_cb), model); selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_view)); gtk_tree_selection_set_mode(GTK_TREE_SELECTION(selection), GTK_SELECTION_BROWSE);