diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-09-09 08:38:48 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-09-09 10:31:51 -0700 |
commit | 9437a6512a3b353197146c077c1816f0565e0981 (patch) | |
tree | e493bbc96ea193e5727d7582cc19cfcf7fb2ad1e /cylinders.c | |
parent | 86e48bfe10d271f86c896e64350c35d59c94c331 (diff) | |
download | subsurface-9437a6512a3b353197146c077c1816f0565e0981.tar.gz |
Add a notebook for cylinder information
Ok, so it's not connected to anything yet, and the tank choices (that
don't do anything) are some random hardcoded collection, but maybe it
will do something some day.
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'cylinders.c')
-rw-r--r-- | cylinders.c | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/cylinders.c b/cylinders.c new file mode 100644 index 000000000..5df070227 --- /dev/null +++ b/cylinders.c @@ -0,0 +1,107 @@ +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <stdarg.h> +#include <time.h> + +#include "dive.h" +#include "display.h" +#include "divelist.h" + +static struct tank_info { + const char *name; + int size; /* cuft or mliter depending on psi */ + int psi; /* If zero, size is in mliter */ +} tank_info[] = { + { "None", }, + { "10.0 l", 10000 }, + { "11.1 l", 11100 }, + { "AL72", 72, 3000 }, + { "AL80", 80, 3000 }, + { "LP85", 85, 2640 }, + { "LP95", 95, 2640 }, + { "HP100", 100, 3442 }, + { "HP119", 119, 3442 }, + { NULL, } +}; + +static void fill_tank_list(GtkListStore *store) +{ + GtkTreeIter iter; + + struct tank_info *info = tank_info; + + while (info->name) { + int size = info->size; + int psi = info->psi; + int mbar = 0, ml = size; + + /* Is it in cuft and psi? */ + if (psi) { + double bar = 0.0689475729 * psi; + double airvolume = 28316.8466 * size; + double atm = bar / 1.01325; + + ml = airvolume / atm + 0.5; + mbar = bar*1000 + 0.5; + } + + gtk_list_store_append(store, &iter); + gtk_list_store_set(store, &iter, + 0, info->name, + 1, ml, + 2, mbar, + -1); + info++; + } +} + +static void cylinder_widget(GtkWidget *box, int nr, GtkListStore *model) +{ + GtkWidget *frame, *hbox, *size; + GtkCellRenderer *cell; + char buffer[80]; + + snprintf(buffer, sizeof(buffer), "Cylinder %d", nr); + frame = gtk_frame_new(buffer); + gtk_box_pack_start(GTK_BOX(box), frame, TRUE, TRUE, 0); + + hbox = gtk_hbox_new(TRUE, 3); + gtk_container_add(GTK_CONTAINER(frame), hbox); + + size = gtk_combo_box_new_with_model(GTK_TREE_MODEL(model)); + cell = gtk_cell_renderer_text_new(); + gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(size), cell, TRUE); + gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(size), cell, "text", 0, NULL ); + + gtk_box_pack_start(GTK_BOX(hbox), size, FALSE, FALSE, 0); +} + +static GtkListStore *create_tank_size_model(void) +{ + GtkListStore *model; + + model = gtk_list_store_new(3, + G_TYPE_STRING, /* Tank name */ + G_TYPE_INT, /* Tank size in mliter */ + G_TYPE_INT, /* Tank working pressure in mbar */ + -1); + + fill_tank_list(model); + return model; +} + +GtkWidget *cylinder_management_widget(void) +{ + int i; + GtkWidget *vbox; + GtkListStore *model; + + vbox = gtk_vbox_new(TRUE, 3); + + model = create_tank_size_model(); + for (i = 0; i < MAX_CYLINDERS; i++) + cylinder_widget(vbox, i, model); + + return vbox; +} |