static void show_cylinder(cylinder_t *cyl, struct cylinder_widget *cylinder) { const char *desc; int ml, mbar; double o2; /* Don't show uninitialized cylinder widgets */ if (!cylinder->description) return; desc = cyl->type.description; if (!desc) desc = ""; ml = cyl->type.size.mliter; mbar = cyl->type.workingpressure.mbar; add_cylinder(cylinder, desc, ml, mbar); set_cylinder_type_spinbuttons(cylinder, cyl->type.size.mliter, cyl->type.workingpressure.mbar); set_cylinder_pressure_spinbuttons(cylinder, cyl->start.mbar, cyl->end.mbar); 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); if (!o2) o2 = 21.0; gtk_spin_button_set_value(GTK_SPIN_BUTTON(cylinder->o2), o2); }
static void cylinder_cb(GtkComboBox *combo_box, gpointer data) { GtkTreeIter iter; GtkTreeModel *model = gtk_combo_box_get_model(combo_box); int ml, mbar; struct cylinder_widget *cylinder = data; struct dive *dive; cylinder_t *cyl; if (cylinder->w_idx == W_IDX_PRIMARY) dive = current_dive; else dive = &edit_dive; cyl = dive->cylinder + cylinder->index; /* Did the user set it to some non-standard value? */ if (!get_active_item(combo_box, &iter, cylinder_model)) { cylinder->changed = 1; return; } /* * We get "change" signal callbacks just because we set * the description by hand. Whatever. So ignore them if * they are no-ops. */ if (!cylinder->changed && cyl->type.description) { int same; char *desc = gtk_combo_box_get_active_text(combo_box); same = !strcmp(desc, cyl->type.description); g_free(desc); if (same) return; } cylinder->changed = 1; gtk_tree_model_get(model, &iter, CYL_SIZE, &ml, CYL_WORKP, &mbar, -1); set_cylinder_type_spinbuttons(cylinder, ml, mbar); }