X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=equipment.c;h=4ac8e3e99dc14dd8140586f0ff07e9e892c50e7f;hb=1efcf4538b8a034e8b288d5b9c375ba99b1d845f;hp=2e0e71a68466c2806203d5e85f0fa77a3a33d363;hpb=8e6bdc4f94eec68ab88cfc031c2358acd0a34b3b;p=ext%2Fsubsurface.git diff --git a/equipment.c b/equipment.c index 2e0e71a..4ac8e3e 100644 --- a/equipment.c +++ b/equipment.c @@ -3,7 +3,6 @@ * controlled through the following interfaces: * * void show_dive_equipment(struct dive *dive) - * void flush_dive_equipment_changes(struct dive *dive) * * called from gtk-ui: * GtkWidget *equipment_widget(void) @@ -46,7 +45,7 @@ struct cylinder_widget { GtkWidget *hbox; GtkComboBox *description; GtkSpinButton *size, *pressure; - GtkWidget *start, *end; + GtkWidget *start, *end, *pressure_button; GtkWidget *o2, *gasmix_button; }; @@ -101,11 +100,24 @@ static void set_cylinder_type_spinbuttons(struct cylinder_widget *cylinder, int static void set_cylinder_pressure_spinbuttons(struct cylinder_widget *cylinder, cylinder_t *cyl) { + int set; + unsigned int start, end; double pressure; - convert_pressure(cyl->start.mbar, &pressure); + start = cyl->start.mbar; + end = cyl->end.mbar; + set = start || end; + if (!set) { + start = cyl->sample_start.mbar; + end = cyl->sample_end.mbar; + } + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cylinder->pressure_button), set); + gtk_widget_set_sensitive(cylinder->start, set); + gtk_widget_set_sensitive(cylinder->end, set); + + convert_pressure(start, &pressure); gtk_spin_button_set_value(GTK_SPIN_BUTTON(cylinder->start), pressure); - convert_pressure(cyl->end.mbar, &pressure); + convert_pressure(end, &pressure); gtk_spin_button_set_value(GTK_SPIN_BUTTON(cylinder->end), pressure); } @@ -403,19 +415,19 @@ static void record_cylinder_changes(cylinder_t *cyl, struct cylinder_widget *cyl desc = gtk_combo_box_get_active_text(box); volume = gtk_spin_button_get_value(cylinder->size); pressure = gtk_spin_button_get_value(cylinder->pressure); - start = gtk_spin_button_get_value(GTK_SPIN_BUTTON(cylinder->start)); - end = gtk_spin_button_get_value(GTK_SPIN_BUTTON(cylinder->end)); - o2 = gtk_spin_button_get_value(GTK_SPIN_BUTTON(cylinder->o2))*10 + 0.5; - if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(cylinder->gasmix_button))) + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(cylinder->pressure_button))) { + start = gtk_spin_button_get_value(GTK_SPIN_BUTTON(cylinder->start)); + end = gtk_spin_button_get_value(GTK_SPIN_BUTTON(cylinder->end)); + } else { + start = end = 0; + } + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(cylinder->gasmix_button))) + o2 = gtk_spin_button_get_value(GTK_SPIN_BUTTON(cylinder->o2))*10 + 0.5; + else o2 = 0; fill_cylinder_info(cylinder, cyl, desc, volume, pressure, start, end, o2); } -void flush_dive_equipment_changes(struct dive *dive) -{ - /* We do nothing: we require the "Ok" button press */ -} - /* * We hardcode the most common standard cylinders, * we should pick up any other names from the dive @@ -496,6 +508,16 @@ static void nitrox_cb(GtkToggleButton *button, gpointer data) gtk_widget_set_sensitive(cylinder->o2, state); } +static void pressure_cb(GtkToggleButton *button, gpointer data) +{ + struct cylinder_widget *cylinder = data; + int state; + + state = gtk_toggle_button_get_active(button); + gtk_widget_set_sensitive(cylinder->start, state); + gtk_widget_set_sensitive(cylinder->end, state); +} + static gboolean completion_cb(GtkEntryCompletion *widget, GtkTreeModel *model, GtkTreeIter *iter, struct cylinder_widget *cylinder) { const char *desc; @@ -559,6 +581,10 @@ static void cylinder_widget(GtkWidget *vbox, struct cylinder_widget *cylinder, G hbox = gtk_hbox_new(FALSE, 3); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0); + cylinder->pressure_button = gtk_check_button_new(); + gtk_box_pack_start(GTK_BOX(hbox), cylinder->pressure_button, FALSE, FALSE, 3); + g_signal_connect(cylinder->pressure_button, "toggled", G_CALLBACK(pressure_cb), cylinder); + widget = create_spinbutton(hbox, "Start Pressure", 0, 5000, 1); cylinder->start = widget; @@ -614,6 +640,7 @@ static int edit_cylinder_dialog(int index, cylinder_t *cyl) record_cylinder_changes(cyl, &cylinder); dive->cylinder[index] = *cyl; mark_divelist_changed(TRUE); + update_cylinder_related_info(dive); flush_divelist(dive); } @@ -820,6 +847,7 @@ static GtkWidget *cylinder_list_create(void) ); cylinder_list.model = model; 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); selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_view));