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()