]> git.street.me.uk Git - andy/viking.git/blobdiff - src/viktreeview.c
When manually creating a track, automatically give it a default name.
[andy/viking.git] / src / viktreeview.c
index 9eb401ddc12a9774f35bd1ee3074fd9cbe7a0b61..f04fc9e5d75ad0043231d00173017bf7f83e428f 100644 (file)
  *
  */
 
  *
  */
 
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
 #include <gtk/gtk.h>
 #include <gtk/gtk.h>
+#include <glib/gi18n.h>
+
 #include <string.h>
 
 #include "viking.h"
 #include <string.h>
 
 #include "viking.h"
@@ -59,6 +65,8 @@ struct _VikTreeview {
   GtkTreeModel *model;
 
   GdkPixbuf *layer_type_icons[VIK_LAYER_NUM_TYPES];
   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 */
 };
 
 /* 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 );
 
   /* 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 );
 
   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;
 
   GtkCellRenderer *renderer;
   GtkTreeViewColumn *column;
 
+  /* Layer column */
   renderer = gtk_cell_renderer_text_new ();
   g_signal_connect (renderer, "edited",
                    G_CALLBACK (treeview_edited_cb), vt);
   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),
   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,
                                                            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),
 
   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 ();
 
   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),
 
   col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (vt),
-                                                           -1, "Type",
+                                                           -1, "",
                                                            renderer, "pixbuf",
                                                            ICON_COLUMN,
                                                            NULL);
 
                                                            renderer, "pixbuf",
                                                            ICON_COLUMN,
                                                            NULL);
 
-
   column = gtk_tree_view_get_column (GTK_TREE_VIEW (vt), col_offset - 1);
   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_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 ();
   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),
 
   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,
                                                            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);
                                                            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_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 ) );
 
 
   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);
 }
 
   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;
 
 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 */
   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);
   gtk_tree_view_set_model ( GTK_TREE_VIEW(vt), vt->model );
   treeview_add_columns ( vt );
   g_object_unref (vt->model);
@@ -441,7 +461,7 @@ void vik_treeview_add_sublayer ( VikTreeview *vt, GtkTreeIter *parent_iter, GtkT
 void vik_treeview_sublayer_realphabetize ( VikTreeview *vt, GtkTreeIter *iter, const gchar *newname )
 {
   GtkTreeIter search_iter, parent_iter;
 void vik_treeview_sublayer_realphabetize ( VikTreeview *vt, GtkTreeIter *iter, const gchar *newname )
 {
   GtkTreeIter search_iter, parent_iter;
-  gchar *search_name;
+  gchar *search_name = NULL;
   g_assert ( iter != NULL );
 
   gtk_tree_model_iter_parent ( vt->model, &parent_iter, iter );
   g_assert ( iter != NULL );
 
   gtk_tree_model_iter_parent ( vt->model, &parent_iter, iter );
@@ -453,8 +473,12 @@ void vik_treeview_sublayer_realphabetize ( VikTreeview *vt, GtkTreeIter *iter, c
     if ( strcmp ( search_name, newname ) > 0 ) /* not >= or would trip on itself */
     {
       gtk_tree_store_move_before ( GTK_TREE_STORE(vt->model), iter, &search_iter );
     if ( strcmp ( search_name, newname ) > 0 ) /* not >= or would trip on itself */
     {
       gtk_tree_store_move_before ( GTK_TREE_STORE(vt->model), iter, &search_iter );
+      g_free (search_name);
+      search_name = NULL;
       return;
     }
       return;
     }
+    g_free (search_name);
+    search_name = NULL;
   } while ( gtk_tree_model_iter_next ( vt->model, &search_iter ) );
 
   gtk_tree_store_move_before ( GTK_TREE_STORE(vt->model), iter, NULL );
   } while ( gtk_tree_model_iter_next ( vt->model, &search_iter ) );
 
   gtk_tree_store_move_before ( GTK_TREE_STORE(vt->model), iter, NULL );
@@ -465,7 +489,7 @@ void vik_treeview_add_sublayer_alphabetized
                    gint data, GdkPixbuf *icon, gboolean has_visible, gboolean editable )
 {
   GtkTreeIter search_iter;
                    gint data, GdkPixbuf *icon, gboolean has_visible, gboolean editable )
 {
   GtkTreeIter search_iter;
-  gchar *search_name;
+  gchar *search_name = NULL;
   g_assert ( iter != NULL );
 
   if ( gtk_tree_model_iter_children ( vt->model, &search_iter, parent_iter ) )
   g_assert ( iter != NULL );
 
   if ( gtk_tree_model_iter_children ( vt->model, &search_iter, parent_iter ) )
@@ -477,8 +501,12 @@ void vik_treeview_add_sublayer_alphabetized
       {
         gtk_tree_store_insert_before ( GTK_TREE_STORE(vt->model), iter, parent_iter, &search_iter );
         found_greater_string = TRUE;
       {
         gtk_tree_store_insert_before ( GTK_TREE_STORE(vt->model), iter, parent_iter, &search_iter );
         found_greater_string = TRUE;
+        g_free (search_name);
+        search_name = NULL;
         break;
       }
         break;
       }
+      g_free (search_name);
+      search_name = NULL;
     } while ( gtk_tree_model_iter_next ( vt->model, &search_iter ) );
 
     if ( ! found_greater_string )
     } while ( gtk_tree_model_iter_next ( vt->model, &search_iter ) );
 
     if ( ! found_greater_string )
@@ -512,7 +540,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;
   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;
 
   VikTreeview *vt;
   VikLayer *vl;
 
@@ -593,7 +621,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);
 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;
 }
   g_free(s_dest);
   return FALSE;
 }