/b-gtk/fix-viz

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/b-gtk/fix-viz
0.8.11 by Szilveszter Farkas (Phanatic)
2006-07-16 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
1
# Copyright (C) 2006 Szilveszter Farkas <szilveszter.farkas@gmail.com>
225 by Jelmer Vernooij
Add docstrings, remove unused code.
2
# Copyright (C) 2007 Jelmer Vernooij <jelmer@samba.org>
0.8.11 by Szilveszter Farkas (Phanatic)
2006-07-16 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
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
734.1.1 by Curtis Hovey
Mechanical changes made by pygi.convert.sh.
22
from gi.repository import Gtk
0.8.11 by Szilveszter Farkas (Phanatic)
2006-07-16 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
23
24
from bzrlib.ui import UIFactory
25
26
734.1.1 by Curtis Hovey
Mechanical changes made by pygi.convert.sh.
27
class PromptDialog(Gtk.Dialog):
724 by Jelmer Vernooij
Fix formatting, imports.
28
    """Prompt the user for a yes/no answer."""
29
0.8.11 by Szilveszter Farkas (Phanatic)
2006-07-16 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
30
    def __init__(self, prompt):
734.1.51 by Curtis Hovey
Fix the initializer for many classes.
31
        super(PromptDialog, self).__init__()
645.1.1 by Vincent Ladeuil
Fix #385191 by using the new progress reporting API.
32
734.1.1 by Curtis Hovey
Mechanical changes made by pygi.convert.sh.
33
        label = Gtk.Label(label=prompt)
734.1.51 by Curtis Hovey
Fix the initializer for many classes.
34
        self.get_content_area().pack_start(label, True, True, 10)
35
        self.get_content_area().show_all()
0.8.11 by Szilveszter Farkas (Phanatic)
2006-07-16 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
36
734.1.1 by Curtis Hovey
Mechanical changes made by pygi.convert.sh.
37
        self.add_buttons(Gtk.STOCK_YES, Gtk.ResponseType.YES, Gtk.STOCK_NO,
38
                         Gtk.ResponseType.NO)
39
40
41
class GtkProgressBar(Gtk.ProgressBar):
645.1.1 by Vincent Ladeuil
Fix #385191 by using the new progress reporting API.
42
43
    def __init__(self):
734.1.51 by Curtis Hovey
Fix the initializer for many classes.
44
        super(GtkProgressBar, self).__init__()
174 by Jelmer Vernooij
Implement simple GTK+ progress bars.
45
        self.set_fraction(0.0)
475.2.1 by Chad MILLER
Make "vizualize" use the GUI progress bar defined in the parent 'ui' module.
46
        self.current = None
47
        self.total = None
174 by Jelmer Vernooij
Implement simple GTK+ progress bars.
48
49
    def tick(self):
645.1.2 by Vincent Ladeuil
Address Jelmer's review.
50
        self.show()
174 by Jelmer Vernooij
Implement simple GTK+ progress bars.
51
        self.pulse()
52
511.5.6 by Jelmer Vernooij
Simplify progress bar code, use embedded progress bar inside viz window.
53
    def update(self, msg=None, current_cnt=None, total_cnt=None):
645.1.1 by Vincent Ladeuil
Fix #385191 by using the new progress reporting API.
54
        self.show()
533.10.1 by Jelmer Vernooij
Consider 0 a valid value for progress bars.
55
        if current_cnt is not None:
511.5.6 by Jelmer Vernooij
Simplify progress bar code, use embedded progress bar inside viz window.
56
            self.current = current_cnt
533.10.1 by Jelmer Vernooij
Consider 0 a valid value for progress bars.
57
        if total_cnt is not None:
511.5.6 by Jelmer Vernooij
Simplify progress bar code, use embedded progress bar inside viz window.
58
            self.total = total_cnt
174 by Jelmer Vernooij
Implement simple GTK+ progress bars.
59
        if msg is not None:
60
            self.set_text(msg)
475.2.1 by Chad MILLER
Make "vizualize" use the GUI progress bar defined in the parent 'ui' module.
61
        if None not in (self.current, self.total):
