/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

Add options to viz treeview to not show the line graph, and to only show the main line.
Set the revision browser to use these options.

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
22
23
import sys
23
24
 
24
25
import bzrlib.progress
25
 
from bzrlib.symbol_versioning import (deprecated_method, 
26
 
        zero_eight)
27
26
from bzrlib.ui import UIFactory
28
27
 
29
28
 
37
36
        
38
37
        self.vbox.show_all()
39
38
 
40
 
        self.add_buttons(gtk.STOCK_YES, gtk.RESPONSE_YES, gtk.STOCK_NO, gtk.RESPONSE_NO)
 
39
        self.add_buttons(gtk.STOCK_YES, gtk.RESPONSE_YES, gtk.STOCK_NO, 
 
40
                         gtk.RESPONSE_NO)
 
41
 
 
42
 
 
43
class GtkProgressBar(gtk.ProgressBar):
 
44
    def __init__(self, stack):
 
45
        super(GtkProgressBar, self).__init__()
 
46
        self.set_fraction(0.0)
 
47
        self._stack = stack
 
48
 
 
49
    def finished(self):
 
50
        self._stack.remove(self)
 
51
 
 
52
    def clear(self):
 
53
        pass
 
54
 
 
55
    def tick(self):
 
56
        self.pulse()
 
57
 
 
58
    def update(self, msg=None, current=None, total=None):
 
59
        if msg is not None:
 
60
            self.set_text(msg)
 
61
        self.set_fraction(1.0 * current / total)
 
62
        while gtk.events_pending():
 
63
            gtk.main_iteration()
 
64
 
 
65
 
 
66
class GtkProgressBarStack(gtk.Window):
 
67
    def __init__(self):
 
68
        super(GtkProgressBarStack, self).__init__(type=gtk.WINDOW_TOPLEVEL)
 
69
        self.set_border_width(0)
 
70
        self.set_title("Progress")
 
71
        self.set_position(gtk.WIN_POS_CENTER_ALWAYS)
 
72
        self.vbox = gtk.VBox()
 
73
        self.add(self.vbox)
 
74
        self.set_resizable(False)
 
75
 
 
76
    def _adapt_size(self):
 
77
        self.resize(250, 15 * len(self.vbox.get_children()))
 
78
 
 
79
    def get_nested(self):
 
80
        nested = GtkProgressBar(self)
 
81
        self.vbox.pack_start(nested)
 
82
        self._adapt_size()
 
83
        self.show_all()
 
84
        return nested
 
85
 
 
86
    def remove(self, pb):
 
87
        self.vbox.remove(pb)
41
88
 
42
89
 
43
90
class PasswordDialog(gtk.Dialog):
63
110
 
64
111
 
65
112
class GtkUIFactory(UIFactory):
66
 
    """A UI factory for GTK user interefaces."""
 
113
    """A UI factory for GTK user interfaces."""
67
114
 
68
115
    def __init__(self,
69
 
                 bar_type=None,
70
116
                 stdout=None,
71
117
                 stderr=None):
72
118
        """Create a GtkUIFactory.
73
119
 
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
120
        """
78
121
        super(GtkUIFactory, self).__init__()
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
 
122
        self._progress_bar_stack = None
88
123
 
89
124
    def get_boolean(self, prompt):
90
125
        """GtkDialog with yes/no answers"""
91
126
        dialog = PromptDialog(prompt)
92
127
        response = dialog.run()
93
128
        dialog.destroy()
94
 
        if response == gtk.RESPONSE_YES:
95
 
            return True
96
 
        else:
97
 
            return False
 
129
        return (response == gtk.RESPONSE_YES)
98
130
        
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
 
 
106
131
    def get_password(self, prompt='', **kwargs):
107
132
        """Prompt the user for a password.
108
133
 
124
149
 
125
150
    def nested_progress_bar(self):
126
151
        """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
152
        """
133
153
        if self._progress_bar_stack is None:
134
 
            self._progress_bar_stack = bzrlib.progress.ProgressBarStack(
135
 
                klass=self._bar_type)
 
154
            self._progress_bar_stack = GtkProgressBarStack()
136
155
        return self._progress_bar_stack.get_nested()
137
156
 
 
157
    def set_progress_bar_vbox(self, vbox):
 
158
        """Change the vbox to put progress bars in.
 
159
        """
 
160
        self._progress_bar_stack = vbox
 
161
 
138
162
    def clear_term(self):
139
163
        """Prepare the terminal for output.
140
164