def create_interval_accels_config(self, parent):
it, page_vbox = self.new_page_box(parent, _("Interval keyboard accelerators"))
self.g_interval_accels = Gtk.ListStore(GObject.TYPE_STRING,
GObject.TYPE_STRING)
intervals = ['minor2', 'major2', 'minor3', 'major3',
'perfect4', 'diminished5', 'perfect5', 'minor6',
'major6', 'minor7', 'major7', 'perfect8',
'minor9', 'major9', 'minor10', 'major10']
for interval in intervals:
self.g_interval_accels.append((
mpd.Interval.new_from_int(intervals.index(interval)).get_name(),
cfg.get_string('interval_input/%s' % interval)))
self.g_intervals_treeview = Gtk.TreeView(self.g_interval_accels)
renderer = Gtk.CellRendererText()
column = Gtk.TreeViewColumn(_("Interval"), renderer, text=0)
self.g_intervals_treeview.append_column(column)
renderer = Gtk.CellRendererAccel()
renderer.set_property('editable', True)
def acc_ff(renderer, path, accel_key, accel_mods, hw_key):
is_unique = True
for interval in intervals:
if (interval != intervals[int(path)]
and cfg.get_string('interval_input/%s' % interval) == unichr(accel_key)):
is_unique = False
break
if not is_unique:
gu.dialog_ok(_(u"The accelerator in use for “%s”. You have to choose another key.") % mpd.Interval.new_from_int(intervals.index(interval)).get_name(), parent=self, msgtype=Gtk.MessageType.ERROR)
return
it = self.g_interval_accels.get_iter(path)
cfg.set_string('interval_input/%s' % intervals[int(path)], unichr(accel_key))
self.g_interval_accels.set(it, 1, unichr(accel_key))
return True
renderer.connect('accel-edited', acc_ff)
column = Gtk.TreeViewColumn(_i("keyboard|Key"), renderer, text=1)
self.g_intervals_treeview.append_column(column)
page_vbox.pack_start(self.g_intervals_treeview, True, True, 0)
hbox = Gtk.HBox()
page_vbox.pack_start(hbox, False, False, 0)
layouts = {'ascii': (_('ASCII'), u'1qaz2wsx3edc4rfv'),
'dvorak': (_('Dvorak'), u"1'a;2,oq3.ej4puk"),
}
def set_buttons(widget, layout):
v = layouts[layout][1]
idx = 0
it = self.g_interval_accels.get_iter_first()
while True:
self.g_interval_accels.set_value(it, 1, v[idx])
cfg.set_string('interval_input/%s' % intervals[idx], v[idx])
it = self.g_interval_accels.iter_next(it)
idx += 1
if not it:
break
for key in layouts:
btn = Gtk.Button(layouts[key][0])
btn.connect('clicked', set_buttons, key)
hbox.pack_start(btn, True, True, 0)
评论列表
文章目录