*
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#include <gtk/gtk.h>
+#include <glib/gi18n.h>
+
#include <string.h>
#include "viking.h"
#include "config.h"
-#define VT_COL_WIDTH_NAME 160
-#define VT_COL_WIDTH_TYPE 20
-#define VT_COL_WIDTH_VISIBLE 20
-
#define TREEVIEW_GET(model,iter,what,dest) gtk_tree_model_get(GTK_TREE_MODEL(model),(iter),(what),(dest),-1)
enum {
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 */
/* 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 );
GtkCellRenderer *renderer;
GtkTreeViewColumn *column;
+ /* Layer column */
renderer = gtk_cell_renderer_text_new ();
g_signal_connect (renderer, "edited",
G_CALLBACK (treeview_edited_cb), 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,
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),
- VT_COL_WIDTH_NAME);
- 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.5, NULL);
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),
- VT_COL_WIDTH_TYPE);
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.5, NULL);
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),
- VT_COL_WIDTH_VISIBLE);
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);
}
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);
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 );
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;
}
+ 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 );
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 ) )
{
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;
}
+ g_free (search_name);
+ search_name = NULL;
} while ( gtk_tree_model_iter_next ( vt->model, &search_iter ) );
if ( ! found_greater_string )
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;
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;
}