Implement drag and drop between two TreeViews
- From: Christopher Backhouse <cjbackhouse gmail com>
- To: gtk-app-devel-list gnome org
- Subject: Implement drag and drop between two TreeViews
- Date: Tue, 17 Oct 2006 15:42:35 +0100
Hi
I have two Treeviews (just lists, they use Liststore) and I want to be
able to drag entries from one into the other. What is the correct way to
do this?
I call enable_model_drag_source on one list and enable_model_drag_dest
on the other - the gui behaves as if drag-and-drop will work and then
doesn't actually do it. Fair enough, I wasn't expecting it to be that
easy. So, I hook up to some of the more likely-looking signals and hack
this together
def on_drag_data_recieved(self,widget,context,x,y,selection,myno,dunno):
(junk,paths)=context.get_source_widget().get_selection().get_selected_rows()
(path,)=paths[0]
it=self.list1.store.get_iter_from_string(repr(path))
title=self.list1.store.get_value(it,1)
where=widget.get_dest_row_at_pos(x,y)
if where!=None:
((row,),pos)=where
else:
row=0
it=self.list2.store.insert(row+1)
self.list2.store.set(it,1,title)
I am aware that there are lots of things wrong with this:
- it doesn't check where the drag is coming from
- I have to specialcase the empty list
- it ignores 'pos' so things don't always drop exactly where you expect
- it doesn't make any attempt at handling the multiselection case
- it breaks the ability of the list to be reordered (just setting it
reorderable in glade used to work, now it doesn't)
- this method would never work between applications (not that I want it to)
With a little more code I could probably fix all these things but it is
fairly obvious that this isn't the right way to do it. So how is it
supposed to be done? - I would expect that gtk can handle all the
dropping it in the correct place stuff itself, shouldn't I just have to
handle translating what was in one list into the form the other list needs?
Sorry this question ended up being so long - Chris
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]