X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=equipment.c;h=19abbe67294c7c6fea26f9b708c7bf3a95a761fe;hb=2b0f30c3d4773d4e78daf7e2ce76f5c3f3a2d0b3;hp=c7a683b898a9a391547219bda9c1bba717f4e921;hpb=55352a051cfa7ac519e397cd3d18851e5050517b;p=ext%2Fsubsurface.git diff --git a/equipment.c b/equipment.c index c7a683b..19abbe6 100644 --- a/equipment.c +++ b/equipment.c @@ -45,7 +45,8 @@ struct cylinder_widget { const char *name; GtkWidget *hbox; GtkComboBox *description; - GtkSpinButton *size, *pressure, *start, *end; + GtkSpinButton *size, *pressure; + GtkWidget *start, *end, *pressure_button; GtkWidget *o2, *gasmix_button; }; @@ -71,12 +72,12 @@ static int convert_volume_pressure(int ml, int mbar, double *v, double *p) int decimals = 1; double volume, pressure; + volume = ml / 1000.0; if (mbar) { if (output_units.volume == CUFT) { volume = ml_to_cuft(ml); volume *= bar_to_atm(mbar / 1000.0); - } else - volume = ml / 1000.0; + } if (output_units.pressure == PSI) { pressure = mbar_to_PSI(mbar); @@ -98,14 +99,27 @@ static void set_cylinder_type_spinbuttons(struct cylinder_widget *cylinder, int gtk_spin_button_set_value(cylinder->pressure, pressure); } -static void set_cylinder_pressure_spinbuttons(struct cylinder_widget *cylinder, int start, int end) +static void set_cylinder_pressure_spinbuttons(struct cylinder_widget *cylinder, cylinder_t *cyl) { + int set; + unsigned int start, end; double 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(cylinder->start, pressure); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(cylinder->start), pressure); convert_pressure(end, &pressure); - gtk_spin_button_set_value(cylinder->end, pressure); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(cylinder->end), pressure); } /* @@ -266,8 +280,7 @@ static void show_cylinder(cylinder_t *cyl, struct cylinder_widget *cylinder) set_cylinder_type_spinbuttons(cylinder, cyl->type.size.mliter, cyl->type.workingpressure.mbar); - set_cylinder_pressure_spinbuttons(cylinder, - cyl->start.mbar, cyl->end.mbar); + set_cylinder_pressure_spinbuttons(cylinder, cyl); o2 = cyl->gasmix.o2.permille / 10.0; gtk_widget_set_sensitive(cylinder->o2, !!o2); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cylinder->gasmix_button), !!o2); @@ -283,18 +296,24 @@ static int cyl_nothing(cylinder_t *cyl) !cyl->type.description && !cyl->gasmix.o2.permille && !cyl->gasmix.he.permille && + !cyl->sample_start.mbar && + !cyl->sample_end.mbar && !cyl->start.mbar && !cyl->end.mbar; } static void set_one_cylinder(int index, cylinder_t *cyl, GtkListStore *model, GtkTreeIter *iter) { + unsigned int start, end; + + start = cyl->start.mbar ? : cyl->sample_start.mbar; + end = cyl->end.mbar ? : cyl->sample_end.mbar; gtk_list_store_set(model, iter, CYL_DESC, cyl->type.description ? : "", CYL_SIZE, cyl->type.size.mliter, CYL_WORKP, cyl->type.workingpressure.mbar, - CYL_STARTP, cyl->start.mbar, - CYL_ENDP, cyl->end.mbar, + CYL_STARTP, start, + CYL_ENDP, end, CYL_O2, cyl->gasmix.o2.permille, CYL_HE, cyl->gasmix.he.permille, -1); @@ -397,8 +416,10 @@ 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(cylinder->start); - end = gtk_spin_button_get_value(cylinder->end); + start = gtk_spin_button_get_value(GTK_SPIN_BUTTON(cylinder->start)); + end = gtk_spin_button_get_value(GTK_SPIN_BUTTON(cylinder->end)); + if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(cylinder->pressure_button))) + start = end = 0; 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))) o2 = 0; @@ -490,6 +511,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; @@ -553,11 +584,15 @@ 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 = GTK_SPIN_BUTTON(widget); + cylinder->start = widget; widget = create_spinbutton(hbox, "End Pressure", 0, 5000, 1); - cylinder->end = GTK_SPIN_BUTTON(widget); + cylinder->end = widget; /* * Cylinder gas mix: Air, Nitrox or Trimix