/b-gtk/fix-viz

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/b-gtk/fix-viz

« back to all changes in this revision

Viewing changes to ui.py

  • Committer: David Allouche
  • Date: 2006-05-08 13:03:59 UTC
  • Revision ID: david.allouche@canonical.com-20060508130359-f9a471d0d0b1dcf2
remove --robust, pyflakes fixes, update README

Thanks to Robert Collins' new graphing logic, the --robust option is
no longer needed to prevent extreme graph width on broken branches.
That allows removing a bunch of flaky code.

Remove a few spurious imports (thanks to pyflakes).

Update README to request bzr>=0.8.

Show diffs side-by-side

added added

removed removed

Lines of Context:
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
5
 
# it under the terms of the GNU General Public License as published by
6
 
# the Free Software Foundation; either version 2 of the License, or
7
 
# (at your option) any later version.
8
 
 
9
 
# This program is distributed in the hope that it will be useful,
10
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
 
# GNU General Public License for more details.
13
 
 
14
 
# You should have received a copy of the GNU General Public License
15
 
# along with this program; if not, write to the Free Software
16
 
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17
 
 
18
 
 
19
 
"""GTK UI
20
 
"""
21
 
 
22
 
import gtk
23
 
import sys
24
 
 
25
 
from bzrlib import progress
26
 
from bzrlib.ui import UIFactory
27
 
 
28
 
 
29
 
class PromptDialog(gtk.Dialog):
30
 
    """ Prompt the user for a yes/no answer. """
31
 
    def __init__(self, prompt):
32
 
        gtk.Dialog.__init__(self)
33
 
        
34
 
        label = gtk.Label(prompt)
35
 
        self.vbox.pack_start(label, padding=10)
36
 
        
37
 
        self.vbox.show_all()
38
 
 
39
 
        self.add_buttons(gtk.STOCK_YES, gtk.RESPONSE_YES, gtk.STOCK_NO, 
40
 
                         gtk.RESPONSE_NO)
41
 
 
42
 
 
43
 
class GtkProgressBar(gtk.ProgressBar,progress._BaseProgressBar):
44
 
    def __init__(self, _stack=None):
45
 
        gtk.ProgressBar.__init__(self)
46
 
        self.set_fraction(0.0)
47
 
        progress._BaseProgressBar.__init__(self, _stack=_stack)
48
 
        self.current = None
49
 
        self.total = None
50
 
 
51
 
    def clear(self):
52
 
        self.hide()
53
 
 
54
 
    def tick(self):
55
 
        self.pulse()
56
 
 
57
 
    def child_update(self, message, current, total):
58
 
        pass
59
 
 
60
 
    def update(self, msg=None, current_cnt=None, total_cnt=None):
61
 
        if current_cnt:
62
 
            self.current = current_cnt
63
 
        if total_cnt:
64
 
            self.total = total_cnt
65
 
        if msg is not None:
66
 
            self.set_text(msg)
67
 
        if None not in (self.current, self.total):
68
 
            self.fraction = float(self.current) / self.total
69
 
            self.set_fraction(self.fraction)
70
 
        while gtk.events_pending():
71
 
            gtk.main_iteration()
72
 
 
73
 
 
74
 
class ProgressBarWindow(gtk.Window):
75
 
    def __init__(self):
76
 
        super(ProgressBarWindow, self).__init__(type=gtk.WINDOW_TOPLEVEL)
77
 
        self.set_border_width(0)
78
 
        self.set_title("Progress")
79
 
        self.set_position(gtk.WIN_POS_CENTER_ALWAYS)
80
 
        self.pb = GtkProgressBar(self)
81
 
        self.add(self.pb)
82
 
        self.resize(250, 15)
83
 
        self.set_resizable(False)
84
 
        self.show_all()
85
 
 
86
 
    def clear(self):
87
 
        self.pb.clear()
88
 
        self.destroy()
89
 
 
90
 
 
91
 
class ProgressPanel(gtk.HBox):
92
 
    def __init__(self):
93
 
        super(ProgressPanel, self).__init__()
94
 
        image_loading = gtk.image_new_from_stock(gtk.STOCK_REFRESH,
95
 
                                                 gtk.ICON_SIZE_BUTTON)
96
 
        image_loading.show()
97
 
        
98
 
        self.pb = GtkProgressBar(self)
99
 
        self.set_spacing(5)
