/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: Jasper Groenewegen
  • Date: 2008-07-27 12:01:40 UTC
  • mfrom: (576.3.2 improve-merge)
  • mto: This revision was merged to the branch mainline in revision 579.
  • Revision ID: colbrac@xs4all.nl-20080727120140-1agdlzkc9fumjk5f
Merge merge dialog improvements

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
# Copyright (C) 2006 Szilveszter Farkas <szilveszter.farkas@gmail.com>
 
2
# Copyright (C) 2007 Jelmer Vernooij <jelmer@samba.org>
2
3
 
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
21
22
import gtk
22
23
import sys
23
24
 
24
 
import bzrlib.progress
 
25
from bzrlib import progress
25
26
from bzrlib.ui import UIFactory
26
27
 
27
28
 
35
36
        
36
37
        self.vbox.show_all()
37
38
 
38
 
        self.add_buttons(gtk.STOCK_YES, gtk.RESPONSE_YES, gtk.STOCK_NO, gtk.RESPONSE_NO)
39
 
 
40
 
 
41
 
class GtkProgressBar(gtk.ProgressBar):
42
 
    def __init__(self, stack):
43
 
        super(GtkProgressBar, self).__init__()
 
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)
44
46
        self.set_fraction(0.0)
45
 
        self._stack = stack
46
 
 
47
 
    def finished(self):
48
 
        self._stack.remove(self)
 
47
        progress._BaseProgressBar.__init__(self, _stack=_stack)
 
48
        self.current = None
 
49
        self.total = None
49
50
 
50
51
    def clear(self):
51
 
        pass
 
52
        self.hide()
52
53
 
53
54
    def tick(self):
54
55
        self.pulse()
55
56
 
56
 
    def update(self, msg=None, current=None, total=None):
 
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 is not None:
 
62
            self.current = current_cnt
 
63
        if total_cnt is not None:
 
64
            self.total = total_cnt
57
65
        if msg is not None:
58
66
            self.set_text(msg)
59
 
        self.set_fraction(1.0 * current / total)
 
67
        if None not in (self.current, self.total):
 
68
            self.fraction = float(self.current) / self.total
 
69
            if self.fraction < 0.0 or self.fraction > 1.0:
 
70
                raise AssertionError
 
71
            self.set_fraction(self.fraction)
60
72
        while gtk.events_pending():
61
73
            gtk.main_iteration()
62
74
 
63
75
 
64
 
class GtkProgressBarStack(gtk.Window):
65
 
    def __init__(self):
66
 
        super(GtkProgressBarStack, self).__init__(type=gtk.WINDOW_TOPLEVEL)
 
76
class ProgressBarWindow(gtk.Window):
 
77
    def __init__(self, to_file=None, show_pct=None, show_spinner=None, show_eta=None, 
 
78
                 show_bar=None, show_count=None, to_messages_file=None, _stack=None):
 
79
        super(ProgressBarWindow, self).__init__(type=gtk.WINDOW_TOPLEVEL)
 
80
        self._stack = _stack
67
81
        self.set_border_width(0)
68
82
        self.set_title("Progress")
69
83
        self.set_position(gtk.WIN_POS_CENTER_ALWAYS)
70
 
        self.vbox = gtk.VBox()
71
 
        self.add(self.vbox)
 
84
        self.pb = GtkProgressBar(self)
 
85
        self.add(self.pb)
 
86
        self.resize(250, 15)
72
87
        self.set_resizable(False)
73
 
 
74
 
    def _adapt_size(self):
75
 
        self.resize(250, 15 * len(self.vbox.get_children()))
76
 
 
77
 
    def get_nested(self):
78
 
        nested = GtkProgressBar(self)
79
 
        self.vbox.pack_start(nested)
80
 
        self._adapt_size()
81
 
        self.show_all()
82
 
        return nested
83
 
 
84
 
    def remove(self, pb):
85
 
        self.vbox.remove(pb)
 
88
        self.show_all()
 
89
 
 
90
    def return_pb(self, pb):
 