511.5.6 by Jelmer Vernooij
Simplify progress bar code, use embedded progress bar inside viz window.
62
            self.fraction = float(self.current) / self.total
533.10.1 by Jelmer Vernooij
Consider 0 a valid value for progress bars.
63
            if self.fraction < 0.0 or self.fraction > 1.0:
64
                raise AssertionError
511.5.6 by Jelmer Vernooij
Simplify progress bar code, use embedded progress bar inside viz window.
65
            self.set_fraction(self.fraction)
734.1.1 by Curtis Hovey
Mechanical changes made by pygi.convert.sh.
66
        while Gtk.events_pending():
67
            Gtk.main_iteration()
174 by Jelmer Vernooij
Implement simple GTK+ progress bars.
68
645.1.1 by Vincent Ladeuil
Fix #385191 by using the new progress reporting API.
69
    def finished(self):
70
        self.hide()
71
72
    def clear(self):
73
        self.hide()
74
174 by Jelmer Vernooij
Implement simple GTK+ progress bars.
75
734.1.1 by Curtis Hovey
Mechanical changes made by pygi.convert.sh.
76
class ProgressBarWindow(Gtk.Window):
645.1.1 by Vincent Ladeuil
Fix #385191 by using the new progress reporting API.
77
78
    def __init__(self):
734.1.1 by Curtis Hovey
Mechanical changes made by pygi.convert.sh.
79
        super(ProgressBarWindow, self).__init__(type=Gtk.WindowType.TOPLEVEL)
174 by Jelmer Vernooij
Implement simple GTK+ progress bars.
80
        self.set_border_width(0)
81
        self.set_title("Progress")
734.1.1 by Curtis Hovey
Mechanical changes made by pygi.convert.sh.
82
        self.set_position(Gtk.WindowPosition.CENTER_ALWAYS)
645.1.1 by Vincent Ladeuil
Fix #385191 by using the new progress reporting API.
83
        self.pb = GtkProgressBar()
511.5.6 by Jelmer Vernooij
Simplify progress bar code, use embedded progress bar inside viz window.
84
        self.add(self.pb)
85
        self.resize(250, 15)
174 by Jelmer Vernooij
Implement simple GTK+ progress bars.
86
        self.set_resizable(False)
645.1.1 by Vincent Ladeuil
Fix #385191 by using the new progress reporting API.
87
88
    def tick(self, *args, **kwargs):
645.1.2 by Vincent Ladeuil
Address Jelmer's review.
89
        self.show_all()
645.1.1 by Vincent Ladeuil
Fix #385191 by using the new progress reporting API.
90
        self.pb.tick(*args, **kwargs)
91
92
    def update(self, *args, **kwargs):
511.5.6 by Jelmer Vernooij
Simplify progress bar code, use embedded progress bar inside viz window.
93
        self.show_all()
523.2.1 by Jelmer Vernooij
Fix Window-based progress indication.
94
        self.pb.update(*args, **kwargs)
95
96
    def finished(self):
645.1.2 by Vincent Ladeuil
Address Jelmer's review.
97
        self.pb.finished()
734.1.5 by Curtis Hovey
Update ProgressBarWindow to gtk3.
98
        self.hide()
511.5.6 by Jelmer Vernooij
Simplify progress bar code, use embedded progress bar inside viz window.
99
        self.destroy()
100
645.1.2 by Vincent Ladeuil
Address Jelmer's review.
101
    def clear(self):
102
        self.pb.clear()
734.1.5 by Curtis Hovey
Update ProgressBarWindow to gtk3.
103
        self.hide()
645.1.2 by Vincent Ladeuil
Address Jelmer's review.
104
511.5.6 by Jelmer Vernooij
Simplify progress bar code, use embedded progress bar inside viz window.
105
734.1.1 by Curtis Hovey
Mechanical changes made by pygi.convert.sh.
106
class ProgressPanel(Gtk.HBox):
645.1.1 by Vincent Ladeuil
Fix #385191 by using the new progress reporting API.
107
511.5.6 by Jelmer Vernooij
Simplify progress bar code, use embedded progress bar inside viz window.
108
    def __init__(self):
