#
# frameactions.py - Top level actions
#
#
# Author: Paul McCarthy <pauldmccarthy@gmail.com>
#
"""This module contains various top-level FSLeyes actions which are
monkey-patched into the :class:`.FSLeyesFrame` class.
"""
import os
import os.path as op
import fsleyes
import fsleyes.actions as actions
import fsleyes.strings as strings
from fsleyes.frame import FSLeyesFrame
[docs]def addViewPanel(self, vpType, **kwargs):
"""Function shared by the add*Panel functions below. """
vp = self.addViewPanel(vpType, **kwargs)
vp.SetFocus()
return vp
[docs]def addOrthoPanel(self, *args, **kwargs):
"""Adds a new :class:`.OrthoPanel`."""
from fsleyes.views.orthopanel import OrthoPanel
addViewPanel(self, OrthoPanel)
[docs]def addLightBoxPanel(self, *args, **kwargs):
"""Adds a new :class:`.LightBoxPanel`."""
from fsleyes.views.lightboxpanel import LightBoxPanel
addViewPanel(self, LightBoxPanel)
[docs]def addScene3DPanel(self, *args, **kwargs):
"""Adds a new :class:`.Scene3DPanel`."""
from fsleyes.views.scene3dpanel import Scene3DPanel
addViewPanel(self, Scene3DPanel)
[docs]def addTimeSeriesPanel(self, *args, **kwargs):
"""Adds a new :class:`.TimeSeriesPanel`."""
from fsleyes.views.timeseriespanel import TimeSeriesPanel
addViewPanel(self, TimeSeriesPanel)
[docs]def addHistogramPanel(self, *args, **kwargs):
"""Adds a new :class:`.HistogramPanel`."""
from fsleyes.views.histogrampanel import HistogramPanel
addViewPanel(self, HistogramPanel)
[docs]def addPowerSpectrumPanel(self, *args, **kwargs):
"""Adds a new :class:`.PowerSpectrumPanel`."""
from fsleyes.views.powerspectrumpanel import PowerSpectrumPanel
addViewPanel(self, PowerSpectrumPanel)
[docs]def addShellPanel(self, *args, **kwargs):
"""Adds a new :class:`.ShellPanel`."""
from fsleyes.views.shellpanel import ShellPanel
addViewPanel(self, ShellPanel)
[docs]def removeFocusedViewPanel(self, *args, **kwargs):
"""Removes the :class:`.ViewPanel` which currently has focus. """
vp = self.focusedViewPanel
if vp is not None:
self.removeViewPanel(vp)
[docs]def _changeOverlay(self, offset):
"""Used by :func:`selectNextOverlay` and :func:`selectPreviousOverlay`.
Changes the currently selected overlay by the given offset.
"""
overlayList = self.overlayList
if len(overlayList) in (0, 1):
return
viewPanel = self.focusedViewPanel
if viewPanel is None: displayCtx = self .displayCtx
else: displayCtx = viewPanel.displayCtx
cur = displayCtx.overlayOrder.index(displayCtx.selectedOverlay)
new = displayCtx.overlayOrder[(cur + offset) % len(overlayList)]
displayCtx.selectedOverlay = new
[docs]def selectNextOverlay(self, *args, **kwargs):
"""Increments the :attr:`.DisplayContext.selectedOverlay`. """
_changeOverlay(self, 1)
[docs]def selectPreviousOverlay(self, *args, **kwargs):
"""Decrements the :attr:`.DisplayContext.selectedOverlay`. """
_changeOverlay(self, -1)
[docs]def toggleOverlayVisibility(self, *args, **kwargs):
"""Shows/hides the currently selected overlay. """
overlayList = self.overlayList
if len(overlayList) == 0:
return
viewPanel = self.focusedViewPanel
if viewPanel is None: displayCtx = self .displayCtx
else: displayCtx = viewPanel.displayCtx
overlay = displayCtx.getSelectedOverlay()
display = displayCtx.getDisplay(overlay)
display.enabled = not display.enabled
[docs]def openHelp(self, *args, **kwargs):
"""Opens FSLeyes help in a web browser. """
import fsleyes_widgets.utils.webpage as webpage
url = 'https://open.win.ox.ac.uk/pages/fsl/fsleyes/fsleyes/userdoc/'
webpage.openPage(url)
[docs]def setFSLDIR(self, *args, **kwargs):
"""Opens a directory dialog allowing the user to select a value for
``$FSLDIR``.
"""
import wx
from fsl.utils.platform import platform
import fsl.utils.settings as settings
fsldir = platform.fsldir
if fsldir is None:
fsldir = os.getcwd()
msg = strings.titles[self, 'setFSLDIR']
dlg = wx.DirDialog(self,
message=msg,
defaultPath=fsldir,
style=wx.DD_DEFAULT_STYLE | wx.DD_DIR_MUST_EXIST)
if dlg.ShowModal() != wx.ID_OK:
return
fsldir = dlg.GetPath()
platform.fsldir = fsldir
settings.write('fsldir', fsldir)
[docs]def closeFSLeyes(self, *args, **kwargs):
"""Closes FSLeyes. """
self.Close()
FSLeyesFrame.addOrthoPanel = actions.action(addOrthoPanel)
FSLeyesFrame.addLightBoxPanel = actions.action(addLightBoxPanel)
FSLeyesFrame.addScene3DPanel = actions.action(addScene3DPanel)
FSLeyesFrame.addTimeSeriesPanel = actions.action(addTimeSeriesPanel)
FSLeyesFrame.addHistogramPanel = actions.action(addHistogramPanel)
FSLeyesFrame.addPowerSpectrumPanel = actions.action(addPowerSpectrumPanel)
FSLeyesFrame.addShellPanel = actions.action(addShellPanel)
FSLeyesFrame.removeFocusedViewPanel = actions.action(removeFocusedViewPanel)
FSLeyesFrame.selectNextOverlay = actions.action(selectNextOverlay)
FSLeyesFrame.selectPreviousOverlay = actions.action(selectPreviousOverlay)
FSLeyesFrame.toggleOverlayVisibility = actions.action(toggleOverlayVisibility)
FSLeyesFrame.openHelp = actions.action(openHelp)
FSLeyesFrame.setFSLDIR = actions.action(setFSLDIR)
FSLeyesFrame.closeFSLeyes = actions.action(closeFSLeyes)