1
1
# Copyright (C) 2006 Szilveszter Farkas <szilveszter.farkas@gmail.com>
2
# Copyright (C) 2007 Jelmer Vernooij <jelmer@samba.org>
3
4
# This program is free software; you can redistribute it and/or modify
4
5
# it under the terms of the GNU General Public License as published by
38
37
self.vbox.show_all()
40
self.add_buttons(gtk.STOCK_YES, gtk.RESPONSE_YES, gtk.STOCK_NO, gtk.RESPONSE_NO)
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)
52
self._stack.remove(self)
60
def update(self, msg=None, current=None, total=None):
62
self.current = current
67
if None not in (self.current, self.total):
68
self.set_fraction(1.0 * self.current / self.total)
69
while gtk.events_pending():
73
class GtkWindowProgressBarStack(gtk.Window):
75
super(GtkWindowProgressBarStack, self).__init__(type=gtk.WINDOW_TOPLEVEL)
76
self.set_border_width(0)
77
self.set_title("Progress")
78
self.set_position(gtk.WIN_POS_CENTER_ALWAYS)
79
self.vbox = gtk.VBox()
81
self.set_resizable(False)
83
def _adapt_size(self):
84
self.resize(250, 15 * len(self.vbox.get_children()))
87
nested = GtkProgressBar(self)
88
self.vbox.pack_start(nested)
95
if len(self.vbox.get_children()) == 0: # If there is nothing to show, don't leave a ghost window here
43
99
class PasswordDialog(gtk.Dialog):
66
122
"""A UI factory for GTK user interfaces."""
68
124
def __init__(self,
72
127
"""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
78
130
super(GtkUIFactory, self).__init__()
79
self._bar_type = bar_type
81
self.stdout = sys.stdout
85
self.stderr = sys.stderr
131
self._progress_bar_stack = None
89
133
def get_boolean(self, prompt):
90
134
"""GtkDialog with yes/no answers"""
94
138
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()
103
140
def get_password(self, prompt='', **kwargs):
104
141
"""Prompt the user for a password.
122
159
def nested_progress_bar(self):
123
160
"""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.
130
162
if self._progress_bar_stack is None:
131
self._progress_bar_stack = bzrlib.progress.ProgressBarStack(
132
klass=self._bar_type)
163
self._progress_bar_stack = GtkWindowProgressBarStack()
133
164
return self._progress_bar_stack.get_nested()
166
def set_progress_bar_vbox(self, vbox):
167
"""Change the vbox to put progress bars in.
169
self._progress_bar_stack = vbox
135
171
def clear_term(self):
136
172
"""Prepare the terminal for output.