Fix drag_info in citationtreeview, so that it doesn't break merge citation. Also add some comments about drag and drop.

svn: r18443
This commit is contained in:
Tim G L Lyons 2011-11-14 23:57:08 +00:00
parent 7ebf8de20a
commit 4ad5681ee3
2 changed files with 22 additions and 10 deletions

View File

@ -142,6 +142,15 @@ def obj2target(target):
}
return d[target] if target in d else None
# FIXME: CITATION: Dropping a citation onto an embedded tab should open
# CitationEdit. However, note should behave similarly, and although there is
# code to call EditNote, EditNote does not appear to be called. I don't
# understand how to get the editor called.
# FIXME: CITATION: It should be possible to drop a source onto an embedded tab,
# with CitationEdit being opened, However, It is not possible to do the drop,
# and as described above I do not understand how to get the editor called.
def model_contains(model, data):
"""
Returns True if data is a row in model.

View File

@ -196,18 +196,21 @@ class CitationTreeView(ListView):
return self.dbstate.db.get_citation_bookmarks()
def drag_info(self):
# Since drag only needs to work when just one row is selected, ideally,
# this should just return SOURCE_LINK if one source is selected and
# CITATION_LINK if one citation is selected, and probably None
# otherwise. However, this doesn't work. Drag and drop failed to work at
# all for citationtree view, and I think this was because None is
# returned during initialisation. There is also a problem where it seems
# at some point during a citation merge, neither a Source nor a Citation
# is selected. Hence the simplistic solution implemented below, where
# CITATION_LINK is always returned except when it is obviously correct
# to return SOURCE_LINK.
selection = self.selected_handles()
if len(selection) == 1:
handle = selection[0]
# The handle will either be a Source handle or a Citation handle
source = self.dbstate.db.get_source_from_handle(handle)
citation = self.dbstate.db.get_citation_from_handle(handle)
if (not source and not citation) or (source and citation):
raise ValueError("selection must be either source or citation")
if source:
if len(selection) == 1 and \
self.dbstate.db.get_source_from_handle(selection[0]):
return DdTargets.SOURCE_LINK
else:
return DdTargets.CITATION_LINK
else:
return DdTargets.CITATION_LINK