1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185
|
# (C) Copyright 2005-2023 Enthought, Inc., Austin, TX
# All rights reserved.
#
# This software is provided without warranty under the terms of the BSD
# license included in LICENSE.txt and may be redistributed only under
# the conditions described in the aforementioned license. The license
# is also available online at http://www.enthought.com/licenses/BSD.txt
#
# Thanks for using Enthought open source!
""" The abstract interface for all pyface dialogs. """
from traits.api import Bool, Enum, HasTraits, Int, Str
from pyface.constant import OK
from pyface.i_window import IWindow
class IDialog(IWindow):
""" The abstract interface for all pyface dialogs.
Usage: Sub-class this class and either override '_create_contents' or
more simply, just override the two methods that do the real work:-
1) '_create_dialog_area' creates the main content of the dialog.
2) '_create_buttons' creates the dialog buttons.
"""
# 'IDialog' interface -------------------------------------------------#
#: The label for the 'cancel' button. The default is toolkit specific.
cancel_label = Str()
#: The context sensitive help Id (the 'Help' button is only shown iff this
#: is set).
help_id = Str()
#: The label for the 'help' button. The default is toolkit specific.
help_label = Str()
#: The label for the 'ok' button. The default is toolkit specific.
ok_label = Str()
#: Is the dialog resizeable?
resizeable = Bool(True)
#: The return code after the window is closed to indicate whether the dialog
#: was closed via 'Ok' or 'Cancel').
return_code = Int(OK)
#: The dialog style (is it modal or not).
# FIXME v3: It doesn't seem possible to use non-modal dialogs. (How do you
# get access to the buttons?)
style = Enum("modal", "nonmodal")
# ------------------------------------------------------------------------
# 'IDialog' interface.
# ------------------------------------------------------------------------
def open(self):
""" Opens the dialog.
If the dialog is modal then the dialog's event loop is entered and the
dialog closed afterwards. The 'return_code' trait is updated according
to the button the user pressed and this value is also returned.
If the dialog is non-modal the return_code trait is set to 'OK'.
Returns
-------
return_code : OK or CANCEL
The value of the ``return_code`` trait.
"""
# ------------------------------------------------------------------------
# Protected 'IDialog' interface.
# ------------------------------------------------------------------------
def _create_buttons(self, parent):
""" Create and return the buttons.
Parameters
----------
parent : toolkit control
The dialog's toolkit control to be used as the parent for
buttons.
Returns
-------
buttons : toolkit control
A control containing the dialog's buttons.
"""
def _create_contents(self, parent):
""" Create and return the dialog's contents.
Parameters
----------
parent : toolkit control
The window's toolkit control to be used as the parent for
widgets in the contents.
Returns
-------
control : toolkit control
A control to be used for contents of the window.
"""
def _create_dialog_area(self, parent):
""" Create and return the main content of the dialog's window.
Parameters
----------
parent : toolkit control
A toolkit control to be used as the parent for widgets in the
contents.
Returns
-------
control : toolkit control
A control to be used for main contents of the dialog.
"""
def _show_modal(self):
""" Opens the dialog as a modal dialog.
Returns
-------
return_code : OK or CANCEL
The return code from the user's interactions.
"""
class MDialog(HasTraits):
""" The mixin class that contains common code for toolkit specific
implementations of the IDialog interface.
Implements: open()
Reimplements: _add_event_listeners(), create()
"""
# ------------------------------------------------------------------------
# 'IDialog' interface.
# ------------------------------------------------------------------------
def open(self):
""" Opens the dialog.
If the dialog is modal then the dialog's event loop is entered and the
dialog closed afterwards. The 'return_code' trait is updated according
to the button the user pressed and this value is also returned.
If the dialog is non-modal the return_code trait is set to 'OK'.
Returns
-------
return_code : OK or CANCEL
The value of the ``return_code`` trait.
"""
if self.control is None:
self.create()
if self.style == "modal":
self.return_code = self._show_modal()
self.close()
else:
self.show(True)
self.return_code = OK
return self.return_code
# ------------------------------------------------------------------------
# Protected 'IWidget' interface.
# ------------------------------------------------------------------------
def create(self, parent=None):
""" Creates the window's widget hierarchy. """
super().create(parent=parent)
self._create_contents(self.control)
|