[Fwd: Re: GtkTreeView and scroll bar]
- From: Javier Fernandez <jfernandez igalia com>
- To: gtk-app-devel <gtk-app-devel-list gnome org>
- Subject: [Fwd: Re: GtkTreeView and scroll bar]
- Date: Thu, 01 Apr 2004 11:32:03 +0200
--
Javier Fernandez <jfernandez igalia com>
Igalia
--- Begin Message ---
- From: Javier Fernandez <jfernandez igalia com>
- To: Federico Mena Quintero <federico ximian com>
- Subject: Re: GtkTreeView and scroll bar
- Date: Tue, 23 Mar 2004 09:17:55 +0100
El vie, 19-03-2004 a las 20:27, Federico Mena Quintero escribiÃ:
Hi, Federico
Tkanks for your attention.
If you use a GtkListStore or GtkTreeStore as your data model, you may be
able to just use gtk_tree_view_enable_model_drag_source() and
gtk_tree_view_enable_model_drag_dest() to enable automatic
drag-and-drop. You may also need to do this:
I have define a widget that is subclass of GtkTreeView.
The instance_init method of this class, initialize drag&drop functions :
static void
_f_widget_article_management_tree_view_init(FWidgetArticleManagementTreeView *f_tree,
FWidgetArticleManagementTreeViewClass *klass)
{
GtkTreeView *treeview = GTK_TREE_VIEW(f_tree);
GtkTreeSelection *select;
f_tree->num_columns = 0;
f_tree->column_ids = NULL;
/* Enable drag and drop */
gtk_tree_view_enable_model_drag_source (treeview,
GDK_BUTTON1_MASK,
row_targets,
G_N_ELEMENTS (row_targets),
GDK_ACTION_MOVE);
gtk_tree_view_enable_model_drag_dest (treeview,
row_targets,
G_N_ELEMENTS (row_targets),
GDK_ACTION_MOVE);
1. Create a derived class from GtkListStore or GtkTreeStore
I've create a FWidgetArticleManagementTreeViewModel class, that is
a subclass of GtkTreeStore.
GType f_widget_article_management_tree_view_model_get_type(void)
{
static GType type = 0;
if (type == 0){
static const GTypeInfo info = {
sizeof (FWidgetArticleManagementTreeViewModelClass),
NULL, /* base_init */
NULL, /* base_finalize */
(GClassInitFunc) _f_widget_article_management_tree_view_model_class_init,
NULL, /* class_finalize */
NULL, /* class_data */
sizeof (FWidgetArticleManagementTreeViewModel),
16, /* n_preallocs */
(GInstanceInitFunc) _f_widget_article_management_tree_view_model_init,
NULL
};
static const GInterfaceInfo drag_source_info = {
(GInterfaceInitFunc) _f_widget_article_management_tree_view_model_drag_source_init,
NULL,
NULL
};
static const GInterfaceInfo drag_dest_info = {
(GInterfaceInitFunc) _f_widget_article_management_tree_view_model_drag_dest_init,
NULL,
NULL
};
type = g_type_register_static (GTK_TYPE_TREE_STORE,
"FWidgetArticleManagementTreeViewModel",
&info,
(GTypeFlags) 0);
g_type_add_interface_static (type,
GTK_TYPE_TREE_DRAG_SOURCE,
&drag_source_info);
g_type_add_interface_static (type,
GTK_TYPE_TREE_DRAG_DEST,
&drag_dest_info);
}
else type = g_type_from_name ("FWidgetArticleManagementTreeViewModel");
return type;
}
2. Create your own custom implementations of GtkTreeDragSourceIface or
GtkTreeDragDestIface, overriding the default ones.
I,ve overriding this methods :
static void
_f_widget_article_management_tree_view_model_drag_source_init (GtkTreeDragSourceIface *iface)
{
iface->drag_data_get = _f_widget_article_management_tree_view_model_drag_data_get;
iface->drag_data_delete = _f_widget_article_management_tree_view_model_drag_data_delete;
}
static void
_f_widget_article_management_tree_view_model_drag_dest_init (GtkTreeDragDestIface *iface)
{
iface->drag_data_received = _f_widget_article_management_tree_view_model_drag_data_received;
iface->row_drop_possible = _f_widget_article_management_tree_view_model_row_drop_possible;
}
If you use gtk_tree_view_enable_model_drag_dest(), then the tree will be
scrolled automatically when you drag over it.
I thought that, but my treeview does not change scroll bar on drag&drop
operations.
If this doesn't fit your needs, you have to handle the GtkWidget
drag-and-drop signals yourself. GtkTreeView has some helper functions
that you can use to figure out the destination row and such; see
gtk_tree_view_get_dest_row_at_pos(), for example. Scrolling by hand is
more complicated; you should look at the GtkTreeView sources to see how
it's done.
Triying to solve this, i've connect
g_signal_connect (sections_widget,
"drag_motion",
G_CALLBACK
(_f_warehouse_controller_article_management_on_drag_motion),
controller);
This function try tu move the scroll bar when drag_motion signal has
been emited. I use
gtk_tree_view_scroll_to_point(treeview, 5, -1);
however the sroll bar does not move.
I don't know how is the problem. The drag&drop operations were performed
fine. The only problem is the scroll bar.
Have you got an idea what's may be the problem ?
Thanks.
--
Javier Fernandez <jfernandez igalia com>
Igalia
--- End Message ---
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]