Source code for fsleyes.editor

#
# __init__.py - Editing of Image overlays.
#
# Author: Paul McCarthy <pauldmccarthy@gmail.com>
#
"""The ``editor`` package contains functionality for editing :class:`.Image`
overlays.

.. image:: images/editor.png
   :scale: 25%
   :align: center


The ``editor`` package provides the following two classes:

.. autosummary::
   :nosignatures:

   ~fsleyes.editor.selection.Selection
   ~fsleyes.editor.editor.Editor


Making an edit to an ``Image`` requires two stages:

 1. Select some voxels in the ``Image``.

 2. Modify the values stored in those voxels.


The :class:`.Selection` class implements the functionality for the first
stage, and the :class:`.Editor` class implements functinoality for the second.
The ``Editor`` class also keeps track of changes to the current selection, and
to the image data, thus allowing the user to undo/redo any changes.
"""


__all__ = ['isEditable',
           'Editor',
           'Selection',
           'ValueChange',
           'SelectionChange']


import fsl.data.image         as fslimage
import fsleyes.displaycontext as fsldisplay

from .selection import  Selection
from .editor    import (Editor,
                        ValueChange,
                        SelectionChange)


[docs]def isEditable(overlay, displayCtx): """Returns ``True`` if the given overlay is editable, ``False`` otherwise. :arg overlay: The overlay to check :arg displayCtx: The relevant :meth:`.DisplayContext` :returns: True if ``overlay``is editable, ``False`` otherwise """ # will raise if overlay is # None, or has been removed try: display = displayCtx.getDisplay(overlay) except (ValueError, fsldisplay.InvalidOverlayError): return False # Edit mode is only supported on # images with the 'volume', 'mask' # or 'label' types return overlay is not None and \ isinstance(overlay, fslimage.Image) and \ overlay.nvals == 1 and \ display.overlayType in ('volume', 'mask', 'label')