From 59f253e70565d415160e09e0d8b3ff7496c6c6ef Mon Sep 17 00:00:00 2001 From: Paul McCarthy <pauld.mccarthy@gmail.com> Date: Tue, 22 Mar 2016 12:25:40 +0000 Subject: [PATCH] Open standard action enables itself when the FSLDIR changes. --- fsl/__init__.py | 9 ++++--- fsl/fsleyes/actions/openstandard.py | 39 +++++++++++++++++++++++------ 2 files changed, 38 insertions(+), 10 deletions(-) diff --git a/fsl/__init__.py b/fsl/__init__.py index 3cc0076b8..7dea070a8 100644 --- a/fsl/__init__.py +++ b/fsl/__init__.py @@ -62,6 +62,7 @@ import subprocess import fsl.tools as tools import fsl.utils.settings as fslsettings +import fsl.utils.platform as fslplatform import fsl.version @@ -566,7 +567,8 @@ def _fslDirWarning(parent, toolName, fslEnvActive): fsldir = fslsettings.read('fsldir') if fsldir is not None: - os.environ['FSLDIR'] = fsldir + os.environ['FSLDIR'] = fsldir + fslplatform.platform.fsldir = fsldir return if haveGui: @@ -581,8 +583,9 @@ def _fslDirWarning(parent, toolName, fslEnvActive): log.debug('Setting $FSLDIR to {} (specified ' 'by user)'.format(fsldir)) - os.environ['FSLDIR'] = fsldir - fslsettings.write('fsldir', fsldir) + fslplatform.platform.fsldir = fsldir + os.environ[ 'FSLDIR'] = fsldir + fslsettings.write( 'fsldir', fsldir) wx.CallLater(500, warn) diff --git a/fsl/fsleyes/actions/openstandard.py b/fsl/fsleyes/actions/openstandard.py index ac25cbeeb..21527ed39 100644 --- a/fsl/fsleyes/actions/openstandard.py +++ b/fsl/fsleyes/actions/openstandard.py @@ -9,10 +9,11 @@ to load in standard space images from the ``$FSLDIR/data/standard/`` directory. """ -import os import os.path as op -import action +from . import action + +import fsl.utils.platform as fslplatform class OpenStandardAction(action.Action): @@ -33,16 +34,40 @@ class OpenStandardAction(action.Action): self.__overlayList = overlayList self.__displayCtx = displayCtx - # disable this action - # if $FSLDIR is not set - fsldir = os.environ.get('FSLDIR', None) + self.__setStandardDir() + + # If FSLDIR is not set, the setStandardDir + # disables this action. But we'll listen + # for changes to FSLDIR, in case it gets + # set later on. + fslplatform.platform.register( + '{}_{}'.format(type(self).__name__, id(self)), + self.__setStandardDir) + + + def destroy(self): + """Must be called when this ``OpenStandardAction`` is no longer + needed. Performs some clean-up. + """ + fslplatform.platform.deregister( + '{}_{}'.format(type(self).__name__, id(self))) + + def __setStandardDir(self, *a): + """Called by :meth:`__init__`, and when the + :attr:`~fsl.utils.Platform.fsldir` property is changed. Updates + the path to the FSLDIR standard directory. + """ + + fsldir = fslplatform.platform.fsldir + if fsldir is not None: self.__stddir = op.join(fsldir, 'data', 'standard') else: self.__stddir = None - self.enabled = False - + + self.enabled = self.__stddir is not None + def __openStandard(self): """Calls the :meth:`.OverlayList.addOverlays` method. If the user -- GitLab