/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-08-20 13:02:35 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-20060820130235-62c9c5753f5d8774
Gettext support added.

2006-08-20  Szilveszter Farkas <Szilveszter.Farkas@gmail.com>

    * po/hu.po: added Hungarian traslation
    * Added gettext support to all files.
    * genpot.sh: added olive-gtk.pot generator script

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
 
30
31
    """ Prompt the user for a yes/no answer. """
31
32
    def __init__(self, prompt):
32
33
        gtk.Dialog.__init__(self)
33
 
 
 
34
        
34
35
        label = gtk.Label(prompt)
35
36
        self.vbox.pack_start(label, padding=10)
 
37
        
36
38
        self.vbox.show_all()
37
39
 
38
 
        self.add_buttons(gtk.STOCK_YES, gtk.RESPONSE_YES, gtk.STOCK_NO,
39
 
                         gtk.RESPONSE_NO)
40
 
 
41
 
 
42
 
class GtkProgressBar(gtk.ProgressBar):
43
 
 
44
 
    def __init__(self):
45
 
        gtk.ProgressBar.__init__(self)
46
 
        self.set_fraction(0.0)
47
 
        self.current = None
48
 
        self.total = None
49
 
 
50
 
    def tick(self):
51
 
        self.show()
52
 
        self.pulse()
53
 
 
54
 
    def update(self, msg=None, current_cnt=None, total_cnt=None):
55
 
        self.show()
56
 
        if current_cnt is not None:
57
 
            self.current = current_cnt
58
 
        if total_cnt is not None:
59
 
            self.total = total_cnt
60
 
        if msg is not None:
61
 
            self.set_text(msg)
62
 
        if None not in (self.current, self.total):
63
 
            self.fraction = float(self.current) / self.total
64
 
            if self.fraction < 0.0 or self.fraction > 1.0:
65
 
                raise AssertionError
66
 
            self.set_fraction(self.fraction)
67
 
        while gtk.events_pending():
68
 
            gtk.main_iteration()
69
 
 
70
 
    def finished(self):
71
 
        self.hide()
72
 
 
73
 
    def clear(self):
74
 
        self.hide()
75
 
 
76
 
 
77
 
class ProgressBarWindow(gtk.Window):
78
 
 
79
 
    def __init__(self):
80
 
        super(ProgressBarWindow, self).__init__(type=gtk.WINDOW_TOPLEVEL)
81
 
        self.set_border_width(0)
82
 
        self.set_title("Progress")
83
 
        self.set_position(gtk.WIN_POS_CENTER_ALWAYS)
84
 
        self.pb = GtkProgressBar()
85
 
        self.add(self.pb)
86
 
        self.resize(250, 15)
87
 
        self.set_resizable(False)
88
 
 
89
 
    def tick(self, *args, **kwargs):
90
 
        self.show_all()
91
 
        self.pb.tick(*args, **kwargs)
92
 
 
93
 
    def update(self, *args, **kwargs):
94
 
        self.show_all()
95
 
        self.pb.update(*args, **kwargs)
96
 
 
97
 
    def finished(self):
98
 
        self.pb.finished()
99
 
        self.hide_all()
100
 
        self.destroy()
101
 
 
102
 
    def clear(self):
103
 
        self.pb.clear()
104
 
        self.hide_all()
105
 
 
106
 
 
107
 
class ProgressPanel(gtk.HBox):
108
 
 
109
 
    def __init__(self):
110
 
        super(ProgressPanel, self).__init__()
111
 
        image_loading = gtk.image_new_from_stock(gtk.STOCK_REFRESH,
112
 
                                                 gtk.ICON_SIZE_BUTTON)
113
 
        image_loading.show()
114
 
 
115
 
        self.pb = GtkProgressBar()
116
 
        self.set_spacing(5)
117
 
        self.set_border_width(5)
118
 
        self.pack_start(image_loading, False, False)
119
 
        self.pack_start(self.pb, True, True)
120
 
 
121
 
    def tick(self, *args, **kwargs):
122
 
        self.show_all()
123
 
        self.pb.tick(*args, **kwargs)