91
        self._stack.return_pb(self)
 
92
    
 
93
    def update(self, *args, **kwargs):
 
94
        self.pb.update(*args, **kwargs)
 
95
 
 
96
    def tick(self, *args, **kwargs):
 
97
        self.pb.tick(*args, **kwargs)
 
98
 
 
99
    def finished(self):
 
100
        self.pb.finished()
 
101
        self.hide_all()
 
102
 
 
103
    def clear(self):
 
104
        self.pb.clear()
 
105
        self.destroy()
 
106
 
 
107
    def child_progress(self, *args, **kwargs):
 
108
        return self.pb.child_progress(*args, **kwargs)
 
109
 
 
110
    def child_update(self, *args, **kwargs):
 
111
        return self.pb.child_update(*args, **kwargs)
 
112
 
 
113
    def get_progress_bar(self):
 
114
        self.show_all()
 
115
        return self
 
116
 
 
117
 
 
118
class ProgressPanel(gtk.HBox):
 
119
    def __init__(self):
 
120
        super(ProgressPanel, self).__init__()
 
121
        image_loading = gtk.image_new_from_stock(gtk.STOCK_REFRESH,
 
122
                                                 gtk.ICON_SIZE_BUTTON)
 
123
        image_loading.show()
 
124
        
 
125
        self.pb = GtkProgressBar(self)
 
126
        self.set_spacing(5)
 
127
        self.set_border_width(5)        
 
128
        self.pack_start(image_loading, False, False)
 
129
        self.pack_start(self.pb, True, True)
 
130
 
 
131
    def return_pb(self, pb):
 
132
        self._stack.return_pb(self)
 
133
 
 
134
    def get_progress_bar(self, to_file=None, show_pct=None, show_spinner=None, show_eta=None, 
 
135
                         show_bar=None, show_count=None, to_messages_file=None, 
 
136
                         _stack=None):
 
137
        self._stack = _stack
 
138
        self.show_all()
 
139
        return self
 
140
 
 
141
    def tick(self, *args, **kwargs):
 
142
        self.pb.tick(*args, **kwargs)
 
143
    
 
144
    def update(self, *args, **kwargs):
 
145
        self.pb.update(*args, **kwargs)
 
146
 
 
147
    def finished(self):
 
148
        self.pb.finished()
 
149
        self.hide_all()
 
150
 
 
151
    def clear(self):
 
152
        self.pb.clear()
 
153
        self.hide_all()
 
154
 
 
155
    def child_progress(self, *args, **kwargs):
 
156
        return self.pb.child_progress(*args, **kwargs)
 
157
 
 
158
    def child_update(self, *args, **kwargs):
 
159
        return self.pb.child_update(*args, **kwargs)
 
160
 
86
161
 
87
162
 
88
163
class PasswordDialog(gtk.Dialog):
117
192
 
118
193
        """
119
194
        super(GtkUIFactory, self).__init__()
120
 
        if stdout is None:
121
 
            self.stdout = sys.stdout
122
 
        else:
123
 
            self.stdout = stdout
124
 
        if stderr is None:
125
 
            self.stderr = sys.stderr
126
 
        else:
127
 
            self.stderr = stderr
128
 
        self._progress_bar_stack = None
 
195
        self.set_nested_progress_bar_widget(ProgressBarWindow)
129
196
 
130
197
    def get_boolean(self, prompt):
131
198
        """GtkDialog with yes/no answers"""
153
220
        else:
154
221
            return None
155
222
 
 
223
    def set_nested_progress_bar_widget(self, widget):
 
224
        self._progress_bar_stack = progress.ProgressBarStack(klass=widget)
 
225
 
156
226
    def nested_progress_bar(self):
157
227
        """Return a nested progress bar.
158
228
        """
159
 
        if self._progress_bar_stack is None:
160
 
            self._progress_bar_stack = GtkProgressBarStack()
161
229
        return self._progress_bar_stack.get_nested()
162
230
 
163
231
    def set_progress_bar_vbox(self, vbox):