]> git.street.me.uk Git - andy/viking.git/commitdiff
On selection of layers panel item, automatically ensure it is fully shown.
authorRob Norris <rw_norris@hotmail.com>
Sun, 5 Sep 2010 16:32:19 +0000 (17:32 +0100)
committerRob Norris <rw_norris@hotmail.com>
Thu, 31 Mar 2011 20:35:19 +0000 (21:35 +0100)
src/viklayerspanel.c
src/viktreeview.c
src/viktreeview.h
src/viktrwlayer.c

index 8b85c2c08674fb35d2354fdbf633f9f1e52a8c5a..3b896b3d8b69dbf9a519c89bc57f44740f1cf6b1 100644 (file)
@@ -471,7 +471,7 @@ static void layers_move_item ( VikLayersPanel *vlp, gboolean up )
   if ( ! vik_treeview_get_selected_iter ( vlp->vt, &iter ) )
     return;
 
-  vik_treeview_select_iter ( vlp->vt, &iter ); /* cancel any layer-name editing going on... */
+  vik_treeview_select_iter ( vlp->vt, &iter, FALSE ); /* cancel any layer-name editing going on... */
 
   if ( vik_treeview_item_get_type ( vlp->vt, &iter ) == VIK_TREEVIEW_TYPE_LAYER )
   {
index 0e8fc1ba6d82820cfcbcba684333baa48e888163..56b4165a39d7e54d24bd14bb8d5fedd838f4a002 100644 (file)
@@ -478,9 +478,26 @@ gboolean vik_treeview_get_iter_at_pos ( VikTreeview *vt, GtkTreeIter *iter, gint
   return TRUE;
 }
 
-void vik_treeview_select_iter ( VikTreeview *vt, GtkTreeIter *iter )
+/* Option to ensure visible */
+void vik_treeview_select_iter ( VikTreeview *vt, GtkTreeIter *iter, gboolean view_all )
 {
-  gtk_tree_selection_select_iter ( gtk_tree_view_get_selection ( GTK_TREE_VIEW ( vt ) ), iter );
+  GtkTreeView *tree_view = GTK_TREE_VIEW ( vt );
+  GtkTreePath *path;
+
+  if ( view_all ) {
+    path = gtk_tree_model_get_path ( gtk_tree_view_get_model (tree_view), iter );
+    gtk_tree_view_expand_to_path ( tree_view, path );
+  }
+
+  gtk_tree_selection_select_iter ( gtk_tree_view_get_selection ( tree_view ), iter );
+
+  if ( view_all ) {
+    gtk_tree_view_scroll_to_cell  ( tree_view,
+                                   path,
+                                   gtk_tree_view_get_expander_column (tree_view),
+                                   FALSE,
+                                   0.0, 0.0 );
+  }
 }
 
 gboolean vik_treeview_get_selected_iter ( VikTreeview *vt, GtkTreeIter *iter )
index b6a28db52b33be25c2f6cec039b70a0d3bdafd5a..01b0ec1113f4230bf9bf078311dbd03719e28d91 100644 (file)
@@ -65,7 +65,7 @@ void vik_treeview_item_set_pointer ( VikTreeview *vt, GtkTreeIter *iter, gpointe
 
 gpointer vik_treeview_item_get_parent ( VikTreeview *vt, GtkTreeIter *iter );
 
-void vik_treeview_select_iter ( VikTreeview *vt, GtkTreeIter *iter );
+void vik_treeview_select_iter ( VikTreeview *vt, GtkTreeIter *iter, gboolean view_all );
 gboolean vik_treeview_get_selected_iter ( VikTreeview *vt, GtkTreeIter *iter );
 
 void vik_treeview_item_set_name ( VikTreeview *vt, GtkTreeIter *iter, const gchar *to );
index 1598836e09d508641f724e341baa754cbb8aec7e..8938d59c73be68f4ae307bcef7b140bc90f315d5 100644 (file)
@@ -2118,7 +2118,7 @@ static void trw_layer_goto_wp ( gpointer layer_and_vlp[2] )
     {
       vik_viewport_set_center_coord ( vik_layers_panel_get_viewport(VIK_LAYERS_PANEL(layer_and_vlp[1])), &(wp->coord) );
       vik_layers_panel_emit_update ( VIK_LAYERS_PANEL(layer_and_vlp[1]) );
-      vik_treeview_select_iter ( VIK_LAYER(layer_and_vlp[0])->vt, g_hash_table_lookup ( VIK_TRW_LAYER(layer_and_vlp[0])->waypoints_iters, upname ) );
+      vik_treeview_select_iter ( VIK_LAYER(layer_and_vlp[0])->vt, g_hash_table_lookup ( VIK_TRW_LAYER(layer_and_vlp[0])->waypoints_iters, upname ), TRUE );
       break;
     }
 
@@ -2363,7 +2363,7 @@ void vik_trw_layer_add_waypoint ( VikTrwLayer *vtl, gchar *name, VikWaypoint *wp
 #endif
       // Actual setting of visibility dependent on the waypoint
       vik_treeview_item_set_visible ( VIK_LAYER(vtl)->vt, iter, wp->visible );
-      vik_treeview_select_iter ( VIK_LAYER(vtl)->vt, iter );
+      vik_treeview_select_iter ( VIK_LAYER(vtl)->vt, iter, TRUE );
       g_hash_table_insert ( vtl->waypoints_iters, name, iter );
     }
   }
@@ -2391,7 +2391,7 @@ void vik_trw_layer_add_track ( VikTrwLayer *vtl, gchar *name, VikTrack *t )
 #endif
       // Actual setting of visibility dependent on the track
       vik_treeview_item_set_visible ( VIK_LAYER(vtl)->vt, iter, t->visible );
-      vik_treeview_select_iter ( VIK_LAYER(vtl)->vt, iter );
+      vik_treeview_select_iter ( VIK_LAYER(vtl)->vt, iter, TRUE );
       g_hash_table_insert ( vtl->tracks_iters, name, iter );
     }
   }
@@ -3998,7 +3998,7 @@ static gboolean tool_edit_waypoint_click ( VikTrwLayer *vtl, GdkEventButton *eve
     vtl->current_wp_name = params.closest_wp_name;
 
     if ( params.closest_wp )
-      vik_treeview_select_iter ( VIK_LAYER(vtl)->vt, g_hash_table_lookup ( vtl->waypoints_iters, vtl->current_wp_name ) );
+      vik_treeview_select_iter ( VIK_LAYER(vtl)->vt, g_hash_table_lookup ( vtl->waypoints_iters, vtl->current_wp_name ), TRUE );
 
     /* could make it so don't update if old WP is off screen and new is null but oh well */
     vik_layer_emit_update ( VIK_LAYER(vtl) );
@@ -4347,7 +4347,7 @@ static gboolean tool_edit_trackpoint_click ( VikTrwLayer *vtl, GdkEventButton *e
   {
     vtl->current_tpl = params.closest_tpl;
     vtl->current_tp_track_name = params.closest_track_name;
-    vik_treeview_select_iter ( VIK_LAYER(vtl)->vt, g_hash_table_lookup ( vtl->tracks_iters, vtl->current_tp_track_name ) );
+    vik_treeview_select_iter ( VIK_LAYER(vtl)->vt, g_hash_table_lookup ( vtl->tracks_iters, vtl->current_tp_track_name ), TRUE );
     trw_layer_tpwin_init ( vtl );
     vik_layer_emit_update ( VIK_LAYER(vtl) );
     return TRUE;