File: progress_editor.py

package info (click to toggle)
python-traitsui 8.0.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 18,232 kB
  • sloc: python: 58,982; makefile: 113
file content (105 lines) | stat: -rw-r--r-- 3,101 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
# (C) Copyright 2004-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!

import time

from pyface.qt import QtGui, QtCore

from traits.api import Instance, Int, Str
from pyface.ui.qt.progress_dialog import ProgressDialog
from traitsui.qt.editor import Editor


class _ProgressDialog(ProgressDialog):
    def close(self):
        """Overwritten to disable closing."""
        pass


class SimpleEditor(Editor):
    """
    Show a progress bar with all the optional goodies

    """

    progress = Instance(_ProgressDialog)

    #: The message to be displayed along side the progress guage
    message = Str()

    #: The starting value
    min = Int()

    #: The ending value
    max = Int()

    # -- Editor interface ------------------------------------------------------

    def init(self, parent):
        """Finishes initializing the editor by creating the underlying toolkit
        widget.
        """
        self.control = self.create_control(parent)
        factory = self.factory
        self.min = factory.min
        self.max = factory.max
        self.message = factory.message
        self.sync_value(factory.min_name, "min", "from")
        self.sync_value(factory.max_name, "max", "from")
        self.sync_value(factory.message_name, "message", "from")

        self.set_tooltip()

    def create_control(self, parent):
        """
        Finishes initializing the editor by creating the underlying widget.
        """

        self.progress = _ProgressDialog(
            title=self.factory.title,
            message=self.factory.message,
            min=self.factory.min,
            max=self.factory.max,
            can_cancel=self.factory.can_cancel,
            show_time=self.factory.show_time,
            show_percent=self.factory.show_percent,
        )

        control = QtGui.QWidget()
        self.control = control
        layout = QtGui.QVBoxLayout(self.control)
        layout.setContentsMargins(0, 0, 0, 0)

        # The 'guts' of the dialog.
        self.progress._create_message(control, layout)
        self.progress._create_gauge(control, layout)
        self.progress._create_percent(control, layout)
        self.progress._create_timer(control, layout)
        self.progress._create_buttons(control, layout)
        return self.control

    def update_editor(self):
        """
        Updates the editor when the object trait changes externally to the
        editor.
        """
        self.progress.min = self.min
        self.progress.max = self.max
        self.progress.message = self.message
        self.progress.update(self.value)

    def _min_changed(self):
        self.update_editor()

    def _max_changed(self):
        self.update_editor()

    def _message_changed(self):
        self.update_editor()