]> git.street.me.uk Git - andy/viking.git/blobdiff - src/viktreeview.c
Clicking on "vivisble" tick of a layer no longer makes the layer selected.
[andy/viking.git] / src / viktreeview.c
index 9eb401ddc12a9774f35bd1ee3074fd9cbe7a0b61..7c43a233837ca05a067f339e06d29cdb9e913ce0 100644 (file)
  *
  */
 
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
 #include <gtk/gtk.h>
+#include <glib/gi18n.h>
+
 #include <string.h>
 
 #include "viking.h"
@@ -59,6 +65,8 @@ struct _VikTreeview {
   GtkTreeModel *model;
 
   GdkPixbuf *layer_type_icons[VIK_LAYER_NUM_TYPES];
+
+  gboolean was_a_toggle;
 };
 
 /* TODO: find, make "static" and put up here all non-"a_" functions */
@@ -129,6 +137,7 @@ static void treeview_toggled_cb (GtkCellRendererToggle *cell, gchar *path_str, V
 
   /* get type and data */
   vik_treeview_get_iter_from_path_str ( vt, &iter, path_str );
+  vt->was_a_toggle = TRUE;
 
   g_signal_emit ( G_OBJECT(vt), 
 treeview_signals[VT_ITEM_TOGGLED_SIGNAL], 0, &iter );
@@ -183,6 +192,7 @@ static void treeview_add_columns ( VikTreeview *vt )
   GtkCellRenderer *renderer;
   GtkTreeViewColumn *column;
 
+  /* Layer column */
   renderer = gtk_cell_renderer_text_new ();
   g_signal_connect (renderer, "edited",
                    G_CALLBACK (treeview_edited_cb), vt);
@@ -190,7 +200,7 @@ static void treeview_add_columns ( VikTreeview *vt )
   g_object_set (G_OBJECT (renderer), "xalign", 0.0, NULL);
 
   col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (vt),
-                                                           -1, "Layer Name",
+                                                           -1, _("Layer Name"),
                                                            renderer, "text",
                                                            NAME_COLUMN,
                                                            "editable", EDITABLE_COLUMN,
@@ -198,36 +208,32 @@ static void treeview_add_columns ( VikTreeview *vt )
 
   column = gtk_tree_view_get_column (GTK_TREE_VIEW (vt), col_offset - 1);
   gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column),
-                                  GTK_TREE_VIEW_COLUMN_FIXED);
-  gtk_tree_view_column_set_fixed_width (GTK_TREE_VIEW_COLUMN (column), 100);
-  gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
-  gtk_tree_view_column_set_resizable (GTK_TREE_VIEW_COLUMN (column), TRUE);
+                                   GTK_TREE_VIEW_COLUMN_AUTOSIZE);
+  gtk_tree_view_column_set_expand (GTK_TREE_VIEW_COLUMN (column), TRUE);
 
+  /* Layer type */
   renderer = gtk_cell_renderer_pixbuf_new ();
 
-  g_object_set (G_OBJECT (renderer), "xalign", 0.0, NULL);
+  g_object_set (G_OBJECT (renderer), "xalign", 0.5, NULL);
 
   col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (vt),
-                                                           -1, "Type",
+                                                           -1, "",
                                                            renderer, "pixbuf",
                                                            ICON_COLUMN,
                                                            NULL);
 
-
   column = gtk_tree_view_get_column (GTK_TREE_VIEW (vt), col_offset - 1);
-  gtk_tree_view_column_set_fixed_width (GTK_TREE_VIEW_COLUMN (column), 33);
   gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column),
-                                  GTK_TREE_VIEW_COLUMN_FIXED);
-  gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
-
+                                   GTK_TREE_VIEW_COLUMN_AUTOSIZE);
 
+  /* Layer visible */
   renderer = gtk_cell_renderer_toggle_new ();
-  g_object_set (G_OBJECT (renderer), "xalign", 0.0, NULL);
+  g_object_set (G_OBJECT (renderer), "xalign", 0.5, NULL);
 
   g_signal_connect (renderer, "toggled", G_CALLBACK (treeview_toggled_cb), vt);
 
   col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (vt),
-                                                           -1, "Visible",
+                                                           -1, "",
                                                            renderer,
                                                            "active",
                                                            VISIBLE_COLUMN,
@@ -238,10 +244,8 @@ static void treeview_add_columns ( VikTreeview *vt )
                                                            NULL);
 
   column = gtk_tree_view_get_column (GTK_TREE_VIEW (vt), col_offset - 1);
-  gtk_tree_view_column_set_fixed_width (GTK_TREE_VIEW_COLUMN (column), 40);
   gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column),
-                                  GTK_TREE_VIEW_COLUMN_FIXED);
-  gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
+                                   GTK_TREE_VIEW_COLUMN_AUTOSIZE);
 
 }
 
@@ -265,17 +269,33 @@ static void select_cb(GtkTreeSelection *selection, gpointer data)
 
   vl = VIK_LAYER( vik_treeview_item_get_pointer ( vt, &iter ) );
 
-  vw = VIK_GTK_WINDOW_FROM_LAYER(vl);
+  vw = VIK_WINDOW(VIK_GTK_WINDOW_FROM_LAYER(vl));
   vik_window_selected_layer(vw, vl);
 }
 
+static gboolean treeview_selection_filter(GtkTreeSelection *selection, GtkTreeModel *model, GtkTreePath *path, gboolean path_currently_selected, gpointer data)
+{
+  VikTreeview *vt = data;
+
+  if (vt->was_a_toggle) {
+    vt->was_a_toggle = FALSE;
+    return FALSE;
+  }
+
+  return TRUE;
+}
+
 void treeview_init ( VikTreeview *vt )
 {
   guint16 i;
 
+  vt->was_a_toggle = FALSE;
+
   vt->model = GTK_TREE_MODEL(gtk_tree_store_new ( NUM_COLUMNS, G_TYPE_STRING, G_TYPE_BOOLEAN, GDK_TYPE_PIXBUF, G_TYPE_INT, G_TYPE_POINTER, G_TYPE_POINTER, G_TYPE_INT, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN ));
 
   /* create tree view */
+  gtk_tree_selection_set_select_function(gtk_tree_view_get_selection (GTK_TREE_VIEW(vt)), treeview_selection_filter, vt, NULL);
+
   gtk_tree_view_set_model ( GTK_TREE_VIEW(vt), vt->model );
   treeview_add_columns ( vt );
   g_object_unref (vt->model);
@@ -512,7 +532,7 @@ static gboolean treeview_drag_data_received (GtkTreeDragDest *drag_dest, GtkTree
   GtkTreePath *src_path = NULL, *dest_cp = NULL;
   gboolean retval = FALSE;
   GtkTreeIter src_iter, root_iter, dest_iter, dest_parent;
-  guint *i_src = NULL;
+  gint *i_src = NULL;
   VikTreeview *vt;
   VikLayer *vl;
 
@@ -593,7 +613,7 @@ static gboolean treeview_drag_data_received (GtkTreeDragDest *drag_dest, GtkTree
 static gboolean treeview_drag_data_delete ( GtkTreeDragSource *drag_source, GtkTreePath *path )
 {
   gchar *s_dest = gtk_tree_path_to_string(path);
-  g_print("delete data from %s\n", s_dest);
+  g_print(_("delete data from %s\n"), s_dest);
   g_free(s_dest);
   return FALSE;
 }