We also need to actually fill the model store with the cylinder models
we have in our dive lists to begin with.
This makes it all *trivial* to add a new cylinder model: just use a new
description, fill in the size and working pressure, and you're done.
The type automatically gets filled in, unless that description already
existed (in which case we leave it alone).
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
set_cylinder_spinbuttons(g_value_get_int(&value1), g_value_get_int(&value2));
}
set_cylinder_spinbuttons(g_value_get_int(&value1), g_value_get_int(&value2));
}
+/*
+ * The gtk_tree_model_foreach() interface is bad. It could have
+ * returned whether the callback ever returned true
+ */
+static int found_match = 0;
+
static gboolean match_cylinder(GtkTreeModel *model,
GtkTreePath *path,
GtkTreeIter *iter,
static gboolean match_cylinder(GtkTreeModel *model,
GtkTreePath *path,
GtkTreeIter *iter,
if (strcmp(desc, name))
return FALSE;
gtk_combo_box_set_active_iter(cylinder_description, iter);
if (strcmp(desc, name))
return FALSE;
gtk_combo_box_set_active_iter(cylinder_description, iter);
GtkTreeModel *model = gtk_combo_box_get_model(cylinder_description);
double o2;
GtkTreeModel *model = gtk_combo_box_get_model(cylinder_description);
double o2;
- if (desc)
- gtk_tree_model_foreach(model, match_cylinder, (gpointer)desc);
+ if (!desc)
+ desc = "";
+ gtk_tree_model_foreach(model, match_cylinder, (gpointer)desc);
set_cylinder_spinbuttons(cyl->type.size.mliter, cyl->type.workingpressure.mbar);
o2 = cyl->gasmix.o2.permille / 10.0;
set_cylinder_spinbuttons(cyl->type.size.mliter, cyl->type.workingpressure.mbar);
o2 = cyl->gasmix.o2.permille / 10.0;
static void fill_cylinder_info(cylinder_t *cyl, const char *desc, double volume, double pressure, int o2)
{
int mbar, ml;
static void fill_cylinder_info(cylinder_t *cyl, const char *desc, double volume, double pressure, int o2)
{
int mbar, ml;
if (output_units.pressure == PSI)
pressure /= 14.5037738;
if (output_units.pressure == PSI)
pressure /= 14.5037738;
cyl->type.size.mliter = ml;
cyl->type.workingpressure.mbar = mbar;
cyl->gasmix.o2.permille = o2;
cyl->type.size.mliter = ml;
cyl->type.workingpressure.mbar = mbar;
cyl->gasmix.o2.permille = o2;
+
+ /*
+ * Also, insert it into the model if it doesn't already exist
+ */
+ found_match = 0;
+ model = gtk_combo_box_get_model(cylinder_description);
+ gtk_tree_model_foreach(model, match_cylinder, (gpointer)desc);
+
+ if (!found_match) {
+ GtkListStore *store = GTK_LIST_STORE(model);
+ GtkTreeIter iter;
+
+ gtk_list_store_append(store, &iter);
+ gtk_list_store_set(store, &iter,
+ 0, desc,
+ 1, ml,
+ 2, mbar,
+ -1);
+ }
}
static void record_cylinder_changes(struct dive *dive)
}
static void record_cylinder_changes(struct dive *dive)
int size; /* cuft or mliter depending on psi */
int psi; /* If zero, size is in mliter */
} tank_info[] = {
int size; /* cuft or mliter depending on psi */
int psi; /* If zero, size is in mliter */
} tank_info[] = {
{ "10.0 l", 10000 },
{ "11.1 l", 11100 },
{ "AL72", 72, 3000 },
{ "10.0 l", 10000 },
{ "11.1 l", 11100 },
{ "AL72", 72, 3000 },