]> git.tdb.fi Git - ext/subsurface.git/blobdiff - equipment.c
Replace event text with small red triangle and tooltip
[ext/subsurface.git] / equipment.c
index 54ac5e8da939347480c317e482956e5612e87d55..ba7fb6859f87ce6e821c43bfbc39fc5dca342e43 100644 (file)
@@ -22,7 +22,6 @@
 GtkListStore *cylinder_model;
 
 enum {
-       CYL_INDEX,
        CYL_DESC,
        CYL_SIZE,
        CYL_WORKP,
@@ -220,7 +219,6 @@ static int cyl_nothing(cylinder_t *cyl)
 static void set_one_cylinder(int index, cylinder_t *cyl, GtkListStore *model, GtkTreeIter *iter)
 {
        gtk_list_store_set(model, iter,
-               CYL_INDEX, index,
                CYL_DESC, cyl->type.description ? : "",
                CYL_SIZE, cyl->type.size.mliter,
                CYL_WORKP, cyl->type.workingpressure.mbar,
@@ -490,6 +488,18 @@ static int edit_cylinder_dialog(int index, cylinder_t *cyl)
        return success;
 }
 
+static int get_model_index(GtkListStore *model, GtkTreeIter *iter)
+{
+       int *p, index;
+       GtkTreePath *path;
+
+       path = gtk_tree_model_get_path(GTK_TREE_MODEL(model), iter);
+       p = gtk_tree_path_get_indices(path);
+       index = p ? *p : 0;
+       gtk_tree_path_free(path);
+       return index;
+}
+
 static void edit_cb(GtkButton *button, gpointer data)
 {
        int index;
@@ -504,7 +514,7 @@ static void edit_cb(GtkButton *button, gpointer data)
        if (!gtk_tree_selection_get_selected(selection, NULL, &iter))
                return;
 
-       gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, CYL_INDEX, &index, -1);
+       index = get_model_index(model, &iter);
        if (!edit_cylinder_dialog(index, &cyl))
                return;
 
@@ -547,7 +557,7 @@ static void del_cb(GtkButton *button, gpointer data)
        if (!gtk_tree_selection_get_selected(selection, NULL, &iter))
                return;
 
-       gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, CYL_INDEX, &index, -1);
+       index = get_model_index(model, &iter);
 
        dive = current_dive;
        if (!dive)
@@ -555,12 +565,7 @@ static void del_cb(GtkButton *button, gpointer data)
        cyl = dive->cylinder + index;
        nr = cylinder_list.max_index - index - 1;
 
-       if (gtk_list_store_remove(model, &iter)) {
-               do {
-                       gtk_list_store_set(model, &iter, CYL_INDEX, index, -1);
-                       index++;
-               } while (gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter));
-       }
+       gtk_list_store_remove(model, &iter);
 
        cylinder_list.max_index--;
        memmove(cyl, cyl+1, nr*sizeof(*cyl));
@@ -655,6 +660,14 @@ static void selection_cb(GtkTreeSelection *selection, GtkTreeModel *model)
        gtk_widget_set_sensitive(cylinder_list.del, selected);
 }
 
+static void row_activated_cb(GtkTreeView *tree_view,
+                       GtkTreePath *path,
+                       GtkTreeViewColumn *column,
+                       GtkTreeModel *model)
+{
+       edit_cb(NULL, NULL);
+}
+
 static GtkWidget *cylinder_list_create(void)
 {
        GtkWidget *tree_view;
@@ -662,7 +675,6 @@ static GtkWidget *cylinder_list_create(void)
        GtkListStore *model;
 
        model = gtk_list_store_new(CYL_COLUMNS,
-               G_TYPE_INT,             /* CYL_INDEX */
                G_TYPE_STRING,          /* CYL_DESC: utf8 */
                G_TYPE_INT,             /* CYL_SIZE: mliter */
                G_TYPE_INT,             /* CYL_WORKP: mbar */
@@ -673,12 +685,16 @@ static GtkWidget *cylinder_list_create(void)
                );
        cylinder_list.model = model;
        tree_view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(model));
+       g_signal_connect(tree_view, "row-activated", G_CALLBACK(row_activated_cb), model);
 
        selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_view));
        gtk_tree_selection_set_mode(GTK_TREE_SELECTION(selection), GTK_SELECTION_BROWSE);
        g_signal_connect(selection, "changed", G_CALLBACK(selection_cb), model);
 
-       tree_view_column(tree_view, CYL_INDEX, "Nr", NULL, PANGO_ALIGN_LEFT, TRUE);
+       g_object_set(G_OBJECT(tree_view), "headers-visible", TRUE,
+                                         "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);