GtkListStore *cylinder_model;
enum {
- CYL_INDEX,
CYL_DESC,
CYL_SIZE,
CYL_WORKP,
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,
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;
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;
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)
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));
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;
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 */
);
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);