File: i_progress_dialog.py

package info (click to toggle)
python-pyface 8.0.0-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 13,944 kB
  • sloc: python: 54,107; makefile: 82
file content (132 lines) | stat: -rw-r--r-- 3,694 bytes parent folder | download
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
# (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 interface for a dialog that allows the user to display progress of an
operation."""


from traits.api import Any, Bool, HasTraits, Int, Str


from pyface.i_dialog import IDialog


class IProgressDialog(IDialog):
    """ A simple progress dialog window which allows itself to be updated
    """

    # 'IProgressDialog' interface ---------------------------------#

    #: The message to display in the dialog
    message = Str()

    #: The minimum progress value
    min = Int()

    #: The maximum progress value
    max = Int()

    #: The margin around the progress bar
    margin = Int(5)

    #: Whether the operation can be cancelled
    can_cancel = Bool(False)

    #: Whether to show progress times
    show_time = Bool(False)

    #: Whether to show progress percent
    show_percent = Bool(False)

    #: Label for the 'cancel' button
    cancel_button_label = Str()

    # ------------------------------------------------------------------------
    # 'IProgressDialog' interface.
    # ------------------------------------------------------------------------

    def update(self, value):
        """ Update the progress bar to the desired value

        If the value is >= the maximum and the progress bar is not contained
        in another panel the parent window will be closed.

        Parameters
        ----------
        value :
            The progress value to set.
        """

    def change_message(self, message):
        """ Change the displayed message in the progress dialog

        Parameters
        ----------
        message : str or unicode
            The new message to display.

        """


class MProgressDialog(HasTraits):
    """ The mixin class that contains common code for toolkit specific
    implementations of the IProgressDialog interface.

    Implements: update()
    """

    #: The progress bar toolkit object
    # XXX why not the control?
    progress_bar = Any()

    # ------------------------------------------------------------------------
    # 'IWindow' interface.
    # ------------------------------------------------------------------------

    def open(self):
        """ Open the dialog """
        if self.max < self.min:
            msg = "Dialog min ({}) is greater than dialog max ({})."
            raise AttributeError(msg.format(self.min, self.max))

        super().open()

    # ------------------------------------------------------------------------
    # 'IProgressDialog' interface.
    # ------------------------------------------------------------------------

    def update(self, value):
        """ Update the progress bar to the desired value

        If the value is >= the maximum and the progress bar is not contained
        in another panel the parent window will be closed.

        Parameters
        ----------
        value :
            The progress value to set.
        """

        if self.progress_bar is not None:
            self.progress_bar.update(value)

        if value >= self.max:
            self.close()

    def change_message(self, message):
        """ Change the displayed message in the progress dialog

        Parameters
        ----------
        message : str or unicode
            The new message to display.

        """
        self.message = message