109
        super(ProgressPanel, self).__init__()
734.1.1 by Curtis Hovey
Mechanical changes made by pygi.convert.sh.
110
        image_loading = Gtk.Image.new_from_stock(Gtk.STOCK_REFRESH,
111
                                                 Gtk.IconSize.BUTTON)
511.5.6 by Jelmer Vernooij
Simplify progress bar code, use embedded progress bar inside viz window.
112
        image_loading.show()
645.1.1 by Vincent Ladeuil
Fix #385191 by using the new progress reporting API.
113
114
        self.pb = GtkProgressBar()
511.5.6 by Jelmer Vernooij
Simplify progress bar code, use embedded progress bar inside viz window.
115
        self.set_spacing(5)
645.1.1 by Vincent Ladeuil
Fix #385191 by using the new progress reporting API.
116
        self.set_border_width(5)
734.1.24 by Curtis Hovey
Updated most of BranchView to gtk3.
117
        self.pack_start(image_loading, False, False, 0)
118
        self.pack_start(self.pb, True, True, 0)
511.5.6 by Jelmer Vernooij
Simplify progress bar code, use embedded progress bar inside viz window.
119
562.1.4 by Jelmer Vernooij
Implement tick in ProgressPanel.
120
    def tick(self, *args, **kwargs):
645.1.2 by Vincent Ladeuil
Address Jelmer's review.
121
        self.show_all()
562.1.4 by Jelmer Vernooij
Implement tick in ProgressPanel.
122
        self.pb.tick(*args, **kwargs)
645.1.1 by Vincent Ladeuil
Fix #385191 by using the new progress reporting API.
123
511.5.6 by Jelmer Vernooij
Simplify progress bar code, use embedded progress bar inside viz window.
124
    def update(self, *args, **kwargs):
645.1.1 by Vincent Ladeuil
Fix #385191 by using the new progress reporting API.
125
        self.show_all()
511.5.6 by Jelmer Vernooij
Simplify progress bar code, use embedded progress bar inside viz window.
126
        self.pb.update(*args, **kwargs)
127
128
    def finished(self):
129
        self.pb.finished()
734.1.24 by Curtis Hovey
Updated most of BranchView to gtk3.
130
        self.hide()
511.5.6 by Jelmer Vernooij
Simplify progress bar code, use embedded progress bar inside viz window.
131
132
    def clear(self):
133
        self.pb.clear()
734.1.24 by Curtis Hovey
Updated most of BranchView to gtk3.
134
        self.hide()
511.5.6 by Jelmer Vernooij
Simplify progress bar code, use embedded progress bar inside viz window.
135
174 by Jelmer Vernooij
Implement simple GTK+ progress bars.
136
734.1.1 by Curtis Hovey
Mechanical changes made by pygi.convert.sh.
137
class PasswordDialog(Gtk.Dialog):
0.8.11 by Szilveszter Farkas (Phanatic)
2006-07-16 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
138
    """ Prompt the user for a password. """
645.1.2 by Vincent Ladeuil
Address Jelmer's review.
139
0.8.11 by Szilveszter Farkas (Phanatic)
2006-07-16 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
140
    def __init__(self, prompt):
734.1.51 by Curtis Hovey
Fix the initializer for many classes.
141
        super(PasswordDialog, self).__init__()
734.1.1 by Curtis Hovey
Mechanical changes made by pygi.convert.sh.
142
143
        label = Gtk.Label(label=prompt)
734.1.51 by Curtis Hovey
Fix the initializer for many classes.
144
        self.get_content_area().pack_start(label, True, True, 10)
734.1.1 by Curtis Hovey
Mechanical changes made by pygi.convert.sh.
145
146
        self.entry = Gtk.Entry()
0.8.11 by Szilveszter Farkas (Phanatic)
2006-07-16 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
147
        self.entry.set_visibility(False)
734.1.53 by Curtis Hovey
Fixed packing args.
148
        self.get_content_area().pack_end(self.entry, False, False, 10)
645.1.1 by Vincent Ladeuil
Fix #385191 by using the new progress reporting API.
149
734.1.51 by Curtis Hovey
Fix the initializer for many classes.
150
        self.get_content_area().show_all()
645.1.1 by Vincent Ladeuil
Fix #385191 by using the new progress reporting API.
151
734.1.1 by Curtis Hovey
Mechanical changes made by pygi.convert.sh.
152
        self.add_buttons(Gtk.STOCK_OK, Gtk.ResponseType.OK,
153
                         Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL)
645.1.1 by Vincent Ladeuil
Fix #385191 by using the new progress reporting API.
154
0.8.11 by Szilveszter Farkas (Phanatic)
2006-07-16 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
155
    def _get_passwd(self):
156
        return self.entry.get_text()
157
158
    passwd = property(_get_passwd)
159
160
161
class GtkUIFactory(UIFactory):
0.13.12 by Jelmer Vernooij
Bunch of other small updates, add more items to
162
    """A UI factory for GTK user interfaces."""
0.8.11 by Szilveszter Farkas (Phanatic)
2006-07-16 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
163
645.1.1 by Vincent Ladeuil
Fix #385191 by using the new progress reporting API.
164
    def __init__(self):
165
        """Create a GtkUIFactory"""
0.8.11 by Szilveszter Farkas (Phanatic)
2006-07-16 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
166
        super(GtkUIFactory, self).__init__()
645.1.2 by Vincent Ladeuil
Address Jelmer's review.
167
        self.set_progress_bar_widget(None)
0.8.11 by Szilveszter Farkas (Phanatic)
2006-07-16 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
168
645.1.3 by Vincent Ladeuil
Cleanup.
169
    def set_progress_bar_widget(self, widget):
170
        self._progress_bar_widget = widget
171
0.8.11 by Szilveszter Farkas (Phanatic)
2006-07-16 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
172
    def get_boolean(self, prompt):
173
        """GtkDialog with yes/no answers"""
174
        dialog = PromptDialog(prompt)
175
        response = dialog.run()
176
        dialog.destroy()
734.1.1 by Curtis Hovey
Mechanical changes made by pygi.convert.sh.
177
        return (response == Gtk.ResponseType.YES)
645.1.1 by Vincent Ladeuil
Fix #385191 by using the new progress reporting API.
178
0.8.11 by Szilveszter Farkas (Phanatic)
2006-07-16 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
179
    def get_password(self, prompt='', **kwargs):
180
        """Prompt the user for a password.
181
182
        :param prompt: The prompt to present the user
183
        :param kwargs: Arguments which will be expanded into the prompt.
184
                       This lets front ends display different things if
185
                       they so choose.
186
        :return: The password string, return None if the user 
187
                 canceled the request.
188
        """
189
        dialog = PasswordDialog(prompt % kwargs)
190
        response = dialog.run()
191
        passwd = dialog.passwd
192
        dialog.destroy()
734.1.1 by Curtis Hovey
Mechanical changes made by pygi.convert.sh.
193
        if response == Gtk.ResponseType.OK:
0.8.11 by Szilveszter Farkas (Phanatic)
2006-07-16 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
194
            return passwd
195
        else:
196
            return None
197
645.1.1 by Vincent Ladeuil
Fix #385191 by using the new progress reporting API.
198
    def _progress_all_finished(self):
199
        """See UIFactory._progress_all_finished"""
200
        pbw = self._progress_bar_widget
201
        if pbw:
202
            pbw.finished()
203
204
    def _progress_updated(self, task):
205
        """See UIFactory._progress_updated"""
645.1.2 by Vincent Ladeuil
Address Jelmer's review.
206
        if self._progress_bar_widget is None:
207
            # Default to a window since nobody gave us a better mean to report
208
            # progress.
209
            self.set_progress_bar_widget(ProgressBarWindow())
210
        self._progress_bar_widget.update(task.msg,
211
                                         task.current_cnt, task.total_cnt)
645.1.1 by Vincent Ladeuil
Fix #385191 by using the new progress reporting API.
212