summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeng Wu <alexepico@gmail.com>2014-11-28 16:43:38 +0800
committerPeng Wu <alexepico@gmail.com>2014-11-28 16:43:38 +0800
commit795027d140d75c11b1476de4d36b7226a98c6e74 (patch)
tree9031bb475e21f76023f30a0a86e050da509e0999
parent489c90ec6ca084fc1223bb1f9181a215e3eb2495 (diff)
downloadibus-libpinyin-795027d140d75c11b1476de4d36b7226a98c6e74.tar.gz
ibus-libpinyin-795027d140d75c11b1476de4d36b7226a98c6e74.tar.xz
ibus-libpinyin-795027d140d75c11b1476de4d36b7226a98c6e74.zip
integrate with the setup dialog
-rw-r--r--setup/main2.py21
-rw-r--r--setup/shortcuteditor.py55
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__(