14
14
# along with this program; if not, write to the Free Software
 
15
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
17
 
from gi.repository import Gtk
 
19
25
from bzrlib.config import GlobalConfig
 
20
 
from bzrlib.plugins.gtk.preferences.identity import IdentityPage
 
21
 
from bzrlib.plugins.gtk.preferences.plugins import PluginsPage
 
22
 
from bzrlib.plugins.gtk.preferences.notifications import NotificationsPage
 
24
 
class PreferencesWindow(Gtk.Dialog):
 
 
27
class PreferencesWindow(gtk.Dialog):
 
25
28
    """Displays global preferences windows."""
 
26
 
    # Note that we don't allow configuration of aliases or
 
27
 
    # default log formats. This is because doing so wouldn't make
 
28
 
    # a lot of sense to pure GUI users. Users that need these settings
 
 
29
    # Note that we don't allow configuration of aliases or 
 
 
30
    # default log formats. This is because doing so wouldn't make 
 
 
31
    # a lot of sense to pure GUI users. Users that need these settings 
 
29
32
    # will already be familiar with the configuration file.
 
31
34
    def __init__(self, config=None):
 
32
35
        """ Initialize the Status window. """
 
33
 
        super(PreferencesWindow, self).__init__(flags=Gtk.DialogFlags.MODAL)
 
 
36
        super(PreferencesWindow, self).__init__(flags=gtk.DIALOG_MODAL)
 
34
37
        self.set_title("Bazaar Preferences")
 
35
38
        self.config = config
 
36
39
        if self.config is None:
 
37
40
            self.config = GlobalConfig()
 
 
43
    def _create_mainpage(self):
 
 
44
        table = gtk.Table(rows=4, columns=2)
 
 
45
        table.set_row_spacings(6)
 
 
46
        table.set_col_spacings(6)
 
 
48
        align = gtk.Alignment(1.0, 0.5)
 
 
50
        label.set_markup("<b>User Id:</b>")
 
 
52
        table.attach(align, 0, 1, 0, 1, gtk.FILL, gtk.FILL)
 
 
54
        self.username = gtk.Entry()
 
 
55
        self.username.set_text(self.config.username())
 
 
56
        table.attach(self.username, 1, 2, 0, 1, gtk.EXPAND | gtk.FILL, gtk.FILL)
 
 
58
        align = gtk.Alignment(1.0, 0.5)
 
 
60
        label.set_markup("<b>GPG signing command:</b>")
 
 
62
        table.attach(align, 0, 1, 1, 2, gtk.FILL, gtk.FILL)
 
 
64
        self.email = gtk.Entry()
 
 
65
        self.email.set_text(self.config.gpg_signing_command())
 
 
66
        table.attach(self.email, 1, 2, 1, 2, gtk.EXPAND | gtk.FILL, gtk.FILL)
 
 
68
        align = gtk.Alignment(1.0, 0.5)
 
 
70
        label.set_markup("<b>Check GPG Signatures:</b>")
 
 
72
        table.attach(align, 0, 1, 2, 3, gtk.FILL, gtk.FILL)
 
 
