aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Linus Torvalds <torvalds@linux-foundation.org>2011-09-10 17:14:07 -0700
committerGravatar Linus Torvalds <torvalds@linux-foundation.org>2011-09-10 17:14:07 -0700
commitd1b30212ff7192ef1b3fa85924433a8ddd92c281 (patch)
tree2fb55c3b77eea11585876d939f7ce64808d34713
parent1fe687a16c52699727f5197fbea4c7b0899905cf (diff)
downloadsubsurface-d1b30212ff7192ef1b3fa85924433a8ddd92c281.tar.gz
Add more static cylinder types - and pick them up from the dive log
This adds a few more predefined cylinder types to the static list, but perhaps more importantly, if we try to show a cylinder description that we haven't seen before, we automatically add that description to the list as well. This way, if people have their own cylinder types, our cylinder management will automatically figure them out and make it easy to enter them. NOTE! It might be best to add the new cylinder description at dive log load time, rather than at 'show' time. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--equipment.c86
1 files changed, 58 insertions, 28 deletions
diff --git a/equipment.c b/equipment.c
index a84dde331..bab0d5335 100644
--- a/equipment.c
+++ b/equipment.c
@@ -91,16 +91,41 @@ static gboolean match_cylinder(GtkTreeModel *model,
return TRUE;
}
+static void add_cylinder(const char *desc, int ml, int mbar)
+{
+ GtkTreeModel *model;
+
+ 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);
+ gtk_combo_box_set_active_iter(cylinder_description, &iter);
+ }
+}
+
void show_dive_equipment(struct dive *dive)
{
cylinder_t *cyl = &dive->cylinder[0];
const char *desc = cyl->type.description;
- GtkTreeModel *model = gtk_combo_box_get_model(cylinder_description);
+ int ml, mbar;
double o2;
if (!desc)
desc = "";
- gtk_tree_model_foreach(model, match_cylinder, (gpointer)desc);
+
+ ml = cyl->type.size.mliter;
+ mbar = cyl->type.workingpressure.mbar;
+ add_cylinder(desc, ml, mbar);
set_cylinder_spinbuttons(cyl->type.size.mliter, cyl->type.workingpressure.mbar);
o2 = cyl->gasmix.o2.permille / 10.0;
@@ -127,7 +152,6 @@ static GtkWidget *create_spinbutton(GtkWidget *vbox, const char *name, double mi
static void fill_cylinder_info(cylinder_t *cyl, const char *desc, double volume, double pressure, int o2)
{
int mbar, ml;
- GtkTreeModel *model;
if (output_units.pressure == PSI)
pressure /= 14.5037738;
@@ -150,21 +174,7 @@ static void fill_cylinder_info(cylinder_t *cyl, const char *desc, double volume,
/*
* 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);
- }
+ add_cylinder(desc, ml, mbar);
}
static void record_cylinder_changes(struct dive *dive)
@@ -186,30 +196,50 @@ void flush_dive_equipment_changes(struct dive *dive)
record_cylinder_changes(dive);
}
-/* We should take these from the dive list instead */
+/*
+ * We hardcode the most common standard cylinders,
+ * we should pick up any other names from the dive
+ * logs directly.
+ */
static struct tank_info {
const char *name;
- int size; /* cuft or mliter depending on psi */
+ int size; /* cuft if < 1000, otherwise mliter */
int psi; /* If zero, size is in mliter */
-} tank_info[] = {
+} tank_info[100] = {
+ /* Need an empty entry for the no-cylinder case */
{ "", 0, 0 },
+
+ /* Size-only metric cylinders */
{ "10.0 l", 10000 },
{ "11.1 l", 11100 },
- { "AL72", 72, 3000 },
- { "AL80", 80, 3000 },
- { "LP85", 85, 2400 },
- { "LP95", 95, 2400 },
- { "LP85+", 85, 2640 },
- { "LP95+", 95, 2640 },
+
+ /* Most common AL cylinders */
+ { "AL50", 50, 3000 },
+ { "AL63", 63, 3000 },
+ { "AL72", 72, 3000 },
+ { "AL80", 80, 3000 },
+ { "AL100", 100, 3300 },
+
+ /* Somewhat common LP steel cylinders */
+ { "LP85", 85, 2640 },
+ { "LP95", 95, 2640 },
+ { "LP108", 108, 2640 },
+ { "LP121", 121, 2640 },
+
+ /* Somewhat common HP steel cylinders */
+ { "HP65", 65, 3442 },
+ { "HP80", 80, 3442 },
{ "HP100", 100, 3442 },
{ "HP119", 119, 3442 },
+ { "HP130", 130, 3442 },
+
+ /* We'll fill in more from the dive log dynamically */
{ NULL, }
};
static void fill_tank_list(GtkListStore *store)
{
GtkTreeIter iter;
-
struct tank_info *info = tank_info;
while (info->name) {