1
# Copyright (C) 2007 Jelmer Vernooij <jelmer@samba.org>
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
# GNU General Public License for more details.
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
25
from bzrlib.config import GlobalConfig
27
class PreferencesWindow(gtk.Dialog):
28
"""Displays global preferences windows."""
29
def __init__(self, config=None):
30
""" Initialize the Status window. """
31
super(PreferencesWindow, self).__init__(flags=gtk.DIALOG_MODAL)
32
self.set_title("Bazaar Preferences")
34
if self.config is None:
35
self.config = GlobalConfig()
38
def _create_mainpage(self):
39
table = gtk.Table(rows=4, columns=2)
40
table.set_row_spacings(6)
41
table.set_col_spacings(6)
43
align = gtk.Alignment(1.0, 0.5)
45
label.set_markup("<b>User Id:</b>")
47
table.attach(align, 0, 1, 0, 1, gtk.FILL, gtk.FILL)
49
align = gtk.Alignment(0.0, 0.5)
50
self.username = gtk.Entry()
51
align.add(self.username)
52
self.username.set_text(self.config.username())
53
table.attach(align, 1, 2, 0, 1, gtk.EXPAND | gtk.FILL, gtk.FILL)
55
align = gtk.Alignment(1.0, 0.5)
57
label.set_markup("<b>GPG signing command:</b>")
59
table.attach(align, 0, 1, 1, 2, gtk.FILL, gtk.FILL)
61
align = gtk.Alignment(0.0, 0.5)
62
self.email = gtk.Entry()
63
self.email.set_text(self.config.gpg_signing_command())
65
table.attach(align, 1, 2, 1, 2, gtk.EXPAND | gtk.FILL, gtk.FILL)
67
align = gtk.Alignment(1.0, 0.5)
69
label.set_markup("<b>Check GPG Signatures:</b>")
71
table.attach(align, 0, 1, 2, 3, gtk.FILL, gtk.FILL)
73
align = gtk.Alignment(0.0, 0.5)
74
self.check_sigs = gtk.Entry()
75
#self.check_sigs.set_text(self.config.signature_checking())
76
align.add(self.check_sigs)
77
table.attach(align, 1, 2, 2, 3, gtk.EXPAND | gtk.FILL, gtk.FILL)
79
align = gtk.Alignment(1.0, 0.5)
81
label.set_markup("<b>Create GPG Signatures:</b>")
83
table.attach(align, 0, 1, 3, 4, gtk.FILL, gtk.FILL)
85
align = gtk.Alignment(0.0, 0.5)
86
self.create_sigs = gtk.Entry()
87
#self.create_sigs.set_text(self.config.signing_policy())
88
align.add(self.create_sigs)
89
table.attach(align, 1, 2, 3, 4, gtk.EXPAND | gtk.FILL, gtk.FILL)
95
def _create_pluginpage(self):
96
vbox = gtk.VBox(False, 2)
97
vbox.set_border_width(6)
99
scrolledwindow = gtk.ScrolledWindow()
100
scrolledwindow.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
101
model = gtk.ListStore(str, str)
102
treeview = gtk.TreeView()
103
scrolledwindow.add(treeview)
105
table = gtk.Table(columns=2)
106
table.set_row_spacings(6)
107
table.set_col_spacings(6)
110
def row_selected(tv, path, tvc):
111
p = bzrlib.plugin.all_plugins()[model[path][0]]
112
from inspect import getdoc
114
for w in table.get_children():
117
if getattr(p, '__author__', None) is not None:
118
align = gtk.Alignment(1.0, 0.5)
120
label.set_markup("<b>Author:</b>")
122
table.attach(align, 0, 1, 0, 1, gtk.FILL, gtk.FILL)
126
align = gtk.Alignment(0.0, 0.5)
128
author.set_text(p.__author__)
129
author.set_selectable(True)
131
table.attach(align, 1, 2, 0, 1, gtk.EXPAND | gtk.FILL, gtk.FILL)
133
if getattr(p, '__version__', None) is not None:
134
align = gtk.Alignment(1.0, 0.5)
136
label.set_markup("<b>Version:</b>")
138
table.attach(align, 0, 1, 0, 1, gtk.FILL, gtk.FILL)
142
align = gtk.Alignment(0.0, 0.5)
144
author.set_text(p.__version__)
145
author.set_selectable(True)
147
table.attach(align, 1, 2, 0, 1, gtk.EXPAND | gtk.FILL, gtk.FILL)
149
if getdoc(p) is not None:
150
align = gtk.Alignment(0.0, 0.5)
151
description = gtk.Label()
152
description.set_text(getdoc(p))
153
description.set_selectable(True)
154
align.add(description)
155
table.attach(align, 0, 2, 1, 2, gtk.EXPAND | gtk.FILL, gtk.FILL)
159
treeview.set_headers_visible(False)
160
treeview.set_model(model)
161
treeview.connect("row-activated", row_selected)
163
cell = gtk.CellRendererText()
164
column = gtk.TreeViewColumn()
165
column.pack_start(cell, expand=True)
166
column.add_attribute(cell, "text", 0)
167
treeview.append_column(column)
169
cell = gtk.CellRendererText()
170
column = gtk.TreeViewColumn()
171
column.pack_start(cell, expand=True)
172
column.add_attribute(cell, "text", 1)
173
treeview.append_column(column)
176
for name, plugin in bzrlib.plugin.all_plugins().items():
177
model.append([name, getattr(plugin, '__file__', None)])
179
vbox.pack_start(scrolledwindow, expand=True, fill=True)
181
vbox.pack_start(table)
186
self.set_default_size(600, 600)
187
notebook = gtk.Notebook()
188
notebook.insert_page(self._create_mainpage(), gtk.Label("Main"))
189
notebook.insert_page(self._create_pluginpage(), gtk.Label("Plugins"))
190
self.vbox.pack_start(notebook, True, True)
194
self.window.show_all()
196
def close(self, widget=None):
197
self.window.destroy()