/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 olive/backend/ui.py

  • Committer: Szilveszter Farkas (Phanatic)
  • Date: 2006-07-21 18:18:20 UTC
  • mto: (0.14.1 main) (93.1.1 win32.bialix)
  • mto: This revision was merged to the branch mainline in revision 83.
  • Revision ID: Szilveszter.Farkas@gmail.com-20060721181820-450b5e29bb2614d9
2006-07-21  Szilveszter Farkas <Szilveszter.Farkas@gmail.com>

    * olive/olive.glade: some UI refreshment (push, remove and commit dialog)
    * olive/frontend/gtk/push.py: implemented 'push' functionality
    * olive/frontend/gtk/commit.py: implemented 'commit' functionality
    * olive/frontend/gtk/remove.py: implemented 'remove' functionality
    * olive/frontend/gtk/add.py: implemented 'add' functionality
    * olive/frontend/gtk/handler.py: implemented 'init' functionality
    * olive/backend/fileops.py: added recursive mode to add(), added
      NotBranchError exception to add() and remove()

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
 
25
from bzrlib.symbol_versioning import (deprecated_method, 
 
26
        zero_eight)
26
27
from bzrlib.ui import UIFactory
27
28
 
28
29
 
36
37
        
37
38
        self.vbox.show_all()
38
39
 
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
 
 
 
40
        self.add_buttons(gtk.STOCK_YES, gtk.RESPONSE_YES, gtk.STOCK_NO, gtk.RESPONSE_NO)
131
41
 
132
42
 
133
43
class PasswordDialog(gtk.Dialog):
153
63
 
154
64
 
155
65
class GtkUIFactory(UIFactory):
156
 
    """A UI factory for GTK user interfaces."""
 
66
    """A UI factory for GTK user interefaces."""
157
67
 
158
68
    def __init__(self,
 
69
                 bar_type=None,
159
70
                 stdout=None,
160
71
                 stderr=None):
161
72
        """Create a GtkUIFactory.
162
73
 
 
74
        :param bar_type: The type of progress bar to create. It defaults to 
 
75
                         letting the bzrlib.progress.ProgressBar factory auto
 
76
                         select.
163
77
        """
164
78
        super(GtkUIFactory, self).__init__()
165
 
        self.set_nested_progress_bar_widget(ProgressBarWindow)
 
79
        self._bar_type = bar_type
 
80
        if stdout is None:
 
81
            self.stdout = sys.stdout
 
82
        else:
 
83
            self.stdout = stdout
 
84
        if stderr is None:
 
85
            self.stderr = sys.stderr
 
86
        else:
 
87
            self.stderr = stderr
166
88
 
167
89
    def get_boolean(self, prompt):
168
90
        """GtkDialog with yes/no answers"""
169
91
        dialog = PromptDialog(prompt)
170
92
        response = dialog.run()
171
93
        dialog.destroy()
172
 
        return (response == gtk.RESPONSE_YES)
 
94
        if response == gtk.RESPONSE_YES:
 
95
            return True
 
96
        else:
 
97
            return False
173
98
        
 
99
    @deprecated_method(zero_eight)
 
100
    def progress_bar(self):
 
101
        """See UIFactory.nested_progress_bar()."""
 
102
        # this in turn is abstract, and creates either a tty or dots
 
103
        # bar depending on what we think of the terminal
 
104
        return bzrlib.progress.ProgressBar()
 
105
 
174
106
    def get_password(self, prompt='', **kwargs):
175
107
        """Prompt the user for a password.
176
108
 
190
122
        else:
191
123
            return None
192
124
 
193
 
    def set_nested_progress_bar_widget(self, widget):
194
 
        self._progress_bar_stack = progress.ProgressBarStack(klass=widget)
195
 
 
196
125
    def nested_progress_bar(self):
197
126
        """Return a nested progress bar.
 
127
        
 
128
        The actual bar type returned depends on the progress module which
 
129
        may return a tty or dots bar depending on the terminal.
 
130
        
 
131
        FIXME: It should return a GtkProgressBar actually.
198
132
        """
 
133
        if self._progress_bar_stack is None:
 
134
            self._progress_bar_stack = bzrlib.progress.ProgressBarStack(
 
135
                klass=self._bar_type)
199
136
        return self._progress_bar_stack.get_nested()
200
137
 
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
138
    def clear_term(self):
207
139
        """Prepare the terminal for output.
208
140