1
1
# Copyright (C) 2006 Szilveszter Farkas <szilveszter.farkas@gmail.com>
2
# Copyright (C) 2007 Jelmer Vernooij <jelmer@samba.org>
4
3
# This program is free software; you can redistribute it and/or modify
5
4
# it under the terms of the GNU General Public License as published by
37
38
self.vbox.show_all()
39
self.add_buttons(gtk.STOCK_YES, gtk.RESPONSE_YES, gtk.STOCK_NO,
43
class GtkProgressBar(gtk.ProgressBar):
44
def __init__(self, stack):
45
super(GtkProgressBar, self).__init__()
46
self.set_fraction(0.0)
50
self._stack.remove(self)
58
def update(self, msg=None, current=None, total=None):
61
if None not in (current, total) and total > 0:
62
self.set_fraction(1.0 * current / total)
63
while gtk.events_pending():
67
class GtkProgressBarStack(gtk.Window):
69
super(GtkProgressBarStack, self).__init__(type=gtk.WINDOW_TOPLEVEL)
70
self.set_border_width(0)
71
self.set_title("Progress")
72
self.set_position(gtk.WIN_POS_CENTER_ALWAYS)
73
self.vbox = gtk.VBox()
75
self.set_resizable(False)
77
def _adapt_size(self):
78
self.resize(250, 15 * len(self.vbox.get_children()))
81
nested = GtkProgressBar(self)
82
self.vbox.pack_start(nested)
89
if len(self.vbox.get_children()) == 0: # If there is nothing to show, don't leave a ghost window here
40
self.add_buttons(gtk.STOCK_YES, gtk.RESPONSE_YES, gtk.STOCK_NO, gtk.RESPONSE_NO)
93
43
class PasswordDialog(gtk.Dialog):
116
66
"""A UI factory for GTK user interfaces."""
118
68
def __init__(self,
121
72
"""Create a GtkUIFactory.
74
:param bar_type: The type of progress bar to create. It defaults to
75
letting the bzrlib.progress.ProgressBar factory auto
124
78
super(GtkUIFactory, self).__init__()
125
self._progress_bar_stack = None
79
self._bar_type = bar_type
81
self.stdout = sys.stdout
85
self.stderr = sys.stderr
127
89
def get_boolean(self, prompt):
128
90
"""GtkDialog with yes/no answers"""
132
94
return (response == gtk.RESPONSE_YES)
96
@deprecated_method(zero_eight)
97
def progress_bar(self):
98
"""See UIFactory.nested_progress_bar()."""
99
# this in turn is abstract, and creates either a tty or dots
100
# bar depending on what we think of the terminal
101
return bzrlib.progress.ProgressBar()
134
103
def get_password(self, prompt='', **kwargs):
135
104
"""Prompt the user for a password.
153
122
def nested_progress_bar(self):
154
123
"""Return a nested progress bar.
125
The actual bar type returned depends on the progress module which
126
may return a tty or dots bar depending on the terminal.
128
FIXME: It should return a GtkProgressBar actually.
156
130
if self._progress_bar_stack is None:
157
self._progress_bar_stack = GtkProgressBarStack()
131
self._progress_bar_stack = bzrlib.progress.ProgressBarStack(
132
klass=self._bar_type)
158
133
return self._progress_bar_stack.get_nested()
160
def set_progress_bar_vbox(self, vbox):
161
"""Change the vbox to put progress bars in.
163
self._progress_bar_stack = vbox
165
135
def clear_term(self):
166
136
"""Prepare the terminal for output.