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
|
# (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 wx
from traits.api import Instance, Int, Str
from traitsui.wx.editor import Editor
from pyface.ui.wx.progress_dialog import ProgressDialog
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,
)
panel = wx.Panel(parent, -1)
sizer = wx.BoxSizer(wx.VERTICAL)
panel.SetSizer(sizer)
panel.SetAutoLayout(True)
panel.SetBackgroundColour(wx.NullColour)
self.progress.dialog_size = wx.Size()
# The 'guts' of the dialog.
self.progress._create_message(panel, sizer)
self.progress._create_gauge(panel, sizer)
self.progress._create_percent(panel, sizer)
self.progress._create_timer(panel, sizer)
self.progress._create_buttons(panel, sizer)
panel.SetClientSize(self.progress.dialog_size)
panel.CentreOnParent()
self.control = panel
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.change_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()
|