[Pkg-bazaar-commits] ./bzr-gtk/unstable r174: Implement simple GTK+ progress bars.
Jelmer Vernooij
jelmer at samba.org
Fri Apr 10 07:49:41 UTC 2009
------------------------------------------------------------
revno: 174
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: trunk
timestamp: Mon 2007-03-19 02:56:10 +0100
message:
Implement simple GTK+ progress bars.
modified:
ui.py
-------------- next part --------------
=== modified file 'ui.py'
--- a/ui.py 2007-02-03 10:25:09 +0000
+++ b/ui.py 2007-03-19 01:56:10 +0000
@@ -22,8 +22,6 @@
import sys
import bzrlib.progress
-from bzrlib.symbol_versioning import (deprecated_method,
- zero_eight)
from bzrlib.ui import UIFactory
@@ -40,6 +38,53 @@
self.add_buttons(gtk.STOCK_YES, gtk.RESPONSE_YES, gtk.STOCK_NO, gtk.RESPONSE_NO)
+class GtkProgressBar(gtk.ProgressBar):
+ def __init__(self, stack):
+ super(GtkProgressBar, self).__init__()
+ self.set_fraction(0.0)
+ self._stack = stack
+
+ def finished(self):
+ self._stack.remove(self)
+
+ def clear(self):
+ pass
+
+ def tick(self):
+ self.pulse()
+
+ def update(self, msg=None, current=None, total=None):
+ if msg is not None:
+ self.set_text(msg)
+ self.set_fraction(1.0 * current / total)
+ while gtk.events_pending():
+ gtk.main_iteration()
+
+
+class GtkProgressBarStack(gtk.Window):
+ def __init__(self):
+ super(GtkProgressBarStack, self).__init__(type=gtk.WINDOW_TOPLEVEL)
+ self.set_border_width(0)
+ self.set_title("Progress")
+ self.set_position(gtk.WIN_POS_CENTER_ALWAYS)
+ self.vbox = gtk.VBox()
+ self.add(self.vbox)
+ self.set_resizable(False)
+
+ def _adapt_size(self):
+ self.resize(250, 15 * len(self.vbox.get_children()))
+
+ def get_nested(self):
+ nested = GtkProgressBar(self)
+ self.vbox.pack_start(nested)
+ self._adapt_size()
+ self.show_all()
+ return nested
+
+ def remove(self, pb):
+ self.vbox.remove(pb)
+
+
class PasswordDialog(gtk.Dialog):
""" Prompt the user for a password. """
def __init__(self, prompt):
@@ -66,17 +111,12 @@
"""A UI factory for GTK user interfaces."""
def __init__(self,
- bar_type=None,
stdout=None,
stderr=None):
"""Create a GtkUIFactory.
- :param bar_type: The type of progress bar to create. It defaults to
- letting the bzrlib.progress.ProgressBar factory auto
- select.
"""
super(GtkUIFactory, self).__init__()
- self._bar_type = bar_type
if stdout is None:
self.stdout = sys.stdout
else:
@@ -85,6 +125,7 @@
self.stderr = sys.stderr
else:
self.stderr = stderr
+ self._progress_bar_stack = None
def get_boolean(self, prompt):
"""GtkDialog with yes/no answers"""
@@ -93,13 +134,6 @@
dialog.destroy()
return (response == gtk.RESPONSE_YES)
- @deprecated_method(zero_eight)
- def progress_bar(self):
- """See UIFactory.nested_progress_bar()."""
- # this in turn is abstract, and creates either a tty or dots
- # bar depending on what we think of the terminal
- return bzrlib.progress.ProgressBar()
-
def get_password(self, prompt='', **kwargs):
"""Prompt the user for a password.
@@ -121,17 +155,16 @@
def nested_progress_bar(self):
"""Return a nested progress bar.
-
- The actual bar type returned depends on the progress module which
- may return a tty or dots bar depending on the terminal.
-
- FIXME: It should return a GtkProgressBar actually.
"""
if self._progress_bar_stack is None:
- self._progress_bar_stack = bzrlib.progress.ProgressBarStack(
- klass=self._bar_type)
+ self._progress_bar_stack = GtkProgressBarStack()
return self._progress_bar_stack.get_nested()
+ def set_progress_bar_vbox(self, vbox):
+ """Change the vbox to put progress bars in.
+ """
+ self._progress_bar_stack = vbox
+
def clear_term(self):
"""Prepare the terminal for output.
More information about the Pkg-bazaar-commits
mailing list