Skip to content
Snippets Groups Projects
Commit bcbea5d9 authored by Paul McCarthy's avatar Paul McCarthy
Browse files

Errors were being raised when a model reference image was removed from

overlay list. Now, only the master ModelOpts instance registers
listeners to manage the MdoelOpts reference image properties.
parent 8b2a416c
No related branches found
No related tags found
No related merge requests found
......@@ -362,7 +362,7 @@ class DisplayOpts(props.SyncableHasProperties, actions.ActionProvider):
``displayCtx`` The :class:`.DisplayContext` instance which is
responsible for all ``Display`` and ``DisplayOpts``
instances.
``name`` A unique name for this ``DIsplayOpts`` instance.
``name`` A unique name for this ``DisplayOpts`` instance.
=============== ======================================================
"""
......
......@@ -101,39 +101,50 @@ class ModelOpts(fsldisplay.DisplayOpts):
self.__oldRefImage = None
self.overlayList.addListener('overlays',
self.name,
self.__overlayListChanged)
self.addListener('refImage',
self.name,
self.__refImageChanged,
immediate=True)
self.addListener('coordSpace',
self.name,
self.__coordSpaceChanged,
immediate=True)
# A number of callback functions are used to
# keep the refImage, coordSpace and transform
# properties consistent. Only the master
# ModelOpts instance needs to register these
# listeners.
self.__registered = self.getParent() is None
if self.__registered:
self.overlayList.addListener('overlays',
self.name,
self.__overlayListChanged,
immediate=True)
self.addListener('refImage',
self.name,
self.__refImageChanged,
immediate=True)
self.addListener('coordSpace',
self.name,
self.__coordSpaceChanged,
immediate=True)
self.__overlayListChanged()
self.__updateBounds()
self.__overlayListChanged()
self.__updateBounds()
def destroy(self):
"""Removes some property listeners, and calls the
:meth:`.DisplayOpts.destroy` method.
"""
self.overlayList.removeListener('overlays', self.name)
for overlay in self.overlayList:
display = self.displayCtx.getDisplay(overlay)
display.removeListener('name', self.name)
if self.__registered:
self.overlayList.removeListener('overlays', self.name)
for overlay in self.overlayList:
display = self.displayCtx.getDisplay(overlay)
display.removeListener('name', self.name)
if self.refImage is not None and \
self.refImage in self.overlayList:
opts = self.displayCtx.getOpts(self.refImage)
opts.removeListener('transform', self.name)
opts.removeListener('customXform', self.name)
if self.refImage is not None and \
self.refImage in self.overlayList:
opts = self.displayCtx.getOpts(self.refImage)
opts.removeListener('transform', self.name)
opts.removeListener('customXform', self.name)
fsldisplay.DisplayOpts.destroy(self)
......@@ -290,6 +301,11 @@ class ModelOpts(fsldisplay.DisplayOpts):
oldValue = self.getLastValue('refImage')
# The reference image may have been
# removed from the overlay list
if oldValue not in self.overlayList:
oldValue = None
self.__cacheCoords(refImage=oldValue)
# TODO You are not tracking changes to the
......@@ -370,8 +386,10 @@ class ModelOpts(fsldisplay.DisplayOpts):
self.name,
self.__overlayListChanged,
overwrite=True)
imgProp.setChoices(imgOptions, instance=self)
if imgVal in overlays: self.refImage = imgVal
else: self.refImage = None
# The previous refImage may have
# been removed from the overlay list
if imgVal in imgOptions: self.refImage = imgVal
else: self.refImage = None
imgProp.setChoices(imgOptions, instance=self)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment