32
32
def __init__(self, label, text=None):
33
self.table = gtk.Table(rows=1, columns=2)
34
self.gtkLabel = gtk.Label((label + ":"))
33
self.table = Gtk.Table(rows=1, columns=2)
34
self.gtkLabel = Gtk.Label(label=(label + ":"))
35
35
self.gtkLabel.set_alignment(xalign=0.0, yalign=0.5)
36
36
self.gtkLabel.show()
37
37
self.table.attach(self.gtkLabel, 0, 1, 0, 1)
39
self.entry = gtk.Entry()
39
self.entry = Gtk.Entry()
41
41
self.entry.set_text(text)
43
self.table.attach(self.entry, 1, 2, 0, 1, xoptions=gtk.FILL)
43
self.table.attach(self.entry, 1, 2, 0, 1, xoptions=Gtk.AttachOptions.FILL)
46
46
def set_value(self, value):
53
53
return self.table, self.entry
55
55
def set_color(self, red, blue, green):
56
self.entry.modify_base(gtk.STATE_NORMAL, \
57
gtk.gdk.Color(red, blue, green))
56
self.entry.modify_base(Gtk.StateType.NORMAL, \
57
Gdk.Color(red, blue, green))
59
59
def grab_focus(self):
60
60
self.entry.grab_focus()
63
63
class PasswordEntry():
65
65
def __init__(self, label, text=None):
66
self.table = gtk.Table(rows=1, columns=2)
67
self.gtkLabel = gtk.Label((label + ":"))
66
self.table = Gtk.Table(rows=1, columns=2)
67
self.gtkLabel = Gtk.Label(label=(label + ":"))
68
68
self.gtkLabel.set_alignment(xalign=0.0, yalign=0.5)
69
69
self.gtkLabel.show()
70
70
self.table.attach(self.gtkLabel, 0, 1, 0, 1)
72
self.entry = gtk.Entry()
72
self.entry = Gtk.Entry()
73
73
self.entry.set_visibility(False)
75
75
self.entry.set_text(text)
77
self.table.attach(self.entry, 1, 2, 0, 1, xoptions=gtk.FILL)
77
self.table.attach(self.entry, 1, 2, 0, 1, xoptions=Gtk.AttachOptions.FILL)
80
80
def set_value(self, value):
87
87
return self.table, self.entry
89
89
def set_color(self, red, blue, green):
90
self.entry.modify_base(gtk.STATE_NORMAL, \
91
gtk.gdk.Color(red, blue, green))
90
self.entry.modify_base(Gtk.StateType.NORMAL, \
91
Gdk.Color(red, blue, green))
93
93
def grab_focus(self):
94
94
self.entry.grab_focus()
99
99
def __init__(self, label, value=1, lower=1, upper=100, \
100
100
step_incr=1, page_incr=10, page_size=0):
101
self.table = gtk.Table(rows=1, columns=2)
102
self.gtkLabel = gtk.Label((label + ":"))
101
self.table = Gtk.Table(rows=1, columns=2)
102
self.gtkLabel = Gtk.Label(label=(label + ":"))
103
103
self.gtkLabel.set_alignment(xalign=0.0, yalign=0.5)
104
104
self.gtkLabel.show()
105
105
self.table.attach(self.gtkLabel, 0, 1, 0, 1)
107
adjustment = gtk.Adjustment(value, lower, upper, \
107
adjustment = Gtk.Adjustment(value, lower, upper, \
108
108
step_incr, page_incr, page_size)
109
self.spinbutton = gtk.SpinButton(adjustment)
109
self.spinbutton = Gtk.SpinButton(adjustment)
110
110
self.spinbutton.show()
111
self.table.attach(self.spinbutton, 1, 2, 0, 1, xoptions=gtk.FILL)
111
self.table.attach(self.spinbutton, 1, 2, 0, 1, xoptions=Gtk.AttachOptions.FILL)
112
112
self.table.show()
114
114
def set_value(self, value):
121
121
return self.table, self.spinbutton
123
123
def set_color(self, red, blue, green):
124
self.spinbutton.modify_base(gtk.STATE_NORMAL, \
125
gtk.gdk.Color(red, blue, green))
124
self.spinbutton.modify_base(Gtk.StateType.NORMAL, \
125
Gdk.Color(red, blue, green))
127
127
def grab_focus(self):
128
128
self.spinbutton.grab_focus()
131
131
class CheckButton():
133
133
def __init__(self, label, value=False):
134
self.table = gtk.Table(rows=1, columns=2)
135
self.gtkLabel = gtk.Label((label + ":"))
134
self.table = Gtk.Table(rows=1, columns=2)
135
self.gtkLabel = Gtk.Label(label=(label + ":"))
136
136
self.gtkLabel.set_alignment(xalign=0.0, yalign=0.5)
137
137
self.gtkLabel.show()
138
138
self.table.attach(self.gtkLabel, 0, 1, 0, 1)
140
self.checkbutton = gtk.CheckButton()
140
self.checkbutton = Gtk.CheckButton()
141
141
self.checkbutton.set_active(value)
142
142
self.checkbutton.set_alignment(xalign=1.0, yalign=0.0)
143
143
self.checkbutton.show()
144
self.table.attach(self.checkbutton, 1, 2, 0, 1, xoptions=gtk.FILL)
144
self.table.attach(self.checkbutton, 1, 2, 0, 1, xoptions=Gtk.AttachOptions.FILL)
145
145
self.table.show()
147
147
def set_value(self, value):
154
154
return self.table, self.checkbutton
156
156
def set_color(self, red, blue, green):
157
self.checkbutton.modify_base(gtk.STATE_NORMAL, \
158
gtk.gdk.Color(red, blue, green))
157
self.checkbutton.modify_base(Gtk.StateType.NORMAL, \
158
Gdk.Color(red, blue, green))
160
160
def grab_focus(self):
161
161
self.checkbutton.grab_focus()
164
164
class FileChooser():
166
166
def __init__(self, label, value=False):
167
self.table = gtk.Table(rows=2, columns=1)
168
self.gtkLabel = gtk.Label((label + ":"))
167
self.table = Gtk.Table(rows=2, columns=1)
168
self.gtkLabel = Gtk.Label(label=(label + ":"))
169
169
self.gtkLabel.set_alignment(xalign=0.0, yalign=0.5)
170
170
self.gtkLabel.show()
171
171
self.table.attach(self.gtkLabel, 0, 1, 0, 1)
173
self.filechooser = gtk.FileChooserButton(_("Choose a file"))
174
self.filechooser.set_action(gtk.FILE_CHOOSER_ACTION_OPEN)
173
self.filechooser = Gtk.FileChooserButton(_("Choose a file"))
174
self.filechooser.set_action(Gtk.FileChooserAction.OPEN)
175
175
self.filechooser.set_filename(os.environ['HOME'])
176
176
self.filechooser.show()
177
self.table.attach(self.filechooser, 0, 1, 1, 2, xoptions=gtk.FILL)
177
self.table.attach(self.filechooser, 0, 1, 1, 2, xoptions=Gtk.AttachOptions.FILL)
178
178
self.table.show()
180
180
def set_value(self, value):
187
187
return self.table, self.filechooser
189
189
def set_color(self, red, blue, green):
190
self.filechooser.modify_base(gtk.STATE_NORMAL, \
191
gtk.gdk.Color(red, blue, green))
190
self.filechooser.modify_base(Gtk.StateType.NORMAL, \
191
Gdk.Color(red, blue, green))
193
193
def grab_focus(self):
194
194
self.filechooser.grab_focus()
197
197
class FolderChooser():
199
199
def __init__(self, label, value=False):
200
self.table = gtk.Table(rows=2, columns=1)
201
self.gtkLabel = gtk.Label((label + ":"))
200
self.table = Gtk.Table(rows=2, columns=1)
201
self.gtkLabel = Gtk.Label(label=(label + ":"))
202
202
self.gtkLabel.set_alignment(xalign=0.0, yalign=0.5)
203
203
self.gtkLabel.show()
204
204
self.table.attach(self.gtkLabel, 0, 1, 0, 1)
206
self.dirchooser = gtk.FileChooserButton(_("Choose a directory"))
207
self.dirchooser.set_action(gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER)
206
self.dirchooser = Gtk.FileChooserButton(_("Choose a directory"))
207
self.dirchooser.set_action(Gtk.FileChooserAction.SELECT_FOLDER)
208
208
self.dirchooser.set_filename(os.environ['HOME'])
209
209
self.dirchooser.show()
210
self.table.attach(self.dirchooser, 0, 1, 1, 2, xoptions=gtk.FILL)
210
self.table.attach(self.dirchooser, 0, 1, 1, 2, xoptions=Gtk.AttachOptions.FILL)
211
211
self.table.show()
213
213
def set_value(self, value):
220
220
return self.table, self.dirchooser
222
222
def set_color(self, red, blue, green):
223
self.dirchooser.modify_base(gtk.STATE_NORMAL, \
224
gtk.gdk.Color(red, blue, green))
223
self.dirchooser.modify_base(Gtk.StateType.NORMAL, \
224
Gdk.Color(red, blue, green))
226
226
def grab_focus(self):
227
227
self.dirchooser.grab_focus()
232
232
def __init__(self, label, value=0, lower=0, upper=100, \
233
233
step_incr=1.0, page_incr=1.0, page_size=10):
234
self.table = gtk.Table(rows=2, columns=1)
234
self.table = Gtk.Table(rows=2, columns=1)
236
self.gtkLabel = gtk.Label((label + ":"))
236
self.gtkLabel = Gtk.Label(label=(label + ":"))
237
237
self.gtkLabel.set_alignment(xalign=0.0, yalign=0.5)
238
238
self.gtkLabel.show()
239
239
self.table.attach(self.gtkLabel, 0, 1, 0, 1)
245
245
self.page_incr = page_incr
246
246
self.page_size = page_size
248
_adjustment = gtk.Adjustment(value, lower, upper, \
248
_adjustment = Gtk.Adjustment(value, lower, upper, \
249
249
step_incr, page_incr, page_size)
250
self.scale = gtk.HScale(adjustment=_adjustment)
250
self.scale = Gtk.HScale(adjustment=_adjustment)
251
251
self.scale.set_digits(1)
252
self.scale.set_value_pos(gtk.POS_RIGHT)
252
self.scale.set_value_pos(Gtk.PositionType.RIGHT)
253
253
self.scale.show()
254
self.table.attach(self.scale, 0, 1, 1, 2, xoptions=gtk.FILL)
254
self.table.attach(self.scale, 0, 1, 1, 2, xoptions=Gtk.AttachOptions.FILL)
255
255
self.table.show()
257
257
def set_value(self, value):
258
_adjustment = gtk.Adjustment(value, self.lower, self.upper, \
258
_adjustment = Gtk.Adjustment(value, self.lower, self.upper, \
259
259
self.step_incr, self.page_incr, self.page_size)
260
260
self.scale.set_adjustment(_adjustment)
266
266
return self.table, self.scale
268
268
def set_color(self, red, blue, green):
269
self.scale.modify_base(gtk.STATE_NORMAL, \
270
gtk.gdk.Color(red, blue, green))
269
self.scale.modify_base(Gtk.StateType.NORMAL, \
270
Gdk.Color(red, blue, green))
272
272
def grab_focus(self):
273
273
self.scale.grab_focus()
276
276
class RemoveDialog():
278
278
def __init__(self, title, text):
279
dialog = gtk.Dialog(title, None, gtk.DIALOG_MODAL | \
280
gtk.DIALOG_NO_SEPARATOR | gtk.DIALOG_DESTROY_WITH_PARENT, None)
279
dialog = Gtk.Dialog(title, None, Gtk.DialogFlags.MODAL | \
280
Gtk.DialogFlags.NO_SEPARATOR | Gtk.DialogFlags.DESTROY_WITH_PARENT, None)
282
282
dialog.set_has_separator(False)
284
dialog.add_button(gtk.STOCK_CANCEL, -1)
285
dialog.add_button(gtk.STOCK_REMOVE, 3)
287
dialog.label_hbox = gtk.HBox(spacing=6)
290
icon.set_from_stock(gtk.STOCK_DIALOG_WARNING, gtk.ICON_SIZE_DIALOG)
284
dialog.add_button(Gtk.STOCK_CANCEL, -1)
285
dialog.add_button(Gtk.STOCK_REMOVE, 3)
287
dialog.label_hbox = Gtk.HBox(spacing=6)
290
icon.set_from_stock(Gtk.STOCK_DIALOG_WARNING, Gtk.IconSize.DIALOG)
291
291
dialog.label_hbox.pack_start(icon, True, True, 6)
294
294
text = text.replace("&", "&")
295
label = gtk.Label(text)
295
label = Gtk.Label(label=text)
296
296
label.set_use_markup(True)
297
297
dialog.label_hbox.pack_start(label, True, True, 6)
331
331
self.error_dialog = self.builder.get_object("error_dialog")
332
332
self.error_dialog.show()
333
icon = gtk.gdk.pixbuf_new_from_file(os.path.join(self.specto.PATH, "icons/specto_window_icon.png"))
333
icon = GdkPixbuf.Pixbuf.new_from_file(os.path.join(self.specto.PATH, "icons/specto_window_icon.png"))
334
334
self.error_dialog.set_icon(icon)
336
self.errorwindow = gtk.TextBuffer(None)
336
self.errorwindow = Gtk.TextBuffer(None)
337
337
self.builder.get_object("error_message").set_buffer(self.errorwindow)
338
338
self.errorwindow.set_text(error_message)
340
self.builder.get_object("image").set_from_stock(gtk.STOCK_DIALOG_ERROR, \
341
gtk.ICON_SIZE_DIALOG)
340
self.builder.get_object("image").set_from_stock(Gtk.STOCK_DIALOG_ERROR, \
343
343
self.builder.get_object("label4").set_use_markup(True)
344
344
self.builder.get_object("label4").set_label(_("<b>Specto encountered an error</b>\nPlease verify if this bug has been entered in our issue tracker, and if not, file a bug report so we can fix it."))
356
class SaveDialog(gtk.FileChooserDialog):
356
class SaveDialog(Gtk.FileChooserDialog):
358
358
Class for displaying a generic save dialog for Specto.
361
361
def __init__(self, specto):
362
gtk.FileChooserDialog.__init__(self, _("Save file as"), None,
363
gtk.FILE_CHOOSER_ACTION_SAVE,
364
(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
365
gtk.STOCK_SAVE, gtk.RESPONSE_OK))
362
GObject.GObject.__init__(self, _("Save file as"), None,
363
Gtk.FileChooserAction.SAVE,
364
(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
365
Gtk.STOCK_SAVE, Gtk.ResponseType.OK))
366
366
self.specto = specto
367
367
windowname = "filechooser"
369
self.set_icon(gtk.gdk.pixbuf_new_from_file(os.path.join(self.specto.PATH, "icons/specto_window_icon.png")))
369
self.set_icon(GdkPixbuf.Pixbuf.new_from_file(os.path.join(self.specto.PATH, "icons/specto_window_icon.png")))
370
370
self.set_filename(os.environ['HOME'] + "/ ")
372
372
def cancel(self, *args):
376
376
def save(self, *args):
377
377
raise NotImplementedError
379
class OpenDialog(gtk.FileChooserDialog):
379
class OpenDialog(Gtk.FileChooserDialog):
381
381
Class for displaying a generic open dialog for Specto.
384
384
def __init__(self, specto):
385
gtk.FileChooserDialog.__init__(self, _("Open file"), None,
386
gtk.FILE_CHOOSER_ACTION_OPEN,
387
(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
388
gtk.STOCK_OPEN, gtk.RESPONSE_OK))
385
GObject.GObject.__init__(self, _("Open file"), None,
386
Gtk.FileChooserAction.OPEN,
387
(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
388
Gtk.STOCK_OPEN, Gtk.ResponseType.OK))
389
389
self.specto = specto
390
390
windowname = "open_file_chooser"
392
icon = gtk.gdk.pixbuf_new_from_file(os.path.join(self.specto.PATH, "icons/specto_window_icon.png"))
392
icon = GdkPixbuf.Pixbuf.new_from_file(os.path.join(self.specto.PATH, "icons/specto_window_icon.png"))
393
393
self.set_icon(icon)
394
394
self.set_filename(os.environ['HOME'] + "/ ")
406
406
watch_options = {}
408
408
if not widget_type == "scale":
409
gtkLabel = gtk.Label((label + ":"))
409
gtkLabel = Gtk.Label(label=(label + ":"))
410
410
gtkLabel.set_alignment(xalign=0.0, yalign=0.5)
412
412
table.attach(gtkLabel, 0, 1, i, i + 1)
414
414
if widget_type == "entry":
417
417
watch_options.update({value: entry})
418
418
table.attach(entry, 1, 2, i, i + 1)
419
419
elif widget_type == "password":
421
421
entry.set_visibility(False)
423
423
watch_options.update({value: entry})
424
424
table.attach(entry, 1, 2, i, i + 1)
425
425
elif widget_type == "scale":
426
scale_table = gtk.Table(rows=2, columns=1, homogeneous=False)
426
scale_table = Gtk.Table(rows=2, columns=1, homogeneous=False)
428
adjustment_label = gtk.Label((label + ":"))
428
adjustment_label = Gtk.Label(label=(label + ":"))
429
429
adjustment_label.set_alignment(xalign=0.0, yalign=0.5)
430
430
adjustment_label.show()
431
431
scale_table.attach(adjustment_label, 0, 1, 0, 1)
433
_adjustment = gtk.Adjustment(value=2.0, lower=0, upper=50, \
433
_adjustment = Gtk.Adjustment(value=2.0, lower=0, upper=50, \
434
434
step_incr=0.1, page_incr=1.0, page_size=10)
435
scale = gtk.HScale(adjustment=_adjustment)
435
scale = Gtk.HScale(adjustment=_adjustment)
436
436
scale.set_digits(1)
437
scale.set_value_pos(gtk.POS_RIGHT)
437
scale.set_value_pos(Gtk.PositionType.RIGHT)
439
439
scale_table.attach(scale, 0, 1, 1, 2)
442
442
scale_table.show()
443
443
table.attach(scale_table, 0, 2, i, i + 1)
444
444
elif widget_type == "checkbox":
445
checkbox = gtk.CheckButton()
445
checkbox = Gtk.CheckButton()
447
447
watch_options.update({value: checkbox})
448
448
table.attach(checkbox, 1, 2, i, i + 1)
449
449
elif widget_type == "filechooser":
450
filechooser = gtk.FileChooserButton(_("Choose a file"))
451
filechooser.set_action(gtk.FILE_CHOOSER_ACTION_OPEN)
450
filechooser = Gtk.FileChooserButton(_("Choose a file"))
451
filechooser.set_action(Gtk.FileChooserAction.OPEN)
452
452
filechooser.show()
453
453
watch_options.update({value: filechooser})
454
454
table.attach(filechooser, 1, 2, i, i + 1)
455
455
elif widget_type == "dirchooser":
456
dirchooser = gtk.FileChooserButton(_("Choose a directory"))
457
dirchooser.set_action(gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER)
456
dirchooser = Gtk.FileChooserButton(_("Choose a directory"))
457
dirchooser.set_action(Gtk.FileChooserAction.SELECT_FOLDER)
458
458
dirchooser.show()
459
459
watch_options.update({value: dirchooser})
460
460
table.attach(dirchooser, 1, 2, i, i + 1)
461
461
elif widget_type == "calendar":
462
calendar = gtk.Calendar()
462
calendar = Gtk.Calendar()
464
464
watch_options.update({value: calendar})
465
465
table.attach(calendar, 1, 2, i, i + 1)
466
466
elif widget_type == "time":
467
time_table = gtk.Table(rows=1, columns=2, homogeneous=False)
468
minutes_adjustment = gtk.Adjustment(value=1, lower=1, upper=60, \
467
time_table = Gtk.Table(rows=1, columns=2, homogeneous=False)
468
minutes_adjustment = Gtk.Adjustment(value=1, lower=1, upper=60, \
469
469
step_incr=1, page_incr=10, page_size=0)
470
hours_adjustment = gtk.Adjustment(value=1, lower=1, upper=24, \
470
hours_adjustment = Gtk.Adjustment(value=1, lower=1, upper=24, \
471
471
step_incr=1, page_incr=10, page_size=0)
472
hours = gtk.SpinButton(hours_adjustment)
472
hours = Gtk.SpinButton(hours_adjustment)
474
minutes = gtk.SpinButton(minutes_adjustment)
474
minutes = Gtk.SpinButton(minutes_adjustment)
476
476
time_table.attach(hours, 1, 2, 1, 2)
477
477
time_table.attach(minutes, 2, 3, 1, 2)
486
486
if widget_type == "entry" or widget_type == "password":
487
487
widget.set_text(value)
488
488
elif widget_type == "scale":
489
_adjustment = gtk.Adjustment(value=value * 100, lower=0, \
489
_adjustment = Gtk.Adjustment(value=value * 100, lower=0, \
490
490
upper=50, step_incr=0.1, page_incr=1.0, page_size=10)
491
491
widget.set_adjustment(_adjustment)
492
492
elif widget_type == "checkbox":
531
531
def create_menu_item(label, callback=None, icon=None):
532
menuItem = gtk.MenuItem(label, True)
532
menuItem = Gtk.MenuItem(label, True)
534
menuItem = gtk.ImageMenuItem(label)
534
menuItem = Gtk.ImageMenuItem(label)
536
536
# handle the icon as a stock icon.
538
image.set_from_stock(icon, gtk.ICON_SIZE_MENU)
538
image.set_from_stock(icon, Gtk.IconSize.MENU)
539
539
except TypeError:
540
540
# err, icon is a string, do nothing.