8056: Activate drag and drop on "enclosed by" tab

This commit is contained in:
Nick Hall 2015-01-25 19:09:53 +00:00
parent 63fe1a4bd2
commit 5bdb45416f

View File

@ -35,6 +35,7 @@ from gi.repository import GLib
#-------------------------------------------------------------------------
from gramps.gen.lib import PlaceRef
from gramps.gen.errors import WindowActiveError
from ...dialog import ErrorDialog
from ...ddtargets import DdTargets
from .placerefmodel import PlaceRefModel
from .embeddedlist import EmbeddedList, TEXT_COL
@ -48,6 +49,7 @@ class PlaceRefEmbedList(EmbeddedList):
_HANDLE_COL = 4
_DND_TYPE = DdTargets.PLACEREF
_DND_EXTRA = DdTargets.PLACE_LINK
#index = column in model. Value =
# (name, sortcol in model, width, markup/text, weigth_col
@ -71,6 +73,18 @@ class PlaceRefEmbedList(EmbeddedList):
def column_order(self):
return ((1, 0), (1, 1), (1, 2), (1, 3))
def get_skip_list(self, handle):
todo = [handle]
skip = [handle]
while todo:
handle = todo.pop()
for child in self.dbstate.db.find_backlink_handles(handle,
['Place']):
if child[1] not in skip:
todo.append(child[1])
skip.append(child[1])
return skip
def add_button_clicked(self, obj):
placeref = PlaceRef()
try:
@ -98,3 +112,18 @@ class PlaceRefEmbedList(EmbeddedList):
def edit_callback(self, name):
self.rebuild()
def handle_extra_type(self, objtype, obj):
if obj in self.get_skip_list(self.handle):
ErrorDialog(_("Place cycle detected"),
_("The place you are adding is already enclosed by "
"this place"))
return
placeref = PlaceRef()
placeref.ref = obj
try:
from .. import EditPlaceRef
EditPlaceRef(self.dbstate, self.uistate, self.track,
placeref, self.handle, self.add_callback)
except WindowActiveError:
pass