124
 
 
125
 
    def update(self, *args, **kwargs):
126
 
        self.show_all()
127
 
        self.pb.update(*args, **kwargs)
128
 
 
129
 
    def finished(self):
130
 
        self.pb.finished()
131
 
        self.hide_all()
132
 
 
133
 
    def clear(self):
134
 
        self.pb.clear()
135
 
        self.hide_all()
 
40
        self.add_buttons(gtk.STOCK_YES, gtk.RESPONSE_YES, gtk.STOCK_NO, gtk.RESPONSE_NO)
136
41
 
137
42
 
138
43
class PasswordDialog(gtk.Dialog):
139
44
    """ Prompt the user for a password. """
140
 
 
141
45
    def __init__(self, prompt):
142
46
        gtk.Dialog.__init__(self)
143
 
 
 
47
        
144
48
        label = gtk.Label(prompt)
145
49
        self.vbox.pack_start(label, padding=10)
146
 
 
 
50
        
147
51
        self.entry = gtk.Entry()
148
52
        self.entry.set_visibility(False)
149
53
        self.vbox.pack_end(self.entry, padding=10)
150
 
 
 
54
        
151
55
        self.vbox.show_all()
152
 
 
153
 
        self.add_buttons(gtk.STOCK_OK, gtk.RESPONSE_OK,
154
 
                         gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL)
155
 
 
 
56
        
 
57
        self.add_buttons(gtk.STOCK_OK, gtk.RESPONSE_OK, gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL)
 
58
    
156
59
    def _get_passwd(self):
157
60
        return self.entry.get_text()
158
61
 
160
63
 
161
64
 
162
65
class GtkUIFactory(UIFactory):
163
 
    """A UI factory for GTK user interfaces."""
164
 
 
165
 
    def __init__(self):
166
 
        """Create a GtkUIFactory"""
 
66
    """A UI factory for GTK user interefaces."""
 
67
 
 
68
    def __init__(self,
 
69
                 bar_type=None,
 
70
                 stdout=None,
 
71
                 stderr=None):
 
72
        """Create a GtkUIFactory.
 
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.
 
77
        """
167
78
        super(GtkUIFactory, self).__init__()
168
 
        self.set_progress_bar_widget(None)
169
 
 
170
 
    def set_progress_bar_widget(self, widget):
171
 
        self._progress_bar_widget = widget
 
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
172
88
 
173
89
    def get_boolean(self, prompt):
174
90
        """GtkDialog with yes/no answers"""
175
91
        dialog = PromptDialog(prompt)
176
92
        response = dialog.run()
177
93
        dialog.destroy()
178
 
        return (response == gtk.RESPONSE_YES)
 
94
        if response == gtk.RESPONSE_YES:
 
95
            return True
 
96
        else:
 
97
            return False
 
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()
179
105
 
180
106
    def get_password(self, prompt='', **kwargs):
181
107
        """Prompt the user for a password.
196
122
        else:
197
123
            return None
198
124
 
199
 
    def _progress_all_finished(self):
200
 
        """See UIFactory._progress_all_finished"""
201
 
        pbw = self._progress_bar_widget
202
 
        if pbw:
203
 
            pbw.finished()
204
 
 
205
 
    def _progress_updated(self, task):
206
 
        """See UIFactory._progress_updated"""
207
 
        if self._progress_bar_widget is None:
208
 
            # Default to a window since nobody gave us a better mean to report
209
 
            # progress.
210
 
            self.set_progress_bar_widget(ProgressBarWindow())
211
 
        self._progress_bar_widget.update(task.msg,
212
 
                                         task.current_cnt, task.total_cnt)
213
 
 
 
125
    def nested_progress_bar(self):
 
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.
 
132
        """
 
133
        if self._progress_bar_stack is None:
 
134
            self._progress_bar_stack = bzrlib.progress.ProgressBarStack(
 
135
                klass=self._bar_type)
 
136
        return self._progress_bar_stack.get_nested()
 
137
 
 
138
    def clear_term(self):
 
139
        """Prepare the terminal for output.
 
140
 
 
141
        It has no sense when talking about GTK."""
 
142
        pass