#
# removealloverlays.py - The RemoveAllOverlaysAction class.
#
# Author: Paul McCarthy <pauldmccarthy@gmail.com>
#
"""This module provides the :class:`RemoveAllOverlaysAction`, which allows the
uesr to remove all overlays from the :class:`.OverlayList`.
"""
import fsleyes.strings as strings
from . import base
from . import saveoverlay
[docs]class RemoveAllOverlaysAction(base.Action):
"""The ``RemoveAllOverlaysAction`` allows the uesr to remove all
overlays from the :class:`.OverlayList`.
"""
[docs] def __init__(self, overlayList, displayCtx, frame):
"""Create a ``RemoveAllOverlaysAction``.
:arg overlayList: The :class:`.OverlayList`.
:arg displayCtx: The :class:`.DisplayContext`.
:arg frame: The :class:`.FSLeyesFrame`.
"""
base.Action.__init__(
self, overlayList, displayCtx, self.__removeAllOverlays)
self.__name = '{}_{}'.format(type(self).__name__, id(self))
overlayList.addListener('overlays',
self.__name,
self.__overlayListChanged)
[docs] def destroy(self):
"""Must be called when this ``RemoveAllOverlaysAction`` is no longer
needed. Removes property listeners, and then calls
:meth:`.Action.destroy`.
"""
self.overlayList.removeListener('overlays', self.__name)
base.Action.destroy(self)
def __overlayListChanged(self, *a):
"""Called when the :class:`.OverlayList` changes. Updates the
:attr:`.Action.enabled` flag
"""
self.enabled = len(self.overlayList) > 0
def __removeAllOverlays(self):
"""Removes all overlays from the :class:`.OverlayList`.
"""
import wx
allSaved = saveoverlay.checkOverlaySaveState(
self.overlayList, self.displayCtx)
# If there are unsaved images,
# get the user to confirm
if not allSaved:
msg = strings.messages[self, 'unsavedOverlays']
title = strings.titles[ self, 'unsavedOverlays']
parent = wx.GetApp().GetTopWindow()
dlg = wx.MessageDialog(parent,
message=msg,
caption=title,
style=(wx.YES_NO |
wx.NO_DEFAULT |
wx.CENTRE |
wx.ICON_WARNING))
dlg.CentreOnParent()
if dlg.ShowModal() == wx.ID_NO:
return
del self.overlayList[:]