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
# will already be familiar with the configuration file.
31
29
def __init__(self, config=None):
32
30
""" Initialize the Status window. """
33
super(PreferencesWindow, self).__init__(flags=Gtk.DialogFlags.MODAL)
31
super(PreferencesWindow, self).__init__(flags=gtk.DIALOG_MODAL)
34
32
self.set_title("Bazaar Preferences")
35
33
self.config = config
36
34
if self.config is None:
37
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)
40
185
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))]
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)
61
193
def display(self):
62
194
self.window.show_all()
64
196
def close(self, widget=None):
65
197
self.window.destroy()
68
class BranchPreferencesWindow(Gtk.Dialog):
69
"""Displays global preferences windows."""
70
def __init__(self, config=None):
71
super(BranchPreferencesWindow, self).__init__(config)