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.lib import PlaceRef
from gramps.gen.errors import WindowActiveError from gramps.gen.errors import WindowActiveError
from ...dialog import ErrorDialog
from ...ddtargets import DdTargets from ...ddtargets import DdTargets
from .placerefmodel import PlaceRefModel from .placerefmodel import PlaceRefModel
from .embeddedlist import EmbeddedList, TEXT_COL from .embeddedlist import EmbeddedList, TEXT_COL
@ -48,6 +49,7 @@ class PlaceRefEmbedList(EmbeddedList):
_HANDLE_COL = 4 _HANDLE_COL = 4
_DND_TYPE = DdTargets.PLACEREF _DND_TYPE = DdTargets.PLACEREF
_DND_EXTRA = DdTargets.PLACE_LINK
#index = column in model. Value = #index = column in model. Value =
# (name, sortcol in model, width, markup/text, weigth_col # (name, sortcol in model, width, markup/text, weigth_col
@ -71,6 +73,18 @@ class PlaceRefEmbedList(EmbeddedList):
def column_order(self): def column_order(self):
return ((1, 0), (1, 1), (1, 2), (1, 3)) 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): def add_button_clicked(self, obj):
placeref = PlaceRef() placeref = PlaceRef()
try: try:
@ -98,3 +112,18 @@ class PlaceRefEmbedList(EmbeddedList):
def edit_callback(self, name): def edit_callback(self, name):
self.rebuild() 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