100
 
        self.set_border_width(5)        
101
 
        self.pack_start(image_loading, False, False)
102
 
        self.pack_start(self.pb, True, True)
103
 
 
104
 
    def return_pb(self, pb):
105
 
        self._stack.return_pb(self)
106
 
 
107
 
    def get_progress_bar(self, to_file=None, show_pct=None, show_spinner=None, show_eta=None, 
108
 
                         show_bar=None, show_count=None, to_messages_file=None, 
109
 
                         _stack=None):
110
 
        self._stack = _stack
111
 
        self.show_all()
112
 
        return self
113
 
    
114
 
    def update(self, *args, **kwargs):
115
 
        self.pb.update(*args, **kwargs)
116
 
 
117
 
    def finished(self):
118
 
        self.pb.finished()
119
 
        self.hide_all()
120
 
 
121
 
    def clear(self):
122
 
        self.pb.clear()
123
 
        self.hide_all()
124
 
 
125
 
    def child_progress(self, *args, **kwargs):
126
 
        return self.pb.child_progress(*args, **kwargs)
127
 
 
128
 
    def child_update(self, *args, **kwargs):
129
 
        return self.pb.child_update(*args, **kwargs)
130
 
 
131
 
 
132
 
 
133
 
class PasswordDialog(gtk.Dialog):
134
 
    """ Prompt the user for a password. """
135
 
    def __init__(self, prompt):
136
 
        gtk.Dialog.__init__(self)
137
 
        
138
 
        label = gtk.Label(prompt)
139
 
        self.vbox.pack_start(label, padding=10)
140
 
        
141
 
        self.entry = gtk.Entry()
142
 
        self.entry.set_visibility(False)
143
 
        self.vbox.pack_end(self.entry, padding=10)
144
 
        
145
 
        self.vbox.show_all()
146
 
        
147
 
        self.add_buttons(gtk.STOCK_OK, gtk.RESPONSE_OK, gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL)
148
 
    
149
 
    def _get_passwd(self):
150
 
        return self.entry.get_text()
151
 
 
152
 
    passwd = property(_get_passwd)
153
 
 
154
 
 
155
 
class GtkUIFactory(UIFactory):
156
 
    """A UI factory for GTK user interfaces."""
157
 
 
158
 
    def __init__(self,
159
 
                 stdout=None,
160
 
                 stderr=None):
161
 
        """Create a GtkUIFactory.
162
 
 
163
 
        """
164
 
        super(GtkUIFactory, self).__init__()
165
 
        self.set_nested_progress_bar_widget(ProgressBarWindow)
166
 
 
167
 
    def get_boolean(self, prompt):
168
 
        """GtkDialog with yes/no answers"""
169
 
        dialog = PromptDialog(prompt)
170
 
        response = dialog.run()
171
 
        dialog.destroy()
172
 
        return (response == gtk.RESPONSE_YES)
173
 
        
174
 
    def get_password(self, prompt='', **kwargs):
175
 
        """Prompt the user for a password.
176
 
 
177
 
        :param prompt: The prompt to present the user
178
 
        :param kwargs: Arguments which will be expanded into the prompt.
179
 
                       This lets front ends display different things if
180
 
                       they so choose.
181
 
        :return: The password string, return None if the user 
182
 
                 canceled the request.
183
 
        """
184
 
        dialog = PasswordDialog(prompt % kwargs)
185
 
        response = dialog.run()
186
 
        passwd = dialog.passwd
187
 
        dialog.destroy()
188
 
        if response == gtk.RESPONSE_OK:
189
 
            return passwd
190
 
        else:
191
 
            return None
192
 
 
193
 
    def set_nested_progress_bar_widget(self, widget):
194
 
        self._progress_bar_stack = progress.ProgressBarStack(klass=widget)
195
 
 
196
 
    def nested_progress_bar(self):
197
 
        """Return a nested progress bar.
198
 
        """
199
 
        return self._progress_bar_stack.get_nested()
200
 
 
201
 
    def set_progress_bar_vbox(self, vbox):
202
 
        """Change the vbox to put progress bars in.
203
 
        """
204
 
        self._progress_bar_stack = vbox
205
 
 
206
 
    def clear_term(self):
207
 
        """Prepare the terminal for output.
208
 
 
209
 
        It has no sense when talking about GTK."""
210
 
        pass