diff options
author | Peng Wu <alexepico@gmail.com> | 2014-11-28 16:43:38 +0800 |
---|---|---|
committer | Peng Wu <alexepico@gmail.com> | 2014-11-28 16:43:38 +0800 |
commit | 795027d140d75c11b1476de4d36b7226a98c6e74 (patch) | |
tree | 9031bb475e21f76023f30a0a86e050da509e0999 | |
parent | 489c90ec6ca084fc1223bb1f9181a215e3eb2495 (diff) | |
download | ibus-libpinyin-795027d140d75c11b1476de4d36b7226a98c6e74.tar.gz ibus-libpinyin-795027d140d75c11b1476de4d36b7226a98c6e74.tar.xz ibus-libpinyin-795027d140d75c11b1476de4d36b7226a98c6e74.zip |
integrate with the setup dialog
-rw-r--r-- | setup/main2.py | 21 | ||||
-rw-r--r-- | setup/shortcuteditor.py | 55 |
2 files changed, 56 insertions, 20 deletions
diff --git a/setup/main2.py b/setup/main2.py index 9fd341d..2e81a6f 100644 --- a/setup/main2.py +++ b/setup/main2.py @@ -33,6 +33,7 @@ from gi.repository import IBus import config from dicttreeview import DictionaryTreeView +from shortcuteditor import ShortcutEditor locale.setlocale(locale.LC_ALL, "") localedir = os.getenv("IBUS_LOCALEDIR") @@ -57,6 +58,7 @@ class PreferencesDialog: self.__init_fuzzy() self.__init_dictionary() self.__init_user_data() + self.__init_shortcut() self.__init_about() elif engine == "bopomofo": self.__config_namespace = "engine/Bopomofo" @@ -66,6 +68,7 @@ class PreferencesDialog: self.__init_fuzzy() self.__init_dictionary() #self.__init_user_data() + self.__init_shortcut() self.__init_about() self.__convert_fuzzy_pinyin_to_bopomofo() @@ -83,6 +86,7 @@ class PreferencesDialog: self.__page_fuzzy = self.__builder.get_object("pageFuzzy") self.__page_dictionary = self.__builder.get_object("pageDictionary") self.__page_user_data = self.__builder.get_object("pageUserData") + self.__page_shortcut = self.__builder.get_object("pageShortcut") self.__page_about = self.__builder.get_object("pageAbout") self.__page_general.hide() @@ -402,6 +406,23 @@ class PreferencesDialog: def __clear_user_data_cb(self, widget, name): self.__set_value("ClearUserData", name) + def __init_shortcut(self): + # page Shortcut + self.__page_shortcut.show() + + # shortcut tree view + self.__shortcut_editor = self.__builder.get_object("ShortcutsEditor") + self.__shortcut_editor.show() + + # set shortcuts + self.__shortcut_editor.update_shortcuts(self.__values) + + # connect "shortcut-changed" signal + self.__shortcut_editor.connect("shortcut-changed", self.__shortcut_changed_cb) + + def __shortcut_changed_cb(self, editor, key, value): + self.__set_value(key, value) + def __init_about(self): # page About self.__page_about.show() diff --git a/setup/shortcuteditor.py b/setup/shortcuteditor.py index 0fe41d7..b56fbe4 100644 --- a/setup/shortcuteditor.py +++ b/setup/shortcuteditor.py @@ -50,9 +50,7 @@ accelerators = \ ) class ShortcutTreeView(Gtk.TreeView): - __gtype_name__ = 'ShortcutTreeView' - - def __init__(self, config=None): + def __init__(self, editor): super(ShortcutTreeView, self).__init__() self.set_headers_visible(True) @@ -62,16 +60,18 @@ class ShortcutTreeView(Gtk.TreeView): self.__add_columns() + self.__editor = editor + def __create_model(self): model = Gtk.ListStore(str, str, str) - for accel in accelerators: + for label, keyname, defvalue in accelerators: iter = model.append() # (accel_key, accel_mods) = Gtk.accelerator_parse(accel_str) model.set(iter, - COLUMN_DESCRIPTION, accel[COLUMN_DESCRIPTION], - COLUMN_CONFIG_KEYNAME, accel[COLUMN_CONFIG_KEYNAME], - COLUMN_ACCELERATOR, accel[COLUMN_ACCELERATOR], + COLUMN_DESCRIPTION, label, + COLUMN_CONFIG_KEYNAME, keyname, + COLUMN_ACCELERATOR, defvalue, ) return model @@ -87,7 +87,7 @@ class ShortcutTreeView(Gtk.TreeView): column = Gtk.TreeViewColumn(_('Accelerator'), renderer, text=COLUMN_ACCELERATOR) self.append_column(column) - def __set_shortcut_value(self, key, value): + def set_shortcut_value(self, key, value): # check duplicate shortcut for row in self.__model: if row[COLUMN_CONFIG_KEYNAME] == key: @@ -98,13 +98,13 @@ class ShortcutTreeView(Gtk.TreeView): _("This shortcut key is already used.")) dialog.run() dialog.destroy() - return + return False # store the shortcut for row in self.__model: if row[COLUMN_CONFIG_KEYNAME] == key: row[COLUMN_ACCELERATOR] = value - return + return True def set_default_shortcut(self): selection = self.get_selection() @@ -114,33 +114,39 @@ class ShortcutTreeView(Gtk.TreeView): return key = model[iterator][COLUMN_CONFIG_KEYNAME] - for accel in accelerators: - (label, keyname, value) = accel + for label, keyname, defvalue in accelerators: if key == keyname: - self.__set_shortcut_value(key, value) + if self.set_shortcut_value(key, defvalue): + self.__editor.emit_shortcut_changed(key, defvalue) - def set_shortcut(self, shortcut=""): + def set_shortcut(self, value=""): selection = self.get_selection() (model, iterator) = selection.get_selected() if not iterator: return - self.__set_shortcut_value( - model[iterator][COLUMN_CONFIG_KEYNAME], - shortcut - ) + key = model[iterator][COLUMN_CONFIG_KEYNAME] + if self.set_shortcut_value(key, value): + self.__editor.emit_shortcut_changed(key, value) class ShortcutEditor(Gtk.Box): - def __init__(self, config=None): + __gtype_name__ = 'ShortcutEditor' + + __gsignals__ = { + 'shortcut-changed': (GObject.SIGNAL_RUN_FIRST, None, + (str, str, )) + } + + def __init__(self): super(ShortcutEditor, self).__init__( orientation=Gtk.Orientation.VERTICAL) self.__init_ui() def __init_ui(self): # shortcut tree view - self.__shortcut_treeview = ShortcutTreeView() + self.__shortcut_treeview = ShortcutTreeView(self) self.__shortcut_treeview.connect("cursor-changed", self.__shortcut_treeview_cursor_changed_cb) self.pack_start(self.__shortcut_treeview, False, True, 4) @@ -159,6 +165,7 @@ class ShortcutEditor(Gtk.Box): self.__edit_button.connect("clicked", self.__edit_button_clicked_cb) hbox.pack_start(self.__edit_button, False, True, 0) self.pack_start(hbox, False, True, 4) + self.show_all() def __shortcut_treeview_cursor_changed_cb(self, treeview): selection = treeview.get_selection() @@ -192,6 +199,14 @@ class ShortcutEditor(Gtk.Box): self.__shortcut_treeview.set_shortcut(dlg.get_shortcut()) + def emit_shortcut_changed(self, key, value): + self.emit("shortcut-changed", key, value) + + def update_shortcuts(self, values): + for label, keyname, defvalue in accelerators: + value = values[keyname] if keyname in values else defvalue + self.__shortcut_treeview.set_shortcut_value(keyname, value) + class ShortcutEditorDialog(Gtk.Dialog): def __init__(self, title = None, transient_for = None, flags = 0): super(ShortcutEditorDialog, self).__init__( |