mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-28 05:00:20 +00:00
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>
This commit is contained in:
parent
1fe687a16c
commit
d1b30212ff
1 changed files with 58 additions and 28 deletions
86
equipment.c
86
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) {
|
||||
|
|
Loading…
Reference in a new issue