40
40
CurrentUpdater = None
43
def __init__(self, Setting, createUpdater=True):
46
self.Setting = Setting
49
self.Reset = gtk.Button()
50
Tooltips.set_tip(self.Reset,_("Reset setting to the default value"))
51
self.Reset.set_image(gtk.image_new_from_stock(
52
gtk.STOCK_CLEAR, gtk.ICON_SIZE_BUTTON))
53
self.Reset.connect('clicked', self.DoReset)
56
if createUpdater and CurrentUpdater == None:
58
if self.Setting.__class__ == list:
59
context = self.Setting[0].Plugin.Context
61
context = self.Setting.Plugin.Context
62
CurrentUpdater = Updater(context)
64
CurrentUpdater.Append(self)
66
def Attach(self, table, row):
67
self.Reset.set_sensitive(not self.Setting.ReadOnly)
68
self.Widget.set_sensitive(not self.Setting.ReadOnly)
70
table.attach(self.Widget, 0, 100, row, row+1, TableDef, TableDef, TableX, TableX)
72
table.attach(self.Label, 0, 1, row, row+1, gtk.FILL, TableDef, TableX, TableX)
73
table.attach(self.Widget, 1, 99, row, row+1, TableDef, TableDef, TableX, TableX)
74
table.attach(self.Reset, 99, 100, row, row+1, 0, TableDef, TableX, TableX)
76
def PureVirtual(self, str):
77
raise PureVirtualError, str, self.Setting.Name
80
self.PureVirtual('_Init')
82
def DoReset(self, foo):
84
self.Setting.Plugin.Context.Write()
88
self.Label = gtk.EventBox()
90
if self.Setting.Integrated:
91
label.set_markup("<span foreground=\"blue\">%s</span>" % self.Setting.ShortDesc)
93
label.set_markup("<span>%s</span>" % self.Setting.ShortDesc)
95
Tooltips.set_tip(self.Label, self.Setting.LongDesc)
96
label.props.xalign = 0
97
label.props.wrap_mode = gtk.WRAP_WORD
98
label.set_size_request(160, -1)
99
label.set_line_wrap(True)
102
self.Blocked = self.Blocked+1
105
self.Blocked = self.Blocked-1
113
self.PureVirtual('_Read')
115
def Changed(self, *args, **kwargs):
116
if self.Blocked <= 0:
118
self.Setting.Plugin.Context.Write()
121
self.PureVirtual('_Changed')
43
def __init__(self, Setting, createUpdater=True):
46
self.Setting = Setting
49
self.Reset = gtk.Button()
50
Tooltips.set_tip(self.Reset,_("Reset setting to the default value"))
51
self.Reset.set_image(gtk.image_new_from_stock(
52
gtk.STOCK_CLEAR, gtk.ICON_SIZE_BUTTON))
53
self.Reset.connect('clicked', self.DoReset)
56
if createUpdater and CurrentUpdater == None:
58
if self.Setting.__class__ == list:
59
context = self.Setting[0].Plugin.Context
61
context = self.Setting.Plugin.Context
62
CurrentUpdater = Updater(context)
64
CurrentUpdater.Append(self)
66
def Attach(self, table, row):
67
self.Reset.set_sensitive(not self.Setting.ReadOnly)
68
self.Widget.set_sensitive(not self.Setting.ReadOnly)
70
table.attach(self.Widget, 0, 100, row, row+1, TableDef, TableDef, TableX, TableX)
72
table.attach(self.Label, 0, 1, row, row+1, gtk.FILL, TableDef, TableX, TableX)
73
table.attach(self.Widget, 1, 99, row, row+1, TableDef, TableDef, TableX, TableX)
74
table.attach(self.Reset, 99, 100, row, row+1, 0, TableDef, TableX, TableX)
76
def PureVirtual(self, str):
77
raise PureVirtualError, str, self.Setting.Name
80
self.PureVirtual('_Init')
82
def DoReset(self, foo):
84
self.Setting.Plugin.Context.Write()
88
self.Label = gtk.EventBox()
90
if self.Setting.Integrated:
91
label.set_markup("<span foreground=\"blue\">%s</span>" % self.Setting.ShortDesc)
93
label.set_markup("<span>%s</span>" % self.Setting.ShortDesc)
95
Tooltips.set_tip(self.Label, self.Setting.LongDesc)
96
label.props.xalign = 0
97
label.props.wrap_mode = gtk.WRAP_WORD
98
label.set_size_request(160, -1)
99
label.set_line_wrap(True)
102
self.Blocked = self.Blocked+1
105
self.Blocked = self.Blocked-1
113
self.PureVirtual('_Read')
115
def Changed(self, *args, **kwargs):
116
if self.Blocked <= 0:
118
self.Setting.Plugin.Context.Write()
121
self.PureVirtual('_Changed')
123
123
class StringMatchSetting(Setting):
125
self.Entry = gtk.Entry()
126
Tooltips.set_tip(self.Entry, self.Setting.LongDesc)
127
self.Entry.connect('activate', self.Changed)
128
self.Entry.connect('focus-out-event', self.Changed)
129
self.Widget = self.Entry
132
self.Entry.set_text(self.Setting.Value)
125
self.Entry = gtk.Entry()
126
Tooltips.set_tip(self.Entry, self.Setting.LongDesc)
127
self.Entry.connect('activate', self.Changed)
128
self.Entry.connect('focus-out-event', self.Changed)
129
self.Widget = self.Entry
132
self.Entry.set_text(self.Setting.Value)
135
self.Setting.Value = self.Entry.get_text()
135
self.Setting.Value = self.Entry.get_text()
137
137
class FileSetting:
138
def __init__(self, Setting):
139
self.Setting = Setting
140
self.Open = gtk.Button()
141
Tooltips.set_tip(self.Open, _("Browse for ") + self.Setting.LongDesc)
142
self.Open.set_image(gtk.image_new_from_stock(
143
gtk.STOCK_OPEN, gtk.ICON_SIZE_BUTTON))
144
self.Open.connect('clicked', self.OpenFileChooser)
146
def CreateFilter(self):
147
filter = gtk.FileFilter()
148
if len(self.Setting.Hints) > 1:
149
if self.Setting.Hints[1] == 'image':
150
filter.set_name(_("Images"))
151
filter.add_pattern("*.png")
152
filter.add_pattern("*.jpg")
153
filter.add_pattern("*.jpeg")
154
filter.add_pattern("*.svg")
156
filter.add_pattern("*.*")
158
filter.add_pattern("*")
159
filter.set_name(_("File"))
163
def CheckFileType(self, filename):
164
if filename.find(".") == -1:
167
ext = filename.split(".")[-1]
169
mime = mimetypes.types_map["." + ext]
172
if len(self.Setting.Hints) > 1:
173
if self.Setting.Hints[1] == 'image':
174
require = FeatureRequirement(self.Setting.Plugin.Context, 'imagemime:' + mime)
175
return require.Resolve()
179
def OpenFileChooser(self, widget, custom_value=None):
180
value = self.Setting.Value
181
if custom_value != None:
183
b = (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK)
184
chooser = gtk.FileChooserDialog(title=_("Open file.."), buttons=b)
186
if os.path.exists(value):
187
chooser.set_filename(value)
189
chooser.set_current_folder(os.environ.get("HOME"))
190
chooser.set_filter(self.CreateFilter())
193
filename = chooser.get_filename()
195
if ret == gtk.RESPONSE_OK:
196
if self.CheckFileType(filename):
197
self.SetFileName(filename)
199
def SetFileName(self, text):
200
self.PureVirtual('SetFileName')
138
def __init__(self, Setting):
139
self.Setting = Setting
140
self.Open = gtk.Button()
141
Tooltips.set_tip(self.Open, _("Browse for ") + self.Setting.LongDesc)
142
self.Open.set_image(gtk.image_new_from_stock(
143
gtk.STOCK_OPEN, gtk.ICON_SIZE_BUTTON))
144
self.Open.connect('clicked', self.OpenFileChooser)
146
def CreateFilter(self):
147
filter = gtk.FileFilter()
148
if len(self.Setting.Hints) > 1:
149
if self.Setting.Hints[1] == 'image':
150
filter.set_name(_("Images"))
151
filter.add_pattern("*.png")
152
filter.add_pattern("*.jpg")
153
filter.add_pattern("*.jpeg")
154
filter.add_pattern("*.svg")
156
filter.add_pattern("*.*")
158
filter.add_pattern("*")
159
filter.set_name(_("File"))
163
def CheckFileType(self, filename):
164
if filename.find(".") == -1:
167
ext = filename.split(".")[-1]
169
mime = mimetypes.types_map["." + ext]
172
if len(self.Setting.Hints) > 1:
173
if self.Setting.Hints[1] == 'image':
174
require = FeatureRequirement(self.Setting.Plugin.Context, 'imagemime:' + mime)
175
return require.Resolve()
179
def OpenFileChooser(self, widget, custom_value=None):
180
value = self.Setting.Value
181
if custom_value != None:
183
b = (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK)
184
chooser = gtk.FileChooserDialog(title=_("Open file.."), buttons=b)
186
if os.path.exists(value):
187
chooser.set_filename(value)
189
chooser.set_current_folder(os.environ.get("HOME"))
190
chooser.set_filter(self.CreateFilter())
193
filename = chooser.get_filename()
195
if ret == gtk.RESPONSE_OK:
196
if self.CheckFileType(filename):
197
self.SetFileName(filename)
199
def SetFileName(self, text):
200
self.PureVirtual('SetFileName')
202
202
class FileStringSetting(StringMatchSetting, FileSetting):
203
def __init__(self, Setting):
204
StringMatchSetting.__init__(self, Setting)
205
FileSetting.__init__(self, Setting)
206
self.Widget = gtk.HBox()
207
self.Widget.set_spacing(5)
208
self.Widget.pack_start(self.Entry, True, True)
209
self.Widget.pack_start(self.Open, False, False)
203
def __init__(self, Setting):
204
StringMatchSetting.__init__(self, Setting)
205
FileSetting.__init__(self, Setting)
206
self.Widget = gtk.HBox()
207
self.Widget.set_spacing(5)
208
self.Widget.pack_start(self.Entry, True, True)
209
self.Widget.pack_start(self.Open, False, False)
211
def SetFileName(self, filename):
212
self.Entry.set_text(filename)
211
def SetFileName(self, filename):
212
self.Entry.set_text(filename)
215
215
class EnumSetting(Setting):
217
self.Widget = gtk.EventBox()
218
Tooltips.set_tip(self.Widget, self.Setting.LongDesc)
219
self.Combo = gtk.combo_box_new_text()
220
self.Widget.add(self.Combo)
221
sortedItems = sorted(self.Setting.Info[2].items(), EnumSettingSortCompare)
222
for name, value in sortedItems:
223
self.Combo.append_text(name)
224
self.Combo.connect('changed', self.Changed)
227
self.Combo.set_active(self.Setting.Value)
230
active = self.Combo.get_active_text()
231
self.Setting.Value = self.Setting.Info[2][active]
233
class BoolSetting(Setting):
236
self.Widget = gtk.HBox()
237
self.CheckButton = gtk.CheckButton(self.Setting.ShortDesc)
238
label = self.CheckButton.get_child()
239
if self.Setting.Integrated:
240
label.set_markup("<span foreground=\"blue\">%s</span>" % self.Setting.ShortDesc)
241
Tooltips.set_tip(self.CheckButton, self.Setting.LongDesc)
242
self.Widget.pack_start(self.CheckButton, True, True)
243
self.Widget.pack_start(self.Reset, False, False)
244
self.CheckButton.connect('toggled', self.Changed)
247
self.CheckButton.set_active(self.Setting.Value)
250
self.Setting.Value = self.CheckButton.get_active()
217
self.Widget = gtk.EventBox()
218
Tooltips.set_tip(self.Widget, self.Setting.LongDesc)
219
self.Combo = gtk.combo_box_new_text()
220
self.Widget.add(self.Combo)
221
sortedItems = sorted(self.Setting.Info[2].items(), EnumSettingSortCompare)
222
for name, value in sortedItems:
223
self.Combo.append_text(name)
224
self.Combo.connect('changed', self.Changed)
227
self.Combo.set_active(self.Setting.Value)
230
active = self.Combo.get_active_text()
231
self.Setting.Value = self.Setting.Info[2][active]
233
class BoolSetting (Setting):
237
self.Widget = gtk.HBox ()
238
self.CheckButton = gtk.CheckButton ()
239
label = gtk.Label (self.Setting.ShortDesc)
240
if self.Setting.Integrated:
241
label.set_markup ("<span foreground=\"blue\">%s</span>" % \
242
self.Setting.ShortDesc)
243
self.align = gtk.Alignment (0, 0.5)
244
self.align.add (label)
245
self.buttonAlign = gtk.Alignment (0, 0.5)
246
self.buttonAlign.set_padding (0, 0, 0, 10)
247
self.buttonAlign.add (self.CheckButton)
248
Tooltips.set_tip (self.CheckButton, self.Setting.LongDesc)
249
self.Widget.pack_start (self.align, True, True)
250
self.Widget.pack_start (self.buttonAlign, False, False)
251
self.Widget.pack_start (self.Reset, False, False)
252
self.CheckButton.connect ('toggled', self.Changed)
255
self.CheckButton.set_active (self.Setting.Value)
258
self.Setting.Value = self.CheckButton.get_active ()
252
260
class IntFloatSetting(Setting):
255
if self.Setting.Type == 'Int':
258
inc = self.Setting.Info[2]
260
self.Adj = gtk.Adjustment(self.Setting.Value, self.Setting.Info[0], self.Setting.Info[1], inc, inc*10)
261
self.Spin = gtk.SpinButton(self.Adj)
262
Tooltips.set_tip(self.Spin, self.Setting.LongDesc)
264
if self.Setting.Type == 'Float':
265
self.Spin.set_digits(4)
267
self.Scale = gtk.HScale(self.Adj)
268
Tooltips.set_tip(self.Scale, self.Setting.LongDesc)
269
self.Scale.props.draw_value = False
270
self.Scale.connect('button-release-event', self.Changed)
271
self.Scale.connect('focus-out-event', self.Changed)
272
self.Spin.connect('activate', self.Changed)
273
self.Spin.connect('button-release-event', self.Changed)
274
self.Spin.connect('focus-out-event', self.Changed)
275
self.Widget = self.Scale
277
def Attach(self, Table, row):
278
self.Reset.set_sensitive(not self.Setting.ReadOnly)
279
self.Scale.set_sensitive(not self.Setting.ReadOnly)
280
self.Spin.set_sensitive(not self.Setting.ReadOnly)
281
Table.attach(self.Label, 0, 1, row, row+1, gtk.FILL, TableDef, TableX, TableX)
282
Table.attach(self.Scale, 1, 2, row, row+1, TableDef, TableDef, TableX, TableX)
283
Table.attach(self.Spin, 2, 3, row, row+1, gtk.FILL, TableDef, TableX, TableX)
284
Table.attach(self.Reset, 99, 100, row, row+1, 0, TableDef, TableX, TableX)
287
self.Adj.set_value(self.Setting.Value)
290
self.Setting.Value = self.Adj.get_value()
263
if self.Setting.Type == 'Int':
266
inc = self.Setting.Info[2]
268
self.Adj = gtk.Adjustment(self.Setting.Value, self.Setting.Info[0], self.Setting.Info[1], inc, inc*10)
269
self.Spin = gtk.SpinButton(self.Adj)
270
Tooltips.set_tip(self.Spin, self.Setting.LongDesc)
272
if self.Setting.Type == 'Float':
273
self.Spin.set_digits(4)
275
self.Scale = gtk.HScale(self.Adj)
276
Tooltips.set_tip(self.Scale, self.Setting.LongDesc)
277
self.Scale.props.draw_value = False
278
self.Scale.connect('button-release-event', self.Changed)
279
self.Scale.connect('focus-out-event', self.Changed)
280
self.Spin.connect('activate', self.Changed)
281
self.Spin.connect('button-release-event', self.Changed)
282
self.Spin.connect('focus-out-event', self.Changed)
283
self.Widget = self.Scale
285
def Attach(self, Table, row):
286
self.Reset.set_sensitive(not self.Setting.ReadOnly)
287
self.Scale.set_sensitive(not self.Setting.ReadOnly)
288
self.Spin.set_sensitive(not self.Setting.ReadOnly)
289
Table.attach(self.Label, 0, 1, row, row+1, gtk.FILL, TableDef, TableX, TableX)
290
Table.attach(self.Scale, 1, 2, row, row+1, TableDef, TableDef, TableX, TableX)
291
Table.attach(self.Spin, 2, 3, row, row+1, gtk.FILL, TableDef, TableX, TableX)
292
Table.attach(self.Reset, 99, 100, row, row+1, 0, TableDef, TableX, TableX)
295
self.Adj.set_value(self.Setting.Value)
298
self.Setting.Value = self.Adj.get_value()
292
300
class ColorSetting(Setting):
294
self.Widget = gtk.ColorButton()
295
Tooltips.set_tip(self.Widget, self.Setting.LongDesc)
296
self.Widget.set_use_alpha(True)
297
self.Widget.connect('color-set', self.Changed)
300
col = gtk.gdk.Color()
301
col.red = self.Setting.Value[0]
302
col.green = self.Setting.Value[1]
303
col.blue = self.Setting.Value[2]
304
self.Widget.set_color(col)
305
self.Widget.set_alpha(self.Setting.Value[3])
308
col = self.Widget.get_color()
309
alpha = self.Widget.get_alpha()
310
self.Setting.Value = [col.red, col.green, col.blue, alpha]
302
self.Widget = gtk.ColorButton()
303
Tooltips.set_tip(self.Widget, self.Setting.LongDesc)
304
self.Widget.set_use_alpha(True)
305
self.Widget.connect('color-set', self.Changed)
308
col = gtk.gdk.Color()
309
col.red = self.Setting.Value[0]
310
col.green = self.Setting.Value[1]
311
col.blue = self.Setting.Value[2]
312
self.Widget.set_color(col)
313
self.Widget.set_alpha(self.Setting.Value[3])
316
col = self.Widget.get_color()
317
alpha = self.Widget.get_alpha()
318
self.Setting.Value = [col.red, col.green, col.blue, alpha]
312
320
class MultiListSetting(Setting):
314
self.Widget = gtk.VBox()
316
self.Settings = self.Setting # self.Setting is a list in this case
318
types, cols = self.ListInfo()
320
self.Store = gtk.ListStore(*types)
321
self.View = gtk.TreeView(self.Store)
322
Tooltips.set_tip(self.View, _("Multi-list settings. You can double-click a row to edit the values."))
323
self.View.set_headers_visible(True)
325
self.View.insert_column_with_attributes(-1, col[0], col[1], **col[2])
326
self.Store.connect('row-deleted', self.Changed)
327
self.Store.connect('rows-reordered', self.Changed)
328
self.View.connect('row-activated', self.Activated)
329
self.Select = self.View.get_selection()
330
self.Select.set_mode(gtk.SELECTION_MULTIPLE)
332
self.Widget.set_border_width(5)
333
self.Widget.set_spacing(5)
334
self.Widget.set_size_request(-1, 170)
335
self.Scroll = gtk.ScrolledWindow()
336
self.Scroll.props.hscrollbar_policy = gtk.POLICY_NEVER
337
self.Scroll.props.hscrollbar_policy = gtk.POLICY_AUTOMATIC
338
self.Scroll.add(self.View)
339
self.Widget.pack_start(self.Scroll, True, True)
341
buttonBox = gtk.HBox(False)
342
buttonBox.set_spacing(5)
343
self.Widget.pack_start(buttonBox, False, False)
344
buttonTypes = ((gtk.STOCK_ADD, self.Add),
345
(gtk.STOCK_DELETE, self.Delete),
346
(gtk.STOCK_EDIT, self.Edit),
347
(gtk.STOCK_GO_UP, self.MoveUp),
348
(gtk.STOCK_GO_DOWN, self.MoveDown),)
349
for type in buttonTypes:
350
b = gtk.Button(type[0])
351
b.set_use_stock(True)
352
buttonBox.pack_start(b, False, False)
353
b.connect('clicked', type[1])
354
buttonBox.pack_end(self.Reset, False, False)
356
def ColChanged(self, *args, **kwargs):
357
if self.Blocked <= 0:
358
self._ColChanged(*args, **kwargs)
359
self.Settings[0].Plugin.Context.Write()
361
def Changed(self, *args, **kwargs):
362
if self.Blocked <= 0:
364
self.Settings[0].Plugin.Context.Write()
366
def DoReset(self, foo):
367
for setting in self.Settings:
369
self.Setting[0].Plugin.Context.Write()
377
for setting in self.Settings:
378
if len(setting.Info) > 0 and setting.Info[0] == 'Int' and len(setting.Info[1][2]) > 0:
379
sortedItems = sorted(setting.Info[1][2].items(), EnumSettingSortCompare)
380
# select first item by default
382
value = sortedItems[pos][0]
383
elif setting.Info[0] == "Int" or setting.Info[0] == "Float":
388
values = self._Edit(values)
389
if values is not None:
391
iter = self.Store.append()
395
self.SetIterValue(iter, col, value)
400
selectedRows = self.Select.get_selected_rows()[1]
401
for path in selectedRows:
402
iter = self.Store.get_iter(path)
403
self.Store.remove(iter)
406
selectedRows = self.Select.get_selected_rows()[1]
407
if len(selectedRows) == 1:
408
iter = self.Store.get_iter(selectedRows[0])
410
for col in range(len(self.Settings)):
411
value = self.Store.get(iter, col)[0]
413
values = self._Edit(values)
417
self.SetIterValue(iter, col, value)
422
selectedRows = self.Select.get_selected_rows()[1]
423
if len(selectedRows) == 1:
424
iter = self.Store.get_iter(selectedRows[0])
425
prev = self.Store.get_iter_first()
426
if not self.Store.get_path(prev) == self.Store.get_path(iter):
427
while prev is not None and not self.Store.get_path(self.Store.iter_next(prev)) == self.Store.get_path(iter):
428
prev = self.Store.iter_next(prev)
429
self.Store.swap(iter, prev)
431
def MoveDown(self, b):
432
selectedRows = self.Select.get_selected_rows()[1]
433
if len(selectedRows) == 1:
434
iter = self.Store.get_iter(selectedRows[0])
435
next = self.Store.iter_next(iter)
437
self.Store.swap(iter, next)
443
for setting in self.Settings:
444
if setting.Info[0] == "String" or setting.Info[0] == "Match":
445
types.append(gobject.TYPE_STRING)
446
elif setting.Info[0] == "Int" and len(setting.Info[1][2]) > 0:
447
types.append(gobject.TYPE_STRING)
448
elif setting.Info[0] == "Int":
449
types.append(gobject.TYPE_INT)
450
elif setting.Info[0] == "Float":
451
types.append(gobject.TYPE_FLOAT)
453
renderer = gtk.CellRendererText()
454
renderer.connect("edited", self.ColChanged, col)
455
cols.append((setting.ShortDesc, renderer, {'text':col}))
460
def Activated(self, object, path, col):
466
for values in self.Settings[0].Value:
467
iters.append(self.Store.append())
471
for j in range(len(self.Settings)):
472
setting = self.Settings[j]
474
if len(setting.Info) > 0 and setting.Info[0] == 'Int' and len(setting.Info[1][2]) > 0:
475
pos = setting.Value[row]
476
sortedItems = sorted(setting.Info[1][2].items(), EnumSettingSortCompare)
477
value = sortedItems[pos][0]
479
if row < len(setting.Value):
480
value = setting.Value[row]
482
if setting.Info[0] == 'Int':
484
elif setting.Info[0] == 'String' or setting.Info[0] == 'Match':
486
self.Store.set(iter, j, value)
489
def _Edit(self, values=None):
490
dlg = gtk.Dialog(_("Edit"))
491
dlg.add_button(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL)
492
dlg.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK).grab_default()
493
dlg.set_default_response(gtk.RESPONSE_OK)
495
dlg.vbox.pack_start(table)
499
for setting in self.Settings:
500
ebox = gtk.EventBox()
501
label = gtk.Label(setting.ShortDesc)
503
Tooltips.set_tip(ebox, setting.LongDesc)
504
if self.Types[row] == gobject.TYPE_STRING and setting.Info[0] == 'Int' and len(setting.Info[1][2]) > 0:
505
comboBox = gtk.combo_box_new_text()
506
sortedItems = sorted(setting.Info[1][2].items(), EnumSettingSortCompare)
507
for item in sortedItems:
508
comboBox.append_text(item[0])
511
value = setting.Info[1][2][pos]
512
comboBox.set_active(value)
513
table.attach(ebox, 0, 1, row, row+1, xpadding=5, xoptions=gtk.FILL)
514
table.attach(comboBox, 2, 3, row, row+1, xpadding=5)
515
widgets.append(comboBox)
516
elif self.Types[row] == gobject.TYPE_STRING:
517
Tooltips.set_tip(ebox, setting.LongDesc)
519
Tooltips.set_tip(entry, setting.LongDesc)
521
entry.set_text(values[row])
522
table.attach(ebox, 0, 1, row, row+1, xpadding=5, xoptions=gtk.FILL)
523
table.attach(entry, 2, 3, row, row+1, xpadding=5)
524
widgets.append(entry)
525
elif self.Types[row] == gobject.TYPE_INT or self.Types[row] == gobject.TYPE_FLOAT:
527
if setting.Info[0] == 'Int':
530
inc = setting.Info[1][2]
534
adjustment = gtk.Adjustment(value, setting.Info[1][0], setting.Info[1][1], inc, inc*10)
535
spin = gtk.SpinButton(adjustment)
536
Tooltips.set_tip(spin, setting.LongDesc)
537
if setting.Info[0] == 'Float':
539
scale = gtk.HScale(adjustment)
540
Tooltips.set_tip(scale, setting.LongDesc)
541
scale.props.draw_value = False
542
table.attach(ebox, 0, 1, row, row+1, xpadding=5, xoptions=gtk.FILL)
543
table.attach(scale, 2, 3, row, row+1, xpadding=5)
544
table.attach(spin, 3, 4, row, row+1, xpadding=5, xoptions=gtk.FILL)
545
widgets.append(adjustment)
552
if ret == gtk.RESPONSE_OK:
555
for type in self.Types:
556
if type == gobject.TYPE_STRING:
558
if widgets[row].__class__ == gtk.Entry:
559
value = widgets[row].get_text()
560
elif widgets[row].__class__ == gtk.ComboBox:
561
value = widgets[row].get_active_text()
563
elif type == gobject.TYPE_INT:
564
value = int(widgets[row].get_value())
566
elif type == gobject.TYPE_FLOAT:
567
value = widgets[row].get_value()
574
def SetIterValue(self, iter, col, value):
575
if self.Types[col] == gobject.TYPE_STRING:
576
self.Store.set(iter, col, value)
577
elif self.Types[col] == gobject.TYPE_INT:
578
self.Store.set(iter, col, int(value))
579
elif self.Types[col] == gobject.TYPE_FLOAT:
580
self.Store.set(iter, col, float(value))
582
def _ColChanged(self, obj, path, value, col):
583
iter = self.Store.get_iter_from_string(path)
584
self.SetIterValue(iter, col, value)
589
for setting in self.Settings:
590
iter = self.Store.get_iter_first()
594
if setting.Info[0] == 'Int' and len(setting.Info[1][2]) > 0:
595
pos = self.Store.get(iter, col)[0]
596
value = setting.Info[1][2][pos]
598
value = self.Store.get(iter, col)[0]
600
iter = self.Store.iter_next(iter)
601
setting.Value = values
604
def Attach(self, table, row):
605
table.attach(self.Widget, 0, 100, row, row+1, xpadding=5)
322
self.Widget = gtk.VBox()
324
self.Settings = self.Setting # self.Setting is a list in this case
326
types, cols = self.ListInfo()
328
self.Store = gtk.ListStore(*types)
329
self.View = gtk.TreeView(self.Store)
330
Tooltips.set_tip(self.View, _("Multi-list settings. You can double-click a row to edit the values."))
331
self.View.set_headers_visible(True)
333
self.View.insert_column_with_attributes(-1, col[0], col[1], **col[2])
334
self.Store.connect('row-deleted', self.Changed)
335
self.Store.connect('rows-reordered', self.Changed)
336
self.View.connect('row-activated', self.Activated)
337
self.Select = self.View.get_selection()
338
self.Select.set_mode(gtk.SELECTION_MULTIPLE)
340
self.Widget.set_border_width(5)
341
self.Widget.set_spacing(5)
342
self.Widget.set_size_request(-1, 170)
343
self.Scroll = gtk.ScrolledWindow()
344
self.Scroll.props.hscrollbar_policy = gtk.POLICY_NEVER
345
self.Scroll.props.hscrollbar_policy = gtk.POLICY_AUTOMATIC
346
self.Scroll.add(self.View)
347
self.Widget.pack_start(self.Scroll, True, True)
349
buttonBox = gtk.HBox(False)
350
buttonBox.set_spacing(5)
351
self.Widget.pack_start(buttonBox, False, False)
352
buttonTypes = ((gtk.STOCK_ADD, self.Add),
353
(gtk.STOCK_DELETE, self.Delete),
354
(gtk.STOCK_EDIT, self.Edit),
355
(gtk.STOCK_GO_UP, self.MoveUp),
356
(gtk.STOCK_GO_DOWN, self.MoveDown),)
357
for type in buttonTypes:
358
b = gtk.Button(type[0])
359
b.set_use_stock(True)
360
buttonBox.pack_start(b, False, False)
361
b.connect('clicked', type[1])
362
buttonBox.pack_end(self.Reset, False, False)
364
def ColChanged(self, *args, **kwargs):
365
if self.Blocked <= 0:
366
self._ColChanged(*args, **kwargs)
367
self.Settings[0].Plugin.Context.Write()
369
def Changed(self, *args, **kwargs):
370
if self.Blocked <= 0:
372
self.Settings[0].Plugin.Context.Write()
374
def DoReset(self, foo):
375
for setting in self.Settings:
377
self.Setting[0].Plugin.Context.Write()
385
for setting in self.Settings:
386
if len(setting.Info) > 0 and setting.Info[0] == 'Int' and len(setting.Info[1][2]) > 0:
387
sortedItems = sorted(setting.Info[1][2].items(), EnumSettingSortCompare)
388
# select first item by default
390
value = sortedItems[pos][0]
391
elif setting.Info[0] == "Int" or setting.Info[0] == "Float":
396
values = self._Edit(values)
397
if values is not None:
399
iter = self.Store.append()
403
self.SetIterValue(iter, col, value)
408
selectedRows = self.Select.get_selected_rows()[1]
409
for path in selectedRows:
410
iter = self.Store.get_iter(path)
411
self.Store.remove(iter)
414
selectedRows = self.Select.get_selected_rows()[1]
415
if len(selectedRows) == 1:
416
iter = self.Store.get_iter(selectedRows[0])
418
for col in range(len(self.Settings)):
419
value = self.Store.get(iter, col)[0]
421
values = self._Edit(values)
425
self.SetIterValue(iter, col, value)
430
selectedRows = self.Select.get_selected_rows()[1]
431
if len(selectedRows) == 1:
432
iter = self.Store.get_iter(selectedRows[0])
433
prev = self.Store.get_iter_first()
434
if not self.Store.get_path(prev) == self.Store.get_path(iter):
435
while prev is not None and not self.Store.get_path(self.Store.iter_next(prev)) == self.Store.get_path(iter):
436
prev = self.Store.iter_next(prev)
437
self.Store.swap(iter, prev)
439
def MoveDown(self, b):
440
selectedRows = self.Select.get_selected_rows()[1]
441
if len(selectedRows) == 1:
442
iter = self.Store.get_iter(selectedRows[0])
443
next = self.Store.iter_next(iter)
445
self.Store.swap(iter, next)
451
for setting in self.Settings:
452
if setting.Info[0] == "String" or setting.Info[0] == "Match":
453
types.append(gobject.TYPE_STRING)
454
elif setting.Info[0] == "Int" and len(setting.Info[1][2]) > 0:
455
types.append(gobject.TYPE_STRING)
456
elif setting.Info[0] == "Int":
457
types.append(gobject.TYPE_INT)
458
elif setting.Info[0] == "Float":
459
types.append(gobject.TYPE_FLOAT)
461
renderer = gtk.CellRendererText()
462
renderer.connect("edited", self.ColChanged, col)
463
cols.append((setting.ShortDesc, renderer, {'text':col}))
468
def Activated(self, object, path, col):
474
for values in self.Settings[0].Value:
475
iters.append(self.Store.append())
479
for j in range(len(self.Settings)):
480
setting = self.Settings[j]
482
if len(setting.Info) > 0 and setting.Info[0] == 'Int' and len(setting.Info[1][2]) > 0:
483
pos = setting.Value[row]
484
sortedItems = sorted(setting.Info[1][2].items(), EnumSettingSortCompare)
485
value = sortedItems[pos][0]
487
if row < len(setting.Value):
488
value = setting.Value[row]
490
if setting.Info[0] == 'Int':
492
elif setting.Info[0] == 'String' or setting.Info[0] == 'Match':
494
self.Store.set(iter, j, value)
497
def _Edit(self, values=None):
498
dlg = gtk.Dialog(_("Edit"))
499
dlg.add_button(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL)
500
dlg.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK).grab_default()
501
dlg.set_default_response(gtk.RESPONSE_OK)
503
dlg.vbox.pack_start(table)
507
for setting in self.Settings:
508
ebox = gtk.EventBox()
509
label = gtk.Label(setting.ShortDesc)
511
Tooltips.set_tip(ebox, setting.LongDesc)
512
if self.Types[row] == gobject.TYPE_STRING and setting.Info[0] == 'Int' and len(setting.Info[1][2]) > 0:
513
comboBox = gtk.combo_box_new_text()
514
sortedItems = sorted(setting.Info[1][2].items(), EnumSettingSortCompare)
515
for item in sortedItems:
516
comboBox.append_text(item[0])
519
value = setting.Info[1][2][pos]
520
comboBox.set_active(value)
521
table.attach(ebox, 0, 1, row, row+1, xpadding=5, xoptions=gtk.FILL)
522
table.attach(comboBox, 2, 3, row, row+1, xpadding=5)
523
widgets.append(comboBox)
524
elif self.Types[row] == gobject.TYPE_STRING:
525
Tooltips.set_tip(ebox, setting.LongDesc)
527
Tooltips.set_tip(entry, setting.LongDesc)
529
entry.set_text(values[row])
530
table.attach(ebox, 0, 1, row, row+1, xpadding=5, xoptions=gtk.FILL)
531
table.attach(entry, 2, 3, row, row+1, xpadding=5)
532
widgets.append(entry)
533
elif self.Types[row] == gobject.TYPE_INT or self.Types[row] == gobject.TYPE_FLOAT:
535
if setting.Info[0] == 'Int':
538
inc = setting.Info[1][2]
542
adjustment = gtk.Adjustment(value, setting.Info[1][0], setting.Info[1][1], inc, inc*10)
543
spin = gtk.SpinButton(adjustment)
544
Tooltips.set_tip(spin, setting.LongDesc)
545
if setting.Info[0] == 'Float':
547
scale = gtk.HScale(adjustment)
548
Tooltips.set_tip(scale, setting.LongDesc)
549
scale.props.draw_value = False
550
table.attach(ebox, 0, 1, row, row+1, xpadding=5, xoptions=gtk.FILL)
551
table.attach(scale, 2, 3, row, row+1, xpadding=5)
552
table.attach(spin, 3, 4, row, row+1, xpadding=5, xoptions=gtk.FILL)
553
widgets.append(adjustment)
560
if ret == gtk.RESPONSE_OK:
563
for type in self.Types:
564
if type == gobject.TYPE_STRING:
566
if widgets[row].__class__ == gtk.Entry:
567
value = widgets[row].get_text()
568
elif widgets[row].__class__ == gtk.ComboBox:
569
value = widgets[row].get_active_text()
571
elif type == gobject.TYPE_INT:
572
value = int(widgets[row].get_value())
574
elif type == gobject.TYPE_FLOAT:
575
value = widgets[row].get_value()
582
def SetIterValue(self, iter, col, value):
583
if self.Types[col] == gobject.TYPE_STRING:
584
self.Store.set(iter, col, value)
585
elif self.Types[col] == gobject.TYPE_INT:
586
self.Store.set(iter, col, int(value))
587
elif self.Types[col] == gobject.TYPE_FLOAT:
588
self.Store.set(iter, col, float(value))
590
def _ColChanged(self, obj, path, value, col):
591
iter = self.Store.get_iter_from_string(path)
592
self.SetIterValue(iter, col, value)
597
for setting in self.Settings:
598
iter = self.Store.get_iter_first()
602
if setting.Info[0] == 'Int' and len(setting.Info[1][2]) > 0:
603
pos = self.Store.get(iter, col)[0]
604
value = setting.Info[1][2][pos]
606
value = self.Store.get(iter, col)[0]
608
iter = self.Store.iter_next(iter)
609
setting.Value = values
612
def Attach(self, table, row):
613
table.attach(self.Widget, 0, 100, row, row+1, xpadding=5)
607
615
class ListSetting(Setting):
609
self.Widget = gtk.Frame(self.Setting.ShortDesc)
610
label = self.Widget.get_label_widget()
611
if self.Setting.Integrated:
612
label.set_markup("<span foreground=\"blue\">%s</span>" % self.Setting.ShortDesc)
615
info = self._ListInfo()
616
self.Store = gtk.ListStore(*info[0])
617
self.View = gtk.TreeView(self.Store)
618
Tooltips.set_tip(self.View, self.Setting.LongDesc)
619
if len(info[0]) == 1:
620
self.View.set_headers_visible(False)
622
self.View.insert_column_with_attributes(-1, i[1], i[0], **i[2])
623
self.Store.connect('row-changed', self.Changed)
624
self.Store.connect('row-deleted', self.Changed)
625
self.Store.connect('row-inserted', self.Changed)
626
self.Store.connect('rows-reordered', self.Changed)
627
self.View.connect('row-activated', self.Activated)
628
self.Select = self.View.get_selection()
629
self.Select.set_mode(gtk.SELECTION_MULTIPLE)
632
box.set_border_width(5)
635
self.Scroll = gtk.ScrolledWindow()
636
self.Scroll.props.hscrollbar_policy = gtk.POLICY_NEVER
637
self.Scroll.props.hscrollbar_policy = gtk.POLICY_AUTOMATIC
638
self.Scroll.add(self.View)
639
box.pack_start(self.Scroll, True, True)
641
buttonBox = gtk.HBox(False)
642
buttonBox.set_spacing(5)
643
box.pack_start(buttonBox, False, False)
644
buttonTypes = ((gtk.STOCK_ADD, self.Add),
645
(gtk.STOCK_DELETE, self.Delete),
646
(gtk.STOCK_EDIT, self.Edit),
647
(gtk.STOCK_GO_UP, self.MoveUp),
648
(gtk.STOCK_GO_DOWN, self.MoveDown),)
649
for type in buttonTypes:
650
b = gtk.Button(type[0])
651
b.set_use_stock(True)
652
buttonBox.pack_start(b, False, False)
653
b.connect('clicked', type[1])
654
buttonBox.pack_end(self.Reset, False, False)
658
if value is not None:
660
Iter = self.Store.append()
662
self._ListSet(Iter, value)
665
selectedRows = self.Select.get_selected_rows()[1]
666
for path in selectedRows:
667
iter = self.Store.get_iter(path)
668
self.Store.remove(iter)
670
def Activated(self, object, path, col):
674
selectedRows = self.Select.get_selected_rows()[1]
675
if len(selectedRows) == 1:
676
iter = self.Store.get_iter(selectedRows[0])
677
value = self._Edit(self._ListGet(iter))
678
if value is not None:
679
self._ListSet(iter, value)
682
selectedRows = self.Select.get_selected_rows()[1]
683
if len(selectedRows) == 1:
684
iter = self.Store.get_iter(selectedRows[0])
685
prev = self.Store.get_iter_first()
686
if not self.Store.get_path(prev) == self.Store.get_path(iter):
687
while prev is not None and not self.Store.get_path(self.Store.iter_next(prev)) == self.Store.get_path(iter):
688
prev = self.Store.iter_next(prev)
689
self.Store.swap(iter, prev)
691
def MoveDown(self, b):
692
selectedRows = self.Select.get_selected_rows()[1]
693
if len(selectedRows) == 1:
694
iter = self.Store.get_iter(selectedRows[0])
695
next = self.Store.iter_next(iter)
697
self.Store.swap(iter, next)
700
self.PureVirtual('_ListInfo')
704
for value in self.Setting.Value:
705
iter = self.Store.append()
706
self._ListSet(iter, value)
708
def _ListSet(self, iter, value):
709
self.PureVirtual('_ListRead')
711
def _ListGet(self, iter):
712
self.PureVirtual('_ListGet')
714
def _Edit(self, d, value = None):
715
self.PureVirtual('_Edit')
719
iter = self.Store.get_iter_first()
721
value = self._ListGet(iter)
724
iter = self.Store.iter_next(iter)
725
self.Setting.Value = values
727
def Attach(self, table, row):
728
self.Widget.set_sensitive(not self.Setting.ReadOnly)
729
self.Reset.set_sensitive(not self.Setting.ReadOnly)
730
table.attach(self.Widget, 0, 100, row, row+1, xpadding=5)
617
self.Widget = gtk.Frame(self.Setting.ShortDesc)
618
label = self.Widget.get_label_widget()
619
if self.Setting.Integrated:
620
label.set_markup("<span foreground=\"blue\">%s</span>" % self.Setting.ShortDesc)
623
info = self._ListInfo()
624
self.Store = gtk.ListStore(*info[0])
625
self.View = gtk.TreeView(self.Store)
626
Tooltips.set_tip(self.View, self.Setting.LongDesc)
627
if len(info[0]) == 1:
628
self.View.set_headers_visible(False)
630
self.View.insert_column_with_attributes(-1, i[1], i[0], **i[2])
631
self.Store.connect('row-changed', self.Changed)
632
self.Store.connect('row-deleted', self.Changed)
633
self.Store.connect('row-inserted', self.Changed)
634
self.Store.connect('rows-reordered', self.Changed)
635
self.View.connect('row-activated', self.Activated)
636
self.Select = self.View.get_selection()
637
self.Select.set_mode(gtk.SELECTION_MULTIPLE)
640
box.set_border_width(5)
643
self.Scroll = gtk.ScrolledWindow()
644
self.Scroll.props.hscrollbar_policy = gtk.POLICY_NEVER
645
self.Scroll.props.hscrollbar_policy = gtk.POLICY_AUTOMATIC
646
self.Scroll.add(self.View)
647
box.pack_start(self.Scroll, True, True)
649
buttonBox = gtk.HBox(False)
650
buttonBox.set_spacing(5)
651
box.pack_start(buttonBox, False, False)
652
buttonTypes = ((gtk.STOCK_ADD, self.Add),
653
(gtk.STOCK_DELETE, self.Delete),
654
(gtk.STOCK_EDIT, self.Edit),
655
(gtk.STOCK_GO_UP, self.MoveUp),
656
(gtk.STOCK_GO_DOWN, self.MoveDown),)
657
for type in buttonTypes:
658
b = gtk.Button(type[0])
659
b.set_use_stock(True)
660
buttonBox.pack_start(b, False, False)
661
b.connect('clicked', type[1])
662
buttonBox.pack_end(self.Reset, False, False)
666
if value is not None:
668
Iter = self.Store.append()
670
self._ListSet(Iter, value)
673
selectedRows = self.Select.get_selected_rows()[1]
674
for path in selectedRows:
675
iter = self.Store.get_iter(path)
676
self.Store.remove(iter)
678
def Activated(self, object, path, col):
682
selectedRows = self.Select.get_selected_rows()[1]
683
if len(selectedRows) == 1:
684
iter = self.Store.get_iter(selectedRows[0])
685
value = self._Edit(self._ListGet(iter))
686
if value is not None:
687
self._ListSet(iter, value)
690
selectedRows = self.Select.get_selected_rows()[1]
691
if len(selectedRows) == 1:
692
iter = self.Store.get_iter(selectedRows[0])
693
prev = self.Store.get_iter_first()
694
if not self.Store.get_path(prev) == self.Store.get_path(iter):
695
while prev is not None and not self.Store.get_path(self.Store.iter_next(prev)) == self.Store.get_path(iter):
696
prev = self.Store.iter_next(prev)
697
self.Store.swap(iter, prev)
699
def MoveDown(self, b):
700
selectedRows = self.Select.get_selected_rows()[1]
701
if len(selectedRows) == 1:
702
iter = self.Store.get_iter(selectedRows[0])
703
next = self.Store.iter_next(iter)
705
self.Store.swap(iter, next)
708
self.PureVirtual('_ListInfo')
712
for value in self.Setting.Value:
713
iter = self.Store.append()
714
self._ListSet(iter, value)
716
def _ListSet(self, iter, value):
717
self.PureVirtual('_ListRead')
719
def _ListGet(self, iter):
720
self.PureVirtual('_ListGet')
722
def _Edit(self, d, value = None):
723
self.PureVirtual('_Edit')
727
iter = self.Store.get_iter_first()
729
value = self._ListGet(iter)
732
iter = self.Store.iter_next(iter)
733
self.Setting.Value = values
735
def Attach(self, table, row):
736
self.Widget.set_sensitive(not self.Setting.ReadOnly)
737
self.Reset.set_sensitive(not self.Setting.ReadOnly)
738
table.attach(self.Widget, 0, 100, row, row+1, xpadding=5)
732
740
class StringMatchListSetting(ListSetting):
734
return (gobject.TYPE_STRING, ), [(gtk.CellRendererText(), _("Value (%s)") % self.Setting.Info[0], {'text':0})]
736
def _ListSet(self, iter, value):
737
self.Store.set(iter, 0, value)
739
def _ListGet(self, iter):
740
return self.Store.get(iter, 0)[0]
742
def _Edit(self, value=""):
743
dlg = gtk.Dialog(_("Edit %s") % self.Setting.ShortDesc)
744
dlg.add_button(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL)
745
dlg.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK).grab_default()
746
dlg.set_default_response(gtk.RESPONSE_OK)
748
ebox = gtk.EventBox()
749
label = gtk.Label(_("Value (%s) for %s:") % (self.Setting.Info[0], self.Setting.ShortDesc))
752
Tooltips.set_tip(ebox, self.Setting.LongDesc)
753
dlg.vbox.pack_start(ebox)
756
Tooltips.set_tip(entry, self.Setting.LongDesc)
757
entry.props.activates_default = True
758
entry.set_text(value)
759
dlg.vbox.pack_start(entry)
765
if ret == gtk.RESPONSE_OK:
766
return entry.get_text()
742
return (gobject.TYPE_STRING, ), [(gtk.CellRendererText(), _("Value (%s)") % self.Setting.Info[0], {'text':0})]
744
def _ListSet(self, iter, value):
745
self.Store.set(iter, 0, value)
747
def _ListGet(self, iter):
748
return self.Store.get(iter, 0)[0]
750
def _Edit(self, value=""):
751
dlg = gtk.Dialog(_("Edit %s") % self.Setting.ShortDesc)
752
dlg.add_button(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL)
753
dlg.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK).grab_default()
754
dlg.set_default_response(gtk.RESPONSE_OK)
756
ebox = gtk.EventBox()
757
label = gtk.Label(_("Value (%s) for %s:") % (self.Setting.Info[0], self.Setting.ShortDesc))
760
Tooltips.set_tip(ebox, self.Setting.LongDesc)
761
dlg.vbox.pack_start(ebox)
764
Tooltips.set_tip(entry, self.Setting.LongDesc)
765
entry.props.activates_default = True
766
entry.set_text(value)
767
dlg.vbox.pack_start(entry)
773
if ret == gtk.RESPONSE_OK:
774
return entry.get_text()
769
777
class FileListSetting(StringMatchListSetting, FileSetting):
770
def __init__(self, Setting):
771
StringMatchListSetting.__init__(self, Setting)
772
FileSetting.__init__(self, Setting)
774
def _Edit(self, value=""):
775
dlg = gtk.Dialog(_("Edit %s") % self.Setting.ShortDesc)
776
dlg.add_button(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL)
777
dlg.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK).grab_default()
778
dlg.set_default_response(gtk.RESPONSE_OK)
780
ebox = gtk.EventBox()
781
label = gtk.Label(_("Value (%s) for %s:") % (self.Setting.Info[0], self.Setting.ShortDesc))
784
Tooltips.set_tip(ebox, self.Setting.LongDesc)
785
dlg.vbox.pack_start(ebox)
791
Tooltips.set_tip(entry, self.Setting.LongDesc)
792
entry.props.activates_default = True
793
entry.set_text(value)
794
hbox.pack_start(entry)
799
open.set_image(gtk.image_new_from_stock(gtk.STOCK_OPEN, gtk.ICON_SIZE_BUTTON))
800
open.connect('clicked', self.OpenFileChooser, value)
801
hbox.pack_start(open, False, False)
803
dlg.vbox.pack_start(hbox)
811
if ret == gtk.RESPONSE_OK:
812
return entry.get_text()
815
def SetFileName(self, filename):
816
if self.Entry != None:
817
self.Entry.set_text(filename)
778
def __init__(self, Setting):
779
StringMatchListSetting.__init__(self, Setting)
780
FileSetting.__init__(self, Setting)
782
def _Edit(self, value=""):
783
dlg = gtk.Dialog(_("Edit %s") % self.Setting.ShortDesc)
784
dlg.add_button(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL)
785
dlg.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK).grab_default()
786
dlg.set_default_response(gtk.RESPONSE_OK)
788
ebox = gtk.EventBox()
789
label = gtk.Label(_("Value (%s) for %s:") % (self.Setting.Info[0], self.Setting.ShortDesc))
792
Tooltips.set_tip(ebox, self.Setting.LongDesc)
793
dlg.vbox.pack_start(ebox)
799
Tooltips.set_tip(entry, self.Setting.LongDesc)
800
entry.props.activates_default = True
801
entry.set_text(value)
802
hbox.pack_start(entry)
807
open.set_image(gtk.image_new_from_stock(gtk.STOCK_OPEN, gtk.ICON_SIZE_BUTTON))
808
open.connect('clicked', self.OpenFileChooser, value)
809
hbox.pack_start(open, False, False)
811
dlg.vbox.pack_start(hbox)
819
if ret == gtk.RESPONSE_OK:
820
return entry.get_text()
823
def SetFileName(self, filename):
824
if self.Entry != None:
825
self.Entry.set_text(filename)
819
827
class IntDescListSetting(Setting):
821
self.Widget = gtk.Frame(self.Setting.ShortDesc)
822
self.Table = gtk.Table()
828
sortedItems = sorted(self.Setting.Info[1][2].items(), EnumSettingSortCompare)
829
self.minVal = sortedItems[0][1]
830
for key, value in sortedItems:
831
box = gtk.CheckButton(key)
832
Tooltips.set_tip(box, self.Setting.LongDesc)
833
self.Checks.append((key, box))
834
self.Table.attach(box, col, col+1, row, row+1, TableDef, TableDef, TableX, TableX)
835
box.connect('toggled', self.Changed)
841
self.HBox = gtk.HBox()
842
self.VBox = gtk.VBox()
843
self.HBox.pack_start(self.VBox, False, False)
844
self.HBox.pack_start(self.Table, True, True)
845
self.VBox.pack_start(self.Reset, False, False)
846
self.Widget.add(self.HBox)
849
for key, box in self.Checks:
850
box.set_active(False)
851
for setVal in self.Setting.Value:
852
self.Checks[setVal-self.minVal][1].set_active(True)
856
for key, box in self.Checks:
858
values.append(self.Setting.Info[1][2][key])
859
self.Setting.Value = values
861
def Attach(self, table, row):
862
self.Widget.set_sensitive(not self.Setting.ReadOnly)
863
self.Reset.set_sensitive(not self.Setting.ReadOnly)
864
table.attach(self.Widget, 0, 100, row, row+1, xpadding = 5)
829
self.Widget = gtk.Frame(self.Setting.ShortDesc)
830
self.Table = gtk.Table()
836
sortedItems = sorted(self.Setting.Info[1][2].items(), EnumSettingSortCompare)
837
self.minVal = sortedItems[0][1]
838
for key, value in sortedItems:
839
box = gtk.CheckButton(key)
840
Tooltips.set_tip(box, self.Setting.LongDesc)
841
self.Checks.append((key, box))
842
self.Table.attach(box, col, col+1, row, row+1, TableDef, TableDef, TableX, TableX)
843
box.connect('toggled', self.Changed)
849
self.HBox = gtk.HBox()
850
self.VBox = gtk.VBox()
851
self.HBox.pack_start(self.VBox, False, False)
852
self.HBox.pack_start(self.Table, True, True)
853
self.VBox.pack_start(self.Reset, False, False)
854
self.Widget.add(self.HBox)
857
for key, box in self.Checks:
858
box.set_active(False)
859
for setVal in self.Setting.Value:
860
self.Checks[setVal-self.minVal][1].set_active(True)
864
for key, box in self.Checks:
866
values.append(self.Setting.Info[1][2][key])
867
self.Setting.Value = values
869
def Attach(self, table, row):
870
self.Widget.set_sensitive(not self.Setting.ReadOnly)
871
self.Reset.set_sensitive(not self.Setting.ReadOnly)
872
table.attach(self.Widget, 0, 100, row, row+1, xpadding = 5)
866
874
class IntFloatListSetting(ListSetting):
868
return (gobject.TYPE_STRING, ), [(gtk.CellRendererText(),
869
_("Value (%s)") % self.Setting.Info[0], {'text':0})]
871
def _ListSet(self, Iter, v):
872
self.Store.set(Iter, 0, str(v))
874
def _ListGet(self, Iter):
875
return eval(self.Store.get(Iter, 0)[0])
877
def _Edit(self, value = None):
878
dlg = gtk.Dialog(_("Edit %s") % self.Setting.ShortDesc)
879
dlg.add_button(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL)
880
dlg.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK).grab_default()
881
dlg.set_default_response(gtk.RESPONSE_OK)
882
label = gtk.Label(_("Value (%s) for %s:") % (self.Setting.Info[0], self.Setting.ShortDesc))
883
ebox = gtk.EventBox()
885
Tooltips.set_tip(ebox, self.Setting.LongDesc)
886
dlg.vbox.pack_start(ebox)
888
dlg.vbox.pack_start(box)
890
val = self.Setting.Info[1][0]
891
if value is not None:
894
if self.Setting.Info[0] == 'Int':
897
inc = self.Setting.Info[1][2]
899
adj = gtk.Adjustment(val,
900
self.Setting.Info[1][0], self.Setting.Info[1][1],
902
spin = gtk.SpinButton(adj)
903
Tooltips.set_tip(spin, setting.LongDesc)
904
if self.Setting.Info[0] == 'Float':
906
scale = gtk.HScale(adj)
907
Tooltips.set_tip(scale, setting.LongDesc)
908
scale.props.draw_value = False
910
box.pack_start(scale, True, True)
911
box.pack_start(spin, False, False)
917
if ret == gtk.RESPONSE_OK:
918
return adj.get_value()
876
return (gobject.TYPE_STRING, ), [(gtk.CellRendererText(),
877
_("Value (%s)") % self.Setting.Info[0], {'text':0})]
879
def _ListSet(self, Iter, v):
880
self.Store.set(Iter, 0, str(v))
882
def _ListGet(self, Iter):
883
return eval(self.Store.get(Iter, 0)[0])
885
def _Edit(self, value = None):
886
dlg = gtk.Dialog(_("Edit %s") % self.Setting.ShortDesc)
887
dlg.add_button(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL)
888
dlg.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK).grab_default()
889
dlg.set_default_response(gtk.RESPONSE_OK)
890
label = gtk.Label(_("Value (%s) for %s:") % (self.Setting.Info[0], self.Setting.ShortDesc))
891
ebox = gtk.EventBox()
893
Tooltips.set_tip(ebox, self.Setting.LongDesc)
894
dlg.vbox.pack_start(ebox)
896
dlg.vbox.pack_start(box)
898
val = self.Setting.Info[1][0]
899
if value is not None:
902
if self.Setting.Info[0] == 'Int':
905
inc = self.Setting.Info[1][2]
907
adj = gtk.Adjustment(val,
908
self.Setting.Info[1][0], self.Setting.Info[1][1],
910
spin = gtk.SpinButton(adj)
911
Tooltips.set_tip(spin, setting.LongDesc)
912
if self.Setting.Info[0] == 'Float':
914
scale = gtk.HScale(adj)
915
Tooltips.set_tip(scale, setting.LongDesc)
916
scale.props.draw_value = False
918
box.pack_start(scale, True, True)
919
box.pack_start(spin, False, False)
925
if ret == gtk.RESPONSE_OK:
926
return adj.get_value()
921
929
def MakeSetting(setting):
922
if setting.Type == 'String' or setting.Type == 'Match':
923
if len(setting.Hints) > 0 and setting.Hints.__contains__('file'):
924
return FileStringSetting(setting)
926
return StringMatchSetting(setting)
927
elif setting.Type == 'Bool':
928
return BoolSetting(setting)
929
elif setting.Type == 'Int' and len(setting.Info[2].keys()) > 0:
930
return EnumSetting(setting)
931
elif setting.Type == 'Float' or setting.Type == 'Int':
932
return IntFloatSetting(setting)
933
elif setting.Type == 'Color':
934
return ColorSetting(setting)
935
elif setting.Type == 'List':
936
if setting.Info[0] == 'String' or setting.Info[0] == 'Match':
937
if len(setting.Hints) > 0 and setting.Hints.__contains__('file'):
938
return FileListSetting(setting)
940
return StringMatchListSetting(setting)
941
elif setting.Info[0] == 'Int':
942
if len(setting.Info[1][2]) > 0:
943
return IntDescListSetting(setting)
945
return IntFloatListSetting(setting)
946
elif setting.Info[0] == 'Float':
947
return IntFloatListSetting(setting)
949
raise TypeError, _("Unhandled list type %s for %s")%(setting.Info[0], setting.Name)
930
if setting.Type == 'String' or setting.Type == 'Match':
931
if len(setting.Hints) > 0 and setting.Hints.__contains__('file'):
932
return FileStringSetting(setting)
934
return StringMatchSetting(setting)
935
elif setting.Type == 'Bool':
936
return BoolSetting(setting)
937
elif setting.Type == 'Int' and len(setting.Info[2].keys()) > 0:
938
return EnumSetting(setting)
939
elif setting.Type == 'Float' or setting.Type == 'Int':
940
return IntFloatSetting(setting)
941
elif setting.Type == 'Color':
942
return ColorSetting(setting)
943
elif setting.Type == 'List':
944
if setting.Info[0] == 'String' or setting.Info[0] == 'Match':
945
if len(setting.Hints) > 0 and setting.Hints.__contains__('file'):
946
return FileListSetting(setting)
948
return StringMatchListSetting(setting)
949
elif setting.Info[0] == 'Int':
950
if len(setting.Info[1][2]) > 0:
951
return IntDescListSetting(setting)
953
return IntFloatListSetting(setting)
954
elif setting.Info[0] == 'Float':
955
return IntFloatListSetting(setting)
957
raise TypeError, _("Unhandled list type %s for %s")%(setting.Info[0], setting.Name)
952
960
class SubGroupArea:
953
def __init__(self, name, subGroup, filter=None):
955
settings = FilterSettings(sorted(sum((v.values() for v in [subGroup.Display]+[subGroup.Screens[CurrentScreenNum]]), []), SettingSortCompare), filter, noActions=True)
957
self.Widget = gtk.Table()
958
self.Child = self.Widget
960
self.Widget = gtk.Frame()
961
self.Expander = gtk.Expander(name)
962
self.Widget.add(self.Expander)
963
self.Expander.set_expanded(False)
964
self.Child = gtk.Table()
965
self.Expander.add(self.Child)
967
# create a special widget for list subGroups
968
if len(settings) > 1 and HasOnlyType(settings, 'List'):
969
multiList = MultiListSetting(settings)
971
multiList.Attach(self.Child, 0)
973
self.Expander.set_expanded(True)
975
return # exit earlier to avoid unneeded logic's
979
for setting in settings:
980
if not setting.Name == 'active_plugins':
981
set = MakeSetting(setting)
984
set.Attach(self.Child, row)
985
self.MySettings = self.MySettings + [set]
989
if name != '' and row < 4: # ahi hay magic numbers!
990
self.Expander.set_expanded(True)
961
def __init__(self, name, subGroup, filter=None):
963
settings = FilterSettings(sorted(sum((v.values() for v in [subGroup.Display]+[subGroup.Screens[CurrentScreenNum]]), []), SettingSortCompare), filter, noActions=True)
965
self.Widget = gtk.Table()
966
self.Child = self.Widget
968
self.Widget = gtk.Frame()
969
self.Expander = gtk.Expander(name)
970
self.Widget.add(self.Expander)
971
self.Expander.set_expanded(False)
972
self.Child = gtk.Table()
973
self.Expander.add(self.Child)
975
# create a special widget for list subGroups
976
if len(settings) > 1 and HasOnlyType(settings, 'List'):
977
multiList = MultiListSetting(settings)
979
multiList.Attach(self.Child, 0)
981
self.Expander.set_expanded(True)
983
return # exit earlier to avoid unneeded logic's
987
for setting in settings:
988
if not setting.Name == 'active_plugins':
989
set = MakeSetting(setting)
992
set.Attach(self.Child, row)
993
self.MySettings = self.MySettings + [set]
997
if name != '' and row < 4: # ahi hay magic numbers!
998
self.Expander.set_expanded(True)