[pygtk] Re: TreeView reorderable

Jeffrey Barish jeff_barish at earthlink.net
Wed Jul 9 23:26:30 WST 2008


Seltzer wrote:

> Hi,
>   I have a tree view which contains a list of media items to be played,
>   and
> some information about them.
> I would like to be able to let the user re-order this list, but if i just
> use "set_reorderable(True)" than they can actually
> drop one item onto another, and make the dropped item the child of the
> item
> it was dropped onto.  I need to disable this some how, so that you can
> reorder the list, but not not drop one item into the other, just re
> arrange them.
> I am also restricted by pygtk version 2.4
> 
> thanks for the help,
> felix.

You can define a drag_motion handler in which you detect drop position with
INTO (i.e., TREE_VIEW_DROP_INTO_OR_{AFTER,BEFORE}) and then invalidate the
position by calling the enable_model_drag_dest method with a bogus target.

    def on_drag_motion(self, treeview, drag_context, x, y, timestamp):
        dest_row = treeview.get_dest_row_at_pos(int(x), int(y))
        if dest_row is not None:
            path, drop = dest_row
            if drop in (gtk.TREE_VIEW_DROP_INTO_OR_AFTER,
                    gtk.TREE_VIEW_DROP_INTO_OR_BEFORE):
                self.view['queue_treeview'].enable_model_drag_dest(
                        [('invalid-position', 0, -1)],
                        gtk.gdk.ACTION_DEFAULT)
            else:
                {enable model drag dest with valid target}

-- 
Jeffrey Barish



More information about the pygtk mailing list