75
        self.check_sigs_if_possible = gtk.RadioButton(None, 
 
 
77
        sigvals.pack_start(self.check_sigs_if_possible)
 
 
78
        self.check_sigs_always = gtk.RadioButton(self.check_sigs_if_possible, 
 
 
80
        sigvals.pack_start(self.check_sigs_always)
 
 
81
        self.check_sigs_never = gtk.RadioButton(self.check_sigs_if_possible,
 
 
83
        sigvals.pack_start(self.check_sigs_never)
 
 
85
        table.attach(sigvals, 1, 2, 2, 3, gtk.EXPAND | gtk.FILL, gtk.FILL)
 
 
87
        align = gtk.Alignment(1.0, 0.5)
 
 
89
        label.set_markup("<b>Create GPG Signatures:</b>")
 
 
91
        table.attach(align, 0, 1, 3, 4, gtk.FILL, gtk.FILL)
 
 
93
        create_sigs = gtk.VBox()
 
 
94
        self.create_sigs_when_required = gtk.RadioButton(None, 
 
 
95
                                                         "Sign When _Required")
 
 
96
        create_sigs.pack_start(self.create_sigs_when_required)
 
 
97
        self.create_sigs_always = gtk.RadioButton(
 
 
98
            self.create_sigs_when_required, "Sign _Always")
 
 
99
        create_sigs.pack_start(self.create_sigs_always)
 
 
100
        self.create_sigs_never = gtk.RadioButton(
 
 
101
            self.create_sigs_when_required, "Sign _Never")
 
 
102
        create_sigs.pack_start(self.create_sigs_never)
 
 
104
        table.attach(create_sigs, 1, 2, 3, 4, gtk.EXPAND | gtk.FILL, gtk.FILL)
 
 
108
    def _create_pluginpage(self):
 
 
110
        scrolledwindow = gtk.ScrolledWindow()
 
 
111
        scrolledwindow.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
 
 
112
        model = gtk.ListStore(str, str)
 
 
113
        treeview = gtk.TreeView()
 
 
114
        scrolledwindow.add(treeview)
 
 
115
        paned.pack1(scrolledwindow, resize=True, shrink=False)
 
 
117
        table = gtk.Table(columns=2)
 
 
118
        table.set_row_spacings(6)
 
 
119
        table.set_col_spacings(6)
 
 
121
        def row_selected(tv, path, tvc):
 
 
122
            p = bzrlib.plugin.plugins()[model[path][0]]
 
 
123
            from inspect import getdoc
 
 
125
            for w in table.get_children():
 
 
128
            if getattr(p, '__author__', None) is not None:
 
 
129
                align = gtk.Alignment(1.0, 0.5)
 
 
131
                label.set_markup("<b>Author:</b>")
 
 
133
                table.attach(align, 0, 1, 0, 1, gtk.FILL, gtk.FILL)
 
 
137
                align = gtk.Alignment(0.0, 0.5)
 
 
139
                author.set_text(p.__author__)
 
 
140
                author.set_selectable(True)
 
 
142
                table.attach(align, 1, 2, 0, 1, gtk.EXPAND | gtk.FILL, gtk.FILL)
 
 
144
            if getattr(p, '__version__', None) is not None:
 
 
145
                align = gtk.Alignment(1.0, 0.5)
 
 
147
                label.set_markup("<b>Version:</b>")
 
 
149
                table.attach(align, 0, 1, 0, 1, gtk.FILL, gtk.FILL)
 
 
153
                align = gtk.Alignment(0.0, 0.5)
 
 
155
                author.set_text(p.__version__)
 
 
156
                author.set_selectable(True)
 
 
158
                table.attach(align, 1, 2, 0, 1, gtk.EXPAND | gtk.FILL, gtk.FILL)
 
 
160
            if getdoc(p) is not None:
 
 
161
                align = gtk.Alignment(0.0, 0.5)
 
 
162
                description = gtk.Label()
 
 
163
                description.set_text(getdoc(p))
 
 
164
                description.set_selectable(True)
 
 
165
                align.add(description)
 
 
166
                table.attach(align, 0, 2, 1, 2, gtk.EXPAND | gtk.FILL, gtk.FILL)
 
 
170
        treeview.set_headers_visible(False)
 
 
171
        treeview.set_model(model)
 
 
172
        treeview.connect("row-activated", row_selected)
 
 
174
        cell = gtk.CellRendererText()
 
 
175
        column = gtk.TreeViewColumn()
 
 
176
        column.pack_start(cell, expand=True)
 
 
177
        column.add_attribute(cell, "text", 0)
 
 
178
        treeview.append_column(column)
 
 
180
        cell = gtk.CellRendererText()
 
 
181
        column = gtk.TreeViewColumn()
 
 
182
        column.pack_start(cell, expand=True)
 
 
183
        column.add_attribute(cell, "text", 1)
 
 
184
        treeview.append_column(column)
 
 
187
        plugins = bzrlib.plugin.plugins()
 
 
188
        plugin_names = plugins.keys()
 
 
190
        for name in plugin_names:
 
 
191
            model.append([name, getattr(plugins[name], '__file__', None)])
 
 
193
        scrolledwindow = gtk.ScrolledWindow()
 
 
194
        scrolledwindow.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
 
 
195
        scrolledwindow.add_with_viewport(table)
 
 
196
        paned.pack2(scrolledwindow, resize=False, shrink=True)
 
40
201
    def _create(self):
 
41
 
        self.set_default_size(320, 480)
 
42
 
        self.set_border_width(0)
 
44
 
        notebook = Gtk.Notebook()
 
45
 
        notebook.set_border_width(12)
 
46
 
        for (label, page) in self._create_pages():
 
47
 
            notebook.append_page(page, Gtk.Label(label=label))
 
49
 
        notebook.set_current_page(0)
 
50
 
        content_area = self.get_content_area()
 
51
 
        content_area.set_border_width(0)
 
52
 
        content_area.pack_start(notebook, True, True, 0)
 
53
 
        content_area.show_all()
 
54
 
        self.get_action_area().set_border_width(12)
 
56
 
    def _create_pages(self):
 
57
 
        return [("Identity", IdentityPage(self.config)),
 
58
 
                ("Plugins", PluginsPage()),
 
59
 
                ("Notifications", NotificationsPage(self.config))]
 
 
202
        self.set_default_size(600, 600)
 
 
203
        notebook = gtk.Notebook()
 
 
204
        notebook.insert_page(self._create_mainpage(), gtk.Label("Main"))
 
 
205
        notebook.insert_page(self._create_pluginpage(), gtk.Label("Plugins"))
 
 
206
        self.vbox.pack_start(notebook, True, True)
 
61
209
    def display(self):
 
62
210
        self.window.show_all()