/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: Szilveszter Farkas (Phanatic)
  • Date: 2007-06-10 15:54:57 UTC
  • Revision ID: szilveszter.farkas@gmail.com-20070610155457-15my7i27pj2tbkml
Version bumped to 0.17.0 in setup.py.

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>
3
2
 
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
22
21
import gtk
23
22
import sys
24
23
 
25
 
from bzrlib import progress
 
24
import bzrlib.progress
26
25
from bzrlib.ui import UIFactory
27
26
 
28
27
 
36
35
        
37
36
        self.vbox.show_all()
38
37
 
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)
 
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__()
46
44
        self.set_fraction(0.0)
47
 
        progress._BaseProgressBar.__init__(self, _stack=_stack)
48
 
        self.current = None
49
 
        self.total = None
 
45
        self._stack = stack
 
46
 
 
47
    def finished(self):
 
48
        self._stack.remove(self)
50
49
 
51
50
    def clear(self):
52
 
        self.hide()
 
51
        pass
53
52
 
54
53
    def tick(self):
55
54
        self.pulse()
56
55
 
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
 
56
    def update(self, msg=None, current=None, total=None):
65
57
        if msg is not None:
66
58
            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)
 
59
        self.set_fraction(1.0 * current / total)
70
60
        while gtk.events_pending():
71
61
            gtk.main_iteration()
72
62
 
73
63
 
74
 
class ProgressBarWindow(gtk.Window):
 
64
class GtkProgressBarStack(gtk.Window):
75
65
    def __init__(self):
76
 
        super(ProgressBarWindow, self).__init__(type=gtk.WINDOW_TOPLEVEL)
 
66
        super(GtkProgressBarStack, self).__init__(type=gtk.WINDOW_TOPLEVEL)
77
67
        self.set_border_width(0)
78
68
        self.set_title("Progress")
79
69
        self.set_position(gtk.WIN_POS_CENTER_ALWAYS)
80
 
        self.pb = GtkProgressBar(self)
81
 
        self.add(self.pb)
82
 
        self.resize(250, 15)
 
70
        self.vbox = gtk.VBox()
 
71
        self.add(self.vbox)
83
72
        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
 
 
 
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)
131
86
 
132
87
 
133
88
class PasswordDialog(gtk.Dialog):
162
117
 
163
118
        """
164
119
        super(GtkUIFactory, self).__init__()
165
 
        self.set_nested_progress_bar_widget(ProgressBarWindow)
 
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
166
129
 
167
130
    def get_boolean(self, prompt):
168
131
        """GtkDialog with yes/no answers"""
190
153
        else:
191
154
            return None
192
155
 
193
 
    def set_nested_progress_bar_widget(self, widget):
194
 
        self._progress_bar_stack = progress.ProgressBarStack(klass=widget)
195
 
 
196
156
    def nested_progress_bar(self):
197
157
        """Return a nested progress bar.
198
158
        """
 
159
        if self._progress_bar_stack is None:
 
160
            self._progress_bar_stack = GtkProgressBarStack()
199
161
        return self._progress_bar_stack.get_nested()
200
162
 
201
163
    def set_progress_bar_vbox(self, vbox):