8056: Activate drag and drop on "enclosed by" tab
This commit is contained in:
parent
63fe1a4bd2
commit
5bdb45416f
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user