diff --git a/fsl/fslview/controls/overlaylistpanel.py b/fsl/fslview/controls/overlaylistpanel.py index 46800e001961194c1a6a61e441a0f36e43b0b055..76f44f211cde17c05044647b0e4c3c95a2f114a7 100644 --- a/fsl/fslview/controls/overlaylistpanel.py +++ b/fsl/fslview/controls/overlaylistpanel.py @@ -100,7 +100,10 @@ class ListItemWidget(wx.Panel): if ev.GetEventObject() is not self: return + group = self.displayCtx.overlayGroups[0] + self.display.removeListener('enabled', self.name) + group .removeListener('overlays', self.name) if isinstance(self.overlay, fslimage.Image): self.overlay.removeListener('saved', self.name) diff --git a/fsl/fslview/displaycontext/display.py b/fsl/fslview/displaycontext/display.py index bb38e7af0f61dd21b9a76039c2bb94438c8ae6eb..fae54eeae0a6a81105ffc4c3081c07c0b546feb7 100644 --- a/fsl/fslview/displaycontext/display.py +++ b/fsl/fslview/displaycontext/display.py @@ -165,8 +165,19 @@ class Display(props.SyncableHasProperties): # Populate the possible choices # for the overlayType property overlayTypeProp = self.getProp('overlayType') - possibleTypes = OVERLAY_TYPES[overlay] - + possibleTypes = list(OVERLAY_TYPES[overlay]) + + # Special cases: + # + # If the overlay is an image which + # does not have a fourth dimension + # of length three, it can't be + # a vector + if isinstance(overlay, fslimage.Image) and \ + (len(overlay.shape) != 4 or overlay.shape[-1] != 3): + possibleTypes.remove('rgbvector') + possibleTypes.remove('linevector') + for pt in possibleTypes: log.debug('Enabling overlay type {} for {}'.format(pt, overlay)) label = strings.choices[self, 'overlayType', pt]