Rev 517: Simplify progress bar code, use embedded progress bar inside viz window. in file:///data/jelmer/bzr-gtk/trunk/
Jelmer Vernooij
jelmer at samba.org
Sun Jun 29 19:12:46 BST 2008
At file:///data/jelmer/bzr-gtk/trunk/
------------------------------------------------------------
revno: 517
revision-id: jelmer at samba.org-20080629181229-1l2m4cf7vvbyh8qg
parent: jelmer at samba.org-20080629162424-48a6rrjmmpejfcyr
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: trunk
timestamp: Sun 2008-06-29 20:12:29 +0200
message:
Simplify progress bar code, use embedded progress bar inside viz window.
modified:
branchview/linegraph.py graph.py-20051016214152-ebf565808c860cf7
branchview/treeview.py treeview.py-20071020204704-vk1erblrjhbcgw94-1
ui.py ui.py-20060716163355-owuqwa9uhnlfsojs-1
=== modified file 'branchview/linegraph.py'
--- a/branchview/linegraph.py 2008-06-29 16:11:12 +0000
+++ b/branchview/linegraph.py 2008-06-29 18:12:29 +0000
@@ -47,7 +47,7 @@
def update_root_progress(step_number):
"""IFF our container received a root progress bar, then update it."""
if root_progress is not None:
- root_progress.update(current=step_number)
+ root_progress.update(current_cnt=step_number)
graph_parents = {}
ghosts = set()
@@ -75,10 +75,10 @@
update_root_progress(2)
progress_bar = ui.ui_factory.nested_progress_bar()
try:
- progress_bar.update(msg="Removing ghosts", total=len(ghosts))
+ progress_bar.update(msg="Removing ghosts", total_cnt=len(ghosts))
for i, ghost in enumerate(ghosts):
if i % 25 == 0:
- progress_bar.update(current=i)
+ progress_bar.update(None, current_cnt=i)
for ghost_child in graph_children[ghost]:
graph_parents[ghost_child] = [p for p in graph_parents[ghost_child]
if p not in ghosts]
@@ -118,7 +118,7 @@
update_root_progress(3)
progress_bar = ui.ui_factory.nested_progress_bar()
try:
- progress_bar.update(msg="Finding nodes", total=len(merge_sorted_revisions))
+ progress_bar.update(msg="Finding nodes", total_cnt=len(merge_sorted_revisions))
for (rev_index, (sequence_number,
revid,
merge_depth,
@@ -126,7 +126,7 @@
end_of_merge)) in enumerate(merge_sorted_revisions):
if rev_index % 25 == 0:
- progress_bar.update(current=rev_index)
+ progress_bar.update(None, current_cnt=rev_index)
if maxnum and rev_index >= maxnum:
break
revid_index[revid] = rev_index
@@ -184,10 +184,10 @@
update_root_progress(4)
progress_bar = ui.ui_factory.nested_progress_bar()
try:
- progress_bar.update(msg="Organizing edges", total=len(branch_ids))
+ progress_bar.update(msg="Organizing edges", total_cnt=len(branch_ids))
for i, branch_id in enumerate(branch_ids):
if i % 25 == 0:
- progress_bar.update(current=i)
+ progress_bar.update(None, current_cnt=i)
branch_line = branch_lines[branch_id]
# Find the col_index for the direct parent branch. This will be the
@@ -314,10 +314,10 @@
update_root_progress(5)
progress_bar = ui.ui_factory.nested_progress_bar()
try:
- progress_bar.update(msg="Pretifying graph", total=len(lines))
+ progress_bar.update(msg="Pretifying graph", total_cnt=len(lines))
for i, (child_index, parent_index, line_col_indexes) in enumerate(lines):
if i % 25 == 0:
- progress_bar.update(current=i)
+ progress_bar.update(None, current_cnt=i)
(child_col_index, child_color) = linegraph[child_index][1]
(parent_col_index, parent_color) = linegraph[parent_index][1]
=== modified file 'branchview/treeview.py'
--- a/branchview/treeview.py 2008-06-29 16:24:24 +0000
+++ b/branchview/treeview.py 2008-06-29 18:12:29 +0000
@@ -16,11 +16,13 @@
from bzrlib import ui
from bzrlib.plugins.gtk import _i18n
+from bzrlib.plugins.gtk.ui import GtkProgressBar, ProgressPanel
from linegraph import linegraph, same_branch
from graphcell import CellRendererGraph
from treemodel import TreeModel
from bzrlib.revision import NULL_REVISION
+
class TreeView(gtk.VBox):
__gproperties__ = {
@@ -106,6 +108,10 @@
"""
gtk.VBox.__init__(self, spacing=0)
+ loading_msg_widget = ProgressPanel()
+ ui.ui_factory.set_nested_progress_bar_widget(loading_msg_widget.get_progress_bar)
+ self.pack_start(loading_msg_widget, expand=False, fill=True)
+
self.scrolled_window = gtk.ScrolledWindow()
self.scrolled_window.set_policy(gtk.POLICY_AUTOMATIC,
gtk.POLICY_AUTOMATIC)
@@ -269,8 +275,8 @@
should be broken.
"""
- loading_progress = ui.ui_factory.nested_progress_bar()
- loading_progress.update(msg="Loading ancestry graph", total=5)
+ self.progress_bar = ui.ui_factory.nested_progress_bar()
+ self.progress_bar.update(msg="Loading ancestry graph", total_cnt=5)
try:
if self.compact:
@@ -287,7 +293,7 @@
broken_line_length,
show_graph,
self.mainline_only,
- loading_progress)
+ self.progress_bar)
self.model = TreeModel(self.branch, linegraphdata)
self.graph_cell.columns_len = columns_len
@@ -306,7 +312,7 @@
return False
finally:
- loading_progress.finished()
+ self.progress_bar.finished()
def construct_treeview(self):
self.treeview = gtk.TreeView()
@@ -390,7 +396,7 @@
self.treeview.append_column(self.date_column)
return self.treeview
-
+
def _on_selection_changed(self, treeview):
"""callback for when the treeview changes."""
(path, focus) = treeview.get_cursor()
=== modified file 'ui.py'
--- a/ui.py 2008-06-29 16:20:15 +0000
+++ b/ui.py 2008-06-29 18:12:29 +0000
@@ -22,7 +22,7 @@
import gtk
import sys
-import bzrlib.progress
+from bzrlib import progress
from bzrlib.ui import UIFactory
@@ -40,60 +40,94 @@
gtk.RESPONSE_NO)
-class GtkProgressBar(gtk.ProgressBar):
- def __init__(self, stack):
- super(GtkProgressBar, self).__init__()
+class GtkProgressBar(gtk.ProgressBar,progress._BaseProgressBar):
+ def __init__(self, _stack=None):
+ gtk.ProgressBar.__init__(self)
self.set_fraction(0.0)
- self._stack = stack
+ progress._BaseProgressBar.__init__(self, _stack=_stack)
self.current = None
self.total = None
- def finished(self):
- self._stack.remove(self)
-
def clear(self):
- pass
+ self.hide()
def tick(self):
self.pulse()
- def update(self, msg=None, current=None, total=None):
- if current:
- self.current = current
- if total:
- self.total = total
+ def child_update(self, message, current, total):
+ pass
+
+ def update(self, msg=None, current_cnt=None, total_cnt=None):
+ if current_cnt:
+ self.current = current_cnt
+ if total_cnt:
+ self.total = total_cnt
if msg is not None:
self.set_text(msg)
if None not in (self.current, self.total):
- self.set_fraction(1.0 * self.current / self.total)
+ self.fraction = float(self.current) / self.total
+ self.set_fraction(self.fraction)
while gtk.events_pending():
gtk.main_iteration()
-class GtkWindowProgressBarStack(gtk.Window):
+class ProgressBarWindow(gtk.Window):
def __init__(self):
- super(GtkWindowProgressBarStack, self).__init__(type=gtk.WINDOW_TOPLEVEL)
+ super(ProgressBarWindow, 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.pb = GtkProgressBar(self)
+ self.add(self.pb)
+ self.resize(250, 15)
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)
- if len(self.vbox.get_children()) == 0: # If there is nothing to show, don't leave a ghost window here
- self.destroy()
+ self.show_all()
+
+ def clear(self):
+ self.pb.clear()
+ self.destroy()
+
+
+class ProgressPanel(gtk.HBox):
+ def __init__(self):
+ super(ProgressPanel, self).__init__()
+ image_loading = gtk.image_new_from_stock(gtk.STOCK_REFRESH,
+ gtk.ICON_SIZE_BUTTON)
+ image_loading.show()
+
+ self.pb = GtkProgressBar(self)
+ self.set_spacing(5)
+ self.set_border_width(5)
+ self.pack_start(image_loading, False, False)
+ self.pack_start(self.pb, True, True)
+
+ def return_pb(self, pb):
+ self._stack.return_pb(self)
+
+ def get_progress_bar(self, to_file=None, show_pct=None, show_spinner=None, show_eta=None,
+ show_bar=None, show_count=None, to_messages_file=None,
+ _stack=None):
+ self._stack = _stack
+ self.show_all()
+ return self
+
+ def update(self, *args, **kwargs):
+ self.pb.update(*args, **kwargs)
+
+ def finished(self):
+ self.pb.finished()
+ self.hide_all()
+
+ def clear(self):
+ self.pb.clear()
+ self.hide_all()
+
+ def child_progress(self, *args, **kwargs):
+ return self.pb.child_progress(*args, **kwargs)
+
+ def child_update(self, *args, **kwargs):
+ return self.pb.child_update(*args, **kwargs)
+
class PasswordDialog(gtk.Dialog):
@@ -128,7 +162,7 @@
"""
super(GtkUIFactory, self).__init__()
- self._progress_bar_stack = None
+ self.set_nested_progress_bar_widget(ProgressBarWindow)
def get_boolean(self, prompt):
"""GtkDialog with yes/no answers"""
@@ -156,11 +190,12 @@
else:
return None
+ def set_nested_progress_bar_widget(self, widget):
+ self._progress_bar_stack = progress.ProgressBarStack(klass=widget)
+
def nested_progress_bar(self):
"""Return a nested progress bar.
"""
- if self._progress_bar_stack is None:
- self._progress_bar_stack = GtkWindowProgressBarStack()
return self._progress_bar_stack.get_nested()
def set_progress_bar_vbox(self, vbox):
More information about the bazaar-commits
mailing list