summaryrefslogtreecommitdiffstats
path: root/equipment.c
diff options
context:
space:
mode:
Diffstat (limited to 'equipment.c')
-rw-r--r--equipment.c63
1 files changed, 49 insertions, 14 deletions
diff --git a/equipment.c b/equipment.c
index c7a683b89..19abbe672 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