1035
1074
self.ProfileComboBox.set_sensitive(self.Context.CurrentBackend.ProfileSupport)
1036
1075
self.IntegrationButton.set_sensitive(self.Context.CurrentBackend.IntegrationSupport)
1077
# ScrolledList Widget
1079
class ScrolledList(gtk.ScrolledWindow):
1080
def __init__(self, name):
1081
gtk.ScrolledWindow.__init__(self)
1083
self.props.hscrollbar_policy = gtk.POLICY_NEVER
1084
self.props.vscrollbar_policy = gtk.POLICY_AUTOMATIC
1086
self.Store = gtk.ListStore(gobject.TYPE_STRING)
1088
self.Style = Style()
1090
viewport = gtk.Viewport()
1091
viewport.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse(self.Style.BackgroundColor))
1093
self.ListView = gtk.TreeView(self.Store)
1094
self.ListView.set_headers_visible(True)
1095
self.ListView.insert_column_with_attributes(-1, name, gtk.CellRendererText(), text=0)
1097
self.set_size_request(300, 300)
1099
viewport.add(self.ListView)
1102
self.Select = self.ListView.get_selection()
1103
self.Select.set_mode(gtk.SELECTION_SINGLE)
1107
iter = self.Store.get_iter_first()
1109
value = self.Store.get(iter, 0)[0]
1111
values.append(value)
1112
iter = self.Store.iter_next(iter)
1118
def append(self, value):
1119
iter = self.Store.append()
1120
self.Store.set(iter, 0, value)
1122
def set(self, pos, value):
1123
iter = self.Store.get_iter(pos)
1124
self.Store.set(iter, 0, value)
1126
def delete(self, b):
1127
selectedRows = self.Select.get_selected_rows()[1]
1128
for path in selectedRows:
1129
iter = self.Store.get_iter(path)
1130
self.Store.remove(iter)
1132
def move_up(self, b):
1133
selectedRows = self.Select.get_selected_rows()[1]
1134
if len(selectedRows) == 1:
1135
iter = self.Store.get_iter(selectedRows[0])
1136
prev = self.Store.get_iter_first()
1137
if not self.Store.get_path(prev) == self.Store.get_path(iter):
1138
while prev is not None and not self.Store.get_path(self.Store.iter_next(prev)) == self.Store.get_path(iter):
1139
prev = self.Store.iter_next(prev)
1140
self.Store.swap(iter, prev)
1142
def move_down(self, b):
1143
selectedRows = self.Select.get_selected_rows()[1]
1144
if len(selectedRows) == 1:
1145
iter = self.Store.get_iter(selectedRows[0])
1146
next = self.Store.iter_next(iter)
1147
if next is not None:
1148
self.Store.swap(iter, next)
1152
class PluginListPage:
1153
def __init__(self, main, context):
1154
self.Context = context
1156
self.Blocked = False
1157
rightChild = gtk.VBox()
1158
rightChild.set_border_width(10)
1161
autoSort = gtk.CheckButton(_("Automatic plugin sorting"))
1162
rightChild.pack_start(autoSort, False, False, 10)
1165
listBox = gtk.HBox()
1166
listBox.set_spacing(5)
1168
self.DisabledPluginsList = ScrolledList(_("Disabled Plugins"))
1169
self.EnabledPluginsList = ScrolledList(_("Enabled Plugins"))
1171
# Left/Right buttons
1172
buttonBox = gtk.VBox()
1173
buttonBox.set_spacing(5)
1174
boxAlignment = gtk.Alignment(0.0, 0.5, 0.0, 0.0)
1175
boxAlignment.add(buttonBox)
1177
rightButton = gtk.Button()
1178
rightImage = Image(gtk.STOCK_GO_FORWARD, ImageStock, gtk.ICON_SIZE_BUTTON)
1179
rightButton.set_image(rightImage)
1180
rightButton.connect("clicked", self.EnablePlugins)
1182
leftButton = gtk.Button()
1183
leftImage = Image(gtk.STOCK_GO_BACK, ImageStock, gtk.ICON_SIZE_BUTTON)
1184
leftButton.set_image(leftImage)
1185
leftButton.connect("clicked", self.EnabledPluginsList.delete)
1187
buttonBox.pack_start(rightButton, False, False)
1188
buttonBox.pack_start(leftButton, False, False)
1191
enabledBox = gtk.VBox()
1192
enabledBox.set_spacing(10)
1194
enabledAlignment = gtk.Alignment(0.5, 0.0, 0.0, 0.0)
1195
enabledButtonBox = gtk.HBox()
1196
enabledButtonBox.set_spacing(5)
1197
enabledAlignment.add(enabledButtonBox)
1199
upButton = gtk.Button(gtk.STOCK_GO_UP)
1200
downButton = gtk.Button(gtk.STOCK_GO_DOWN)
1201
upButton.set_use_stock(True)
1202
downButton.set_use_stock(True)
1203
upButton.connect('clicked', self.EnabledPluginsList.move_up)
1204
downButton.connect('clicked', self.EnabledPluginsList.move_down)
1207
addButton = gtk.Button(gtk.STOCK_ADD)
1208
addButton.set_use_stock(True)
1209
addButton.connect('clicked', self.AddPlugin)
1211
enabledButtonBox.pack_start(addButton, False, False)
1212
enabledButtonBox.pack_start(upButton, False, False)
1213
enabledButtonBox.pack_start(downButton, False, False)
1215
enabledBox.pack_start(self.EnabledPluginsList, True, True)
1216
enabledBox.pack_start(enabledAlignment, False, False)
1218
listBox.pack_start(self.DisabledPluginsList, True, True)
1219
listBox.pack_start(boxAlignment, True, False)
1220
listBox.pack_start(enabledBox, True, True)
1222
self.UpdateEnabledPluginsList()
1223
self.UpdateDisabledPluginsList()
1226
self.EnabledPluginsList.Store.connect('row-changed', self.ListChanged)
1227
self.EnabledPluginsList.Store.connect('row-deleted', self.ListChanged)
1228
self.EnabledPluginsList.Store.connect('rows-reordered', self.ListChanged)
1230
rightChild.pack_start(listBox, True, True)
1233
autoSort.connect('toggled', self.AutoSortChanged)
1234
autoSort.set_active(self.Context.AutoSort)
1236
self.Widget = rightChild
1238
def AutoSortChanged(self, widget):
1239
self.Context.AutoSort = widget.get_active()
1240
self.EnabledPluginsList.set_sensitive(not self.Context.AutoSort)
1241
self.DisabledPluginsList.set_sensitive(not self.Context.AutoSort)
1243
def UpdateEnabledPluginsList(self):
1244
activePlugins = self.Context.Plugins['core'].Display['active_plugins'].Value
1246
self.EnabledPluginsList.clear()
1248
for name in activePlugins:
1249
self.EnabledPluginsList.append(name)
1251
def UpdateDisabledPluginsList(self):
1252
activePlugins = self.Context.Plugins['core'].Display['active_plugins'].Value
1254
self.DisabledPluginsList.clear()
1256
for plugin in sorted(self.Context.Plugins.values(), PluginSortCompare):
1257
if not plugin.Name in activePlugins and plugin.Name != "core":
1258
self.DisabledPluginsList.append(plugin.Name)
1260
def AddPlugin(self, widget):
1261
dlg = gtk.Dialog(_("Add plugin"))
1262
dlg.add_button(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL)
1263
dlg.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK).grab_default()
1264
dlg.set_default_response(gtk.RESPONSE_OK)
1266
ebox = gtk.EventBox()
1267
label = gtk.Label(_("Plugin name:"))
1270
Tooltips.set_tip(ebox, _("Insert plugin name"))
1271
dlg.vbox.pack_start(ebox)
1274
entry.props.activates_default = True
1275
dlg.vbox.pack_start(entry)
1277
dlg.vbox.set_spacing(5)
1283
if ret == gtk.RESPONSE_OK:
1284
self.EnabledPluginsList.append(entry.get_text())
1286
def EnablePlugins(self, widget):
1287
selectedRows = self.DisabledPluginsList.Select.get_selected_rows()[1]
1288
for path in selectedRows:
1289
iter = self.DisabledPluginsList.Store.get_iter(path)
1290
name = self.DisabledPluginsList.Store.get(iter, 0)[0]
1291
self.EnabledPluginsList.append(name)
1292
self.DisabledPluginsList.delete(widget)
1294
def ListChanged(self, *args, **kwargs):
1298
plugins = self.EnabledPluginsList.get_list()
1300
self.Context.Plugins['core'].Display['active_plugins'].Value = plugins
1301
self.Context.Write()
1302
self.UpdateDisabledPluginsList()
1303
self.Blocked = False
1307
class AboutDialog(gtk.AboutDialog):
1309
gtk.AboutDialog.__init__(self)
1311
self.set_name(_("CompizConfig Settings Manager"))
1312
self.set_version("0.1.0")
1313
self.set_comments(_("This is a settings manager for the CompizConfig configuration system."))
1314
self.set_copyright("Copyright \xC2\xA9 2007 Patrick Niklaus/Quinn Storm")
1315
self.set_translator_credits(_("translator-credits"))
1316
self.set_authors(["Patrick Niklaus <marex@opencompositing.org>",
1317
"Quinn Storm <quinn@beryl-project.org>"])
1318
self.set_artists(["Andrew Wedderburn <andrew.wedderburn@gmail.com>",
1319
"Patrick Niklaus <marex@opencompositing.org>",
1320
"Gnome Icon Theme Team"])
1321
self.set_icon(gtk.gdk.pixbuf_new_from_file(IconDir+"/apps/ccsm.svg"))
1322
self.set_logo(gtk.gdk.pixbuf_new_from_file(IconDir+"/apps/ccsm.svg"))
1323
self.set_website("http://www.opencompositing.org")
1327
class PreferencesPage:
1328
def __init__(self, main, context):
1329
self.Context = context
1331
self.LeftWidget = gtk.VBox(False, 10)
1332
self.LeftWidget.set_border_width(15)
1333
self.RightWidget = gtk.Notebook()
1336
self.DescLabel = Label()
1337
self.DescLabel.set_markup("<span color='%s' size='large' weight='800'>%s</span>" % (self.Main.Style.BrightColor, _("Preferences")))
1338
self.DescImg = Image("profiles",ImageCategory, 64)
1339
self.LeftWidget.pack_start(self.DescImg, False, False)
1340
self.LeftWidget.pack_start(self.DescLabel, False, False)
1341
self.InfoLabelCont = gtk.HBox()
1342
self.InfoLabelCont.set_border_width(10)
1343
self.LeftWidget.pack_start(self.InfoLabelCont, False, False)
1344
self.InfoLabel = Label(_("Configure the backend, profile and other internal settings used by the Compiz Configuration System."), 180)
1345
self.InfoLabelCont.pack_start(self.InfoLabel, True, True)
1348
aboutLabel = Label()
1349
aboutLabel.set_markup("<span color='%s' size='large' weight='800'>%s</span>" % (self.Main.Style.BrightColor, _("About")))
1350
aboutButton = gtk.Button()
1351
aboutButton.set_relief(gtk.RELIEF_NONE)
1352
aboutImage = Image(gtk.STOCK_ABOUT, ImageStock, gtk.ICON_SIZE_BUTTON)
1353
aboutFrame = gtk.HBox()
1354
aboutFrame.set_spacing(5)
1355
aboutFrame.pack_start(aboutImage, False, False)
1356
aboutFrame.pack_start(Label(_("About CCSM...")), False, False)
1357
aboutButton.add(aboutFrame)
1358
Tooltips.set_tip(aboutButton, _("About"))
1359
aboutButton.connect('clicked', self.ShowAboutDialog)
1360
aboutBin = gtk.HBox()
1361
aboutBin.set_border_width(10)
1362
aboutBin.pack_start(aboutButton, False, False)
1363
self.LeftWidget.pack_start(aboutLabel, False, False)
1364
self.LeftWidget.pack_start(aboutBin, False, False)
1367
backButton = gtk.Button(gtk.STOCK_GO_BACK)
1368
backButton.set_use_stock(True)
1369
backButton.connect('clicked', self.Main.BackToMain)
1370
self.LeftWidget.pack_end(backButton, False, False)
1372
# Profile & Backend Page
1373
self.ProfileBackendPage = ProfileBackendPage(main, context)
1374
self.RightWidget.append_page(self.ProfileBackendPage.Widget, gtk.Label(_("Profile & Backend")))
1377
self.PluginListPage = PluginListPage(main, context)
1378
self.RightWidget.append_page(self.PluginListPage.Widget, gtk.Label(_("Plugin List")))
1380
def ShowAboutDialog(self, widget):
1381
about = AboutDialog()