Source code for enaml.widgets.dialog

#------------------------------------------------------------------------------
# Copyright (c) 2013, Nucleic Development Team.
#
# Distributed under the terms of the Modified BSD License.
#
# The full license is in the file LICENSE, distributed with this software.
#------------------------------------------------------------------------------
from atom.api import Bool, Event, Typed, ForwardTyped, set_default

from enaml.core.declarative import d_

from .window import Window, ProxyWindow


class ProxyDialog(ProxyWindow):
    """ The abstract definition of a proxy Dialog object.

    """
    #: A reference to the Dialog declaration.
    declaration = ForwardTyped(lambda: Dialog)

    def exec_(self):
        raise NotImplementedError

    def done(self, result):
        raise NotImplementedError


[docs] class Dialog(Window): """ A top-level Window class for creating dialogs. """ #: The result of the dialog. This value is updated before any of #: the related dialog events are fired. result = d_(Bool(False), writable=False) #: An event fired when the dialog is finished. The payload will be #: the boolean result of the dialog. This event is fired before #: the 'accepted' or rejected event. finished = d_(Event(bool), writable=False) #: An event fired when the dialog is accepted. accepted = d_(Event(), writable=False) #: An event fired when the dialog is rejected. rejected = d_(Event(), writable=False) #: Dialogs are application modal by default. modality = set_default('application_modal') #: A reference to the ProxyDialog object. proxy = Typed(ProxyDialog)
[docs] def exec_(self): """ Launch the dialog as a modal window. This call will block until the dialog is closed. Returns ------- result : bool The result value of the dialog. """ if not self.is_initialized: self.initialize() if not self.proxy_is_active: self.activate_proxy() return self.proxy.exec_()
[docs] def done(self, result): """ Close the dialog and set the result value. This will cause a call to `exec_` to return. Parameters ---------- result : bool The result value for the dialog. """ if self.proxy_is_active: self.proxy.done(result)
[docs] def accept(self): """ Close the dialog and set the result to True. """ self.done(True)
[docs] def reject(self): """ Close the dialog and set the result to False. """ self.done(False)