summaryrefslogtreecommitdiffstats
path: root/equipment.c
diff options
context:
space:
mode:
authorGravatar Linus Torvalds <torvalds@linux-foundation.org>2011-11-19 11:47:04 -0800
committerGravatar Linus Torvalds <torvalds@linux-foundation.org>2011-11-19 11:47:04 -0800
commit9f500ec8dc29187a95dd6e363bae160ed68a8f40 (patch)
treeaaf49a74f10b7be79b1b0558a218e7fd84017397 /equipment.c
parent6f81b3636b57bac8c7c08b6ca28b794b14f5d11f (diff)
downloadsubsurface-9f500ec8dc29187a95dd6e363bae160ed68a8f40.tar.gz
Add the cylinder list to the dive info edit dialog
This way, when you have a new dive that you just imported from your dive computer, you can just double-click on the dive and fill out all the relevant information: location, notes, buddies and cylinder info. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'equipment.c')
-rw-r--r--equipment.c74
1 files changed, 40 insertions, 34 deletions
diff --git a/equipment.c b/equipment.c
index 4ac8e3e99..2b278934d 100644
--- a/equipment.c
+++ b/equipment.c
@@ -34,9 +34,7 @@ enum {
static struct {
int max_index;
GtkListStore *model;
- GtkWidget *tree_view;
GtkWidget *edit, *add, *del;
- GtkTreeViewColumn *desc, *size, *workp, *startp, *endp, *o2, *he;
} cylinder_list;
struct cylinder_widget {
@@ -661,7 +659,7 @@ static int get_model_index(GtkListStore *model, GtkTreeIter *iter)
return index;
}
-static void edit_cb(GtkButton *button, gpointer data)
+static void edit_cb(GtkButton *button, GtkTreeView *tree_view)
{
int index;
GtkTreeIter iter;
@@ -669,7 +667,7 @@ static void edit_cb(GtkButton *button, gpointer data)
GtkTreeSelection *selection;
cylinder_t cyl;
- selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(cylinder_list.tree_view));
+ selection = gtk_tree_view_get_selection(tree_view);
/* Nothing selected? This shouldn't happen, since the button should be inactive */
if (!gtk_tree_selection_get_selected(selection, NULL, &iter))
@@ -683,7 +681,7 @@ static void edit_cb(GtkButton *button, gpointer data)
repaint_dive();
}
-static void add_cb(GtkButton *button, gpointer data)
+static void add_cb(GtkButton *button, GtkTreeView *tree_view)
{
int index = cylinder_list.max_index;
GtkTreeIter iter;
@@ -697,14 +695,14 @@ static void add_cb(GtkButton *button, gpointer data)
gtk_list_store_append(model, &iter);
set_one_cylinder(index, &cyl, model, &iter);
- selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(cylinder_list.tree_view));
+ selection = gtk_tree_view_get_selection(tree_view);
gtk_tree_selection_select_iter(selection, &iter);
cylinder_list.max_index++;
gtk_widget_set_sensitive(cylinder_list.add, cylinder_list.max_index < MAX_CYLINDERS);
}
-static void del_cb(GtkButton *button, gpointer data)
+static void del_cb(GtkButton *button, GtkTreeView *tree_view)
{
int index, nr;
GtkTreeIter iter;
@@ -713,7 +711,7 @@ static void del_cb(GtkButton *button, gpointer data)
struct dive *dive;
cylinder_t *cyl;
- selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(cylinder_list.tree_view));
+ selection = gtk_tree_view_get_selection(tree_view);
/* Nothing selected? This shouldn't happen, since the button should be inactive */
if (!gtk_tree_selection_get_selected(selection, NULL, &iter))
@@ -827,27 +825,18 @@ static void row_activated_cb(GtkTreeView *tree_view,
GtkTreeViewColumn *column,
GtkTreeModel *model)
{
- edit_cb(NULL, NULL);
+ edit_cb(NULL, tree_view);
}
-static GtkWidget *cylinder_list_create(void)
+GtkWidget *cylinder_list_widget(void)
{
+ GtkListStore *model = cylinder_list.model;
GtkWidget *tree_view;
GtkTreeSelection *selection;
- GtkListStore *model;
- model = gtk_list_store_new(CYL_COLUMNS,
- G_TYPE_STRING, /* CYL_DESC: utf8 */
- G_TYPE_INT, /* CYL_SIZE: mliter */
- G_TYPE_INT, /* CYL_WORKP: mbar */
- G_TYPE_INT, /* CYL_STARTP: mbar */
- G_TYPE_INT, /* CYL_ENDP: mbar */
- G_TYPE_INT, /* CYL_O2: permille */
- G_TYPE_INT /* CYL_HE: permille */
- );
- cylinder_list.model = model;
tree_view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(model));
gtk_widget_set_can_focus(tree_view, FALSE);
+
g_signal_connect(tree_view, "row-activated", G_CALLBACK(row_activated_cb), model);
selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_view));
@@ -858,19 +847,36 @@ static GtkWidget *cylinder_list_create(void)
"enable-grid-lines", GTK_TREE_VIEW_GRID_LINES_BOTH,
NULL);
- cylinder_list.desc = tree_view_column(tree_view, CYL_DESC, "Type", NULL, PANGO_ALIGN_LEFT, TRUE);
- cylinder_list.size = tree_view_column(tree_view, CYL_SIZE, "Size", size_data_func, PANGO_ALIGN_RIGHT, TRUE);
- cylinder_list.workp = tree_view_column(tree_view, CYL_WORKP, "MaxPress", pressure_data_func, PANGO_ALIGN_RIGHT, TRUE);
- cylinder_list.startp = tree_view_column(tree_view, CYL_STARTP, "Start", pressure_data_func, PANGO_ALIGN_RIGHT, TRUE);
- cylinder_list.endp = tree_view_column(tree_view, CYL_ENDP, "End", pressure_data_func, PANGO_ALIGN_RIGHT, TRUE);
- cylinder_list.o2 = tree_view_column(tree_view, CYL_O2, "O" UTF8_SUBSCRIPT_2 "%", percentage_data_func, PANGO_ALIGN_RIGHT, TRUE);
- cylinder_list.he = tree_view_column(tree_view, CYL_HE, "He%", percentage_data_func, PANGO_ALIGN_RIGHT, TRUE);
+ tree_view_column(tree_view, CYL_DESC, "Type", NULL, PANGO_ALIGN_LEFT, TRUE);
+ tree_view_column(tree_view, CYL_SIZE, "Size", size_data_func, PANGO_ALIGN_RIGHT, TRUE);
+ tree_view_column(tree_view, CYL_WORKP, "MaxPress", pressure_data_func, PANGO_ALIGN_RIGHT, TRUE);
+ tree_view_column(tree_view, CYL_STARTP, "Start", pressure_data_func, PANGO_ALIGN_RIGHT, TRUE);
+ tree_view_column(tree_view, CYL_ENDP, "End", pressure_data_func, PANGO_ALIGN_RIGHT, TRUE);
+ tree_view_column(tree_view, CYL_O2, "O" UTF8_SUBSCRIPT_2 "%", percentage_data_func, PANGO_ALIGN_RIGHT, TRUE);
+ tree_view_column(tree_view, CYL_HE, "He%", percentage_data_func, PANGO_ALIGN_RIGHT, TRUE);
return tree_view;
}
+static GtkWidget *cylinder_list_create(void)
+{
+ GtkListStore *model;
+
+ model = gtk_list_store_new(CYL_COLUMNS,
+ G_TYPE_STRING, /* CYL_DESC: utf8 */
+ G_TYPE_INT, /* CYL_SIZE: mliter */
+ G_TYPE_INT, /* CYL_WORKP: mbar */
+ G_TYPE_INT, /* CYL_STARTP: mbar */
+ G_TYPE_INT, /* CYL_ENDP: mbar */
+ G_TYPE_INT, /* CYL_O2: permille */
+ G_TYPE_INT /* CYL_HE: permille */
+ );
+ cylinder_list.model = model;
+ return cylinder_list_widget();
+}
+
GtkWidget *equipment_widget(void)
{
- GtkWidget *vbox, *hbox, *frame, *framebox;
+ GtkWidget *vbox, *hbox, *frame, *framebox, *tree_view;
GtkWidget *add, *del, *edit;
vbox = gtk_vbox_new(FALSE, 3);
@@ -884,7 +890,7 @@ GtkWidget *equipment_widget(void)
*/
cylinder_model = create_tank_size_model();
- cylinder_list.tree_view = cylinder_list_create();
+ tree_view = cylinder_list_create();
hbox = gtk_hbox_new(FALSE, 3);
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 3);
@@ -898,7 +904,7 @@ GtkWidget *equipment_widget(void)
hbox = gtk_hbox_new(FALSE, 3);
gtk_box_pack_start(GTK_BOX(framebox), hbox, TRUE, FALSE, 3);
- gtk_box_pack_start(GTK_BOX(hbox), cylinder_list.tree_view, TRUE, FALSE, 3);
+ gtk_box_pack_start(GTK_BOX(hbox), tree_view, TRUE, FALSE, 3);
hbox = gtk_hbox_new(TRUE, 3);
gtk_box_pack_start(GTK_BOX(framebox), hbox, TRUE, FALSE, 3);
@@ -914,9 +920,9 @@ GtkWidget *equipment_widget(void)
cylinder_list.add = add;
cylinder_list.del = del;
- g_signal_connect(edit, "clicked", G_CALLBACK(edit_cb), NULL);
- g_signal_connect(add, "clicked", G_CALLBACK(add_cb), NULL);
- g_signal_connect(del, "clicked", G_CALLBACK(del_cb), NULL);
+ g_signal_connect(edit, "clicked", G_CALLBACK(edit_cb), tree_view);
+ g_signal_connect(add, "clicked", G_CALLBACK(add_cb), tree_view);
+ g_signal_connect(del, "clicked", G_CALLBACK(del_cb), tree_view);
return vbox;
}