Source code for fsleyes.actions.loadcolourmap

#
# loadcolourmap.py - Load a colour map file.
#
# Author: Paul McCarthy <pauldmccarthy@gmail.com>
#
"""This module provides the :class:`LoadColourMapAction`, which allows the
user to load a new colour map.
"""

import            logging
import            os
import os.path as op

import fsl.utils.settings           as fslsettings
import fsleyes_widgets.utils.status as status
import fsleyes.strings              as strings
import fsleyes.colourmaps           as fslcmap
from . import                          base


log = logging.getLogger(__name__)


[docs]class LoadColourMapAction(base.Action): """The ``LoadColourMapAction`` allows the user to select a colour map file and give it a name. The loaded colour map is then registered with the :mod:`.colourmaps` module. The user is also given the option to permanently save the loaded colour map in *FSLeyes*. """
[docs] def __init__(self, overlayList, displayCtx): """Create a ``LoadColourMapAction``. :arg overlayList: The :class:`.OverlayList`. :arg displayCtx: The :class:`.DisplayContext`. """ base.Action.__init__( self, overlayList, displayCtx, self.__loadColourMap)
def __loadColourMap(self): """This method does the following: 1. Prompts the user to select a colour map file 2. Prompts the user to name the new colour map. 3. Registers the colour map with the :mod:`.colourmaps` module. 4. Asks the user if they want the colour map installed, and installs it if they do. """ import wx app = wx.GetApp() # Get the most recent colour map # directory if there is one loadDir = fslsettings.read('fsleyes.loadcolourmapdir', os.getcwd()) # prompt the user to choose a colour map file dlg = wx.FileDialog( app.GetTopWindow(), defaultDir=loadDir, message=strings.messages[self, 'loadcmap'], style=wx.FD_OPEN) if dlg.ShowModal() != wx.ID_OK: return # prompt the user to choose a name for the colour # map (using the filename prefix as the default) cmapFile = dlg.GetPath() cmapDir = op.dirname(cmapFile) cmapName = op.splitext(op.basename(cmapFile))[0] cmapNameMsg = strings.messages[self, 'namecmap'] cmapNameTitle = strings.titles[ self, 'namecmap'] while True: dlg = wx.TextEntryDialog( app.GetTopWindow(), cmapNameMsg, cmapNameTitle, cmapName) if dlg.ShowModal() != wx.ID_OK: return cmapName = dlg.GetValue() cmapKey = fslcmap.makeValidMapKey(cmapName) # a colour map with the specified name already exists if fslcmap.isColourMapRegistered(cmapKey): cmapNameMsg = strings.messages[self, 'alreadyinstalled'] continue break # register the selected colour map file fslcmap.registerColourMap(cmapFile, self.overlayList, self.displayCtx, key=cmapKey, name=cmapName) # Save the directory for next time fslsettings.write('fsleyes.loadcolourmapdir', cmapDir) # ask the user if they want to install # the colour map for future use dlg = wx.MessageDialog( app.GetTopWindow(), caption=strings.titles[ self, 'installcmap'], message=strings.messages[self, 'installcmap'], style=wx.YES_NO) if dlg.ShowModal() != wx.ID_YES: return # install the colour map etitle = strings.titles[ self, 'installerror'] emsg = strings.messages[self, 'installerror'] with status.reportIfError(title=etitle, msg=emsg, raiseError=False): fslcmap.installColourMap(cmapKey)