summaryrefslogtreecommitdiff
path: root/setup/python3/main.py
diff options
context:
space:
mode:
Diffstat (limited to 'setup/python3/main.py')
-rw-r--r--setup/python3/main.py602
1 files changed, 238 insertions, 364 deletions
diff --git a/setup/python3/main.py b/setup/python3/main.py
index 6346e43..e43c458 100644
--- a/setup/python3/main.py
+++ b/setup/python3/main.py
@@ -4,8 +4,8 @@
#
# Copyright (c) 2007-2008 Peng Huang <shawn.p.huang@gmail.com>
# Copyright (c) 2009 Hideaki ABE <abe.sendai@gmail.com>
-# Copyright (c) 2010-2016 Takao Fujiwara <takao.fujiwara1@gmail.com>
-# Copyright (c) 2007-2016 Red Hat, Inc.
+# Copyright (c) 2010-2017 Takao Fujiwara <takao.fujiwara1@gmail.com>
+# Copyright (c) 2007-2017 Red Hat, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -32,6 +32,7 @@ import gettext
from gettext import dgettext
from gi import require_version as gi_require_version
+gi_require_version('Gio', '2.0')
gi_require_version('GLib', '2.0')
gi_require_version('Gtk', '3.0')
gi_require_version('Gdk', '3.0')
@@ -39,6 +40,7 @@ gi_require_version('GdkX11', '3.0')
gi_require_version('Pango', '1.0')
gi_require_version('IBus', '1.0')
+from gi.repository import Gio
from gi.repository import GLib
# set_prgname before importing other modules to show the name in warning
@@ -76,6 +78,8 @@ class AnthySetup(object):
gettext.bindtextdomain(DOMAINNAME, config.LOCALEDIR)
gettext.bind_textdomain_codeset(DOMAINNAME, 'UTF-8')
+ self.__prefs = AnthyPrefs()
+
# IBus.Bus() calls ibus_bus_new().
# Gtk.Builder().add_from_file() also calls ibus_bus_new_async()
# via ibus_im_context_new().
@@ -143,13 +147,12 @@ class AnthySetup(object):
bus.connect('connected', self.__init_bus_connected)
def __init_bus_connected(self, bus):
- self.__config = bus.get_config()
builder = self.__builder
+ prefs = self.__prefs
self.__thumb_kb_layout_mode = None
self.__thumb_kb_layout = None
self.__japanese_ordered_dict = {}
- self.prefs = prefs = AnthyPrefs(None, self.__config)
# glade 'icon_name' property has a custom scaling and it seems
# to be difficult to show the complicated small icon in metacity.
@@ -164,17 +167,25 @@ class AnthySetup(object):
icon_path = 'ibus-anthy'
builder.get_object('main').set_icon_name(icon_path)
- for name in ['input_mode', 'typing_method', 'conversion_segment_mode',
- 'period_style', 'symbol_style', 'ten_key_mode',
- 'behavior_on_focus_out', 'behavior_on_period',
- 'half_width_symbol', 'half_width_number', 'half_width_space',
- 'latin_with_shift',
- 'thumb:keyboard_layout_mode', 'thumb:keyboard_layout',
- 'thumb:fmv_extension', 'thumb:handakuten']:
+ for name in ['input-mode', 'typing-method', 'conversion-segment-mode',
+ 'period-style', 'symbol-style', 'ten-key-mode',
+ 'behavior-on-focus-out', 'behavior-on-period',
+ 'half-width-symbol', 'half-width-number', 'half-width-space',
+ 'latin-with-shift',
+ 'thumb:keyboard-layout-mode', 'thumb:keyboard-layout',
+ 'thumb:fmv-extension', 'thumb:handakuten']:
section, key = self.__get_section_key(name)
- builder.get_object(name).set_active(prefs.get_value(section, key))
+ prefs.bind(section, key,
+ builder.get_object(name),
+ 'active',
+ Gio.SettingsBindFlags.DEFAULT)
+
+ prefs.bind('thumb', 'keyboard-layout-mode',
+ builder.get_object('thumb:keyboard-layout'),
+ 'sensitive',
+ Gio.SettingsBindFlags.INVERT_BOOLEAN)
- tv = builder.get_object('menu_visible:treeview')
+ tv = builder.get_object('menu-visible:treeview')
ls = Gtk.ListStore(str, bool, str)
tv.set_model(ls)
@@ -199,12 +210,14 @@ class AnthySetup(object):
self.__append_menus_in_model()
l = ['default', 'atok', 'wnn']
- s_type = prefs.get_value('common', 'shortcut_type')
+ s_type = prefs.get_value('common', 'shortcut-type')
s_type = s_type if s_type in l else 'default'
- builder.get_object('shortcut_type').set_active(l.index(s_type))
+ builder.get_object('shortcut-type').set_active(l.index(s_type))
- builder.get_object('page_size').set_value(prefs.get_value('common',
- 'page_size'))
+ prefs.bind('common', 'page-size',
+ builder.get_object('page-size').get_adjustment(),
+ 'value',
+ Gio.SettingsBindFlags.DEFAULT)
tv = builder.get_object('shortcut')
tv.append_column(Gtk.TreeViewColumn(_("Command"),
@@ -216,17 +229,17 @@ class AnthySetup(object):
tv.get_selection().connect_after('changed',
self.on_selection_changed, 0)
ls = Gtk.ListStore(str, str)
- sec = 'shortcut/' + s_type
- for k in self.prefs.keys(sec):
- ls.append([k, l_to_s(self.prefs.get_value(sec, k))])
+ shortcuts = self.__prefs.get_value('shortcut', s_type)
+ for k in shortcuts.keys():
+ ls.append([k, l_to_s(shortcuts[k])])
tv.set_model(ls)
self.__keymap = None
GLib.idle_add(self.__update_keymap_label,
priority = GLib.PRIORITY_LOW)
- self.__thumb_kb_layout_mode = builder.get_object('thumb:keyboard_layout_mode')
- self.__thumb_kb_layout = builder.get_object('thumb:keyboard_layout')
+ self.__thumb_kb_layout_mode = builder.get_object('thumb:keyboard-layout-mode')
+ self.__thumb_kb_layout = builder.get_object('thumb:keyboard-layout')
self.__set_thumb_kb_label()
for name in ['thumb:ls', 'thumb:rs']:
@@ -239,13 +252,13 @@ class AnthySetup(object):
self.on_selection_changed, 1)
tv.set_model(Gtk.ListStore(str))
- key = 'dict_admin_command'
+ key = 'dict-admin-command'
cli = self.__get_dict_cli_from_list(prefs.get_value('common', key))
- name = 'dict:entry_edit_dict_command'
+ name = 'dict:entry-edit-dict-command'
builder.get_object(name).set_text(cli)
- key = 'add_word_command'
+ key = 'add-word-command'
cli = self.__get_dict_cli_from_list(prefs.get_value('common', key))
- name = 'dict:entry_add_word_command'
+ name = 'dict:entry-add-word-command'
builder.get_object(name).set_text(cli)
tv = builder.get_object('dict:view')
@@ -301,7 +314,7 @@ class AnthySetup(object):
def __init_japanese_sort(self):
japanese_ordered_dict = {}
- japanese_ordered_list = self.prefs.get_japanese_ordered_list()
+ japanese_ordered_list = self.__prefs.get_japanese_ordered_list()
for index, c in enumerate(japanese_ordered_list):
japanese_ordered_dict[c] = index
self.__japanese_ordered_dict = japanese_ordered_dict;
@@ -309,7 +322,7 @@ class AnthySetup(object):
def __init_about_vbox(self, icon_path):
about_dialog = self.__builder.get_object('about_dialog')
about_vbox = self.__builder.get_object('about_vbox')
- about_dialog.set_version(self.prefs.get_version())
+ about_dialog.set_version(self.__prefs.get_version())
if icon_path != None:
if icon_path[0] == '/':
image = Gtk.Image.new_from_file(icon_path)
@@ -359,6 +372,20 @@ class AnthySetup(object):
dlg.run()
dlg.destroy()
+ def _get_shortcut_sec(self):
+ l = ['default', 'atok', 'wnn']
+ iter = self.__builder.get_object('shortcut-type').get_active_iter()
+ model = self.__builder.get_object('shortcut-type').get_model()
+ s_type = model[iter][0].lower()
+ return 'shortcut/' + (s_type if s_type in l else 'default')
+
+ def __get_shortcut_group(self):
+ l = ['default', 'atok', 'wnn']
+ iter = self.__builder.get_object('shortcut-type').get_active_iter()
+ model = self.__builder.get_object('shortcut-type').get_model()
+ s_type = model[iter][0].lower()
+ return s_type if s_type in l else 'default'
+
def __japanese_tuple_sort(self, a, b):
if a[1] == b[1]:
# http://docs.python.org/3.0/whatsnew/3.0.html#ordering-comparisons
@@ -381,26 +408,25 @@ class AnthySetup(object):
return (a[0] > b[0]) - (a[0] < b[0])
def __renderer_toggled_cb(self, renderer, path, model):
- prefs = self.prefs
+ prefs = self.__prefs
enabled = not model[path][1]
model[path][1] = enabled
key = model[path][0]
prefs.set_value('common', key, enabled)
- self.__builder.get_object('btn_apply').set_sensitive(True)
def __toggle_menu_visible_cell_cb(self, column, renderer, model, iter, id):
- l = self.__builder.get_object('menu_visible:treeview').get_model()
+ l = self.__builder.get_object('menu-visible:treeview').get_model()
active = l.get_value(iter, id)
renderer.set_property('active', active)
def __text_menu_visible_cell_cb(self, column, renderer, model, iter, id):
- l = self.__builder.get_object('menu_visible:treeview').get_model()
+ l = self.__builder.get_object('menu-visible:treeview').get_model()
text = l.get_value(iter, id)
renderer.set_property('text', text)
def __append_menus_in_model(self):
- prefs = self.prefs
- l = self.__builder.get_object('menu_visible:treeview').get_model()
+ prefs = self.__prefs
+ l = self.__builder.get_object('menu-visible:treeview').get_model()
l.append(['show-input-mode',
prefs.get_value('common', 'show-input-mode'),
_("Input mode")])
@@ -421,30 +447,20 @@ class AnthySetup(object):
_("Preferences - Anthy")])
def __get_romaji_treeview_custom_key_table(self, method):
- prefs = self.prefs
+ prefs = self.__prefs
rule = {}
ls = Gtk.ListStore(str, str, str)
tv = self.__builder.get_object('treeview_custom_key_table')
- section_base = 'romaji_typing_rule'
- section = section_base + '/' + prefs.str(method)
- for key in prefs.keys(section):
- key = prefs.str(key)
- value = prefs.get_value(section, key)
+ section = 'romaji-typing-rule'
+ keymap = prefs.get_value(section, 'list')[method]
+ for key in keymap.keys():
+ value = keymap[key]
ch = prefs.typing_from_config_key(key)
if ch == '':
continue
# config.set_value(key, None) is not supported.
if value != None and value != '':
- rule[ch] = prefs.str(value)
- for key in prefs.get_value(section_base, 'newkeys'):
- key = prefs.str(key)
- value = self.prefs.get_value_direct(section, key)
- ch = prefs.typing_from_config_key(key)
- if ch == '':
- continue
- # config.set_value(key, None) is not supported.
- if value != None and value != '':
- rule[ch] = prefs.str(value)
+ rule[ch] = value
for key, value in sorted(list(rule.items()), \
key = functools.cmp_to_key(self.__japanese_tuple_sort)):
ls.append(['romaji', key, value])
@@ -457,30 +473,20 @@ class AnthySetup(object):
return tv
def __get_kana_treeview_custom_key_table(self, method):
- prefs = self.prefs
+ prefs = self.__prefs
rule = {}
ls = Gtk.ListStore(str, str, str)
tv = self.__builder.get_object('treeview_custom_key_table')
- section_base = 'kana_typing_rule'
- section = section_base + '/' + prefs.str(method)
- for key in prefs.keys(section):
- key = prefs.str(key)
- value = prefs.get_value(section, key)
- ch = prefs.typing_from_config_key(key)
- if ch == '':
- continue
- # config.set_value(key, None) is not supported.
- if value != None and value != '':
- rule[ch] = prefs.str(value)
- for key in prefs.get_value(section_base, 'newkeys'):
- key = prefs.str(key)
- value = self.prefs.get_value_direct(section, key)
+ section = 'kana-typing-rule'
+ keymap = prefs.get_value(section, 'list')[method]
+ for key in keymap.keys():
+ value = keymap[key]
ch = prefs.typing_from_config_key(key)
if ch == '':
continue
# config.set_value(key, None) is not supported.
if value != None and value != '':
- rule[ch] = prefs.str(value)
+ rule[ch] = value
for key, value in sorted(list(rule.items()), \
key = functools.cmp_to_key(self.__japanese_tuple_sort)):
ls.append(['kana', key, value])
@@ -493,15 +499,14 @@ class AnthySetup(object):
return tv
def __get_thumb_treeview_custom_key_table(self, method):
- prefs = self.prefs
+ prefs = self.__prefs
rule = {}
ls = Gtk.ListStore(str, str, str, str, str)
tv = self.__builder.get_object('treeview_custom_key_table')
- section_base = 'thumb_typing_rule'
- section = section_base + '/' + prefs.str(method)
- for key in prefs.keys(section):
- key = prefs.str(key)
- value = prefs.get_value(section, key)
+ section = 'thumb-typing-rule'
+ keymap = prefs.get_value(section, 'list')[method]
+ for key in keymap.keys():
+ value = keymap[key]
ch = prefs.typing_from_config_key(key)
if ch == '':
continue
@@ -511,24 +516,9 @@ class AnthySetup(object):
(value[1] != None and value[1] != '') or \
(value[2] != None and value[2] != '')):
rule[ch] = {}
- rule[ch][0] = prefs.str(value[0])
- rule[ch][1] = prefs.str(value[1])
- rule[ch][2] = prefs.str(value[2])
- for key in prefs.get_value(section_base, 'newkeys'):
- key = prefs.str(key)
- value = self.prefs.get_value_direct(section, key)
- ch = prefs.typing_from_config_key(key)
- if ch == '':
- continue
- # config.set_value(key, None) is not supported.
- if value != None and len(value) == 3 and \
- ((value[0] != None and value[0] != '') or \
- (value[1] != None and value[1] != '') or \
- (value[2] != None and value[2] != '')):
- rule[ch] = {}
- rule[ch][0] = prefs.str(value[0])
- rule[ch][1] = prefs.str(value[1])
- rule[ch][2] = prefs.str(value[2])
+ rule[ch][0] = value[0]
+ rule[ch][1] = value[1]
+ rule[ch][2] = value[2]
for key, value in sorted(list(rule.items()), \
key = functools.cmp_to_key(self.__japanese_thumb_sort)):
ls.append(['thumb', key, value[0], value[2], value[1]])
@@ -614,7 +604,7 @@ class AnthySetup(object):
combobox.disconnect_by_func(self.on_cb_custom_key_table_changed)
def __run_dialog_custom_key_table(self, widget, mode):
- prefs = self.prefs
+ prefs = self.__prefs
dlg = self.__builder.get_object('dialog_custom_key_table')
dlg.set_transient_for(widget.get_toplevel())
label = self.__builder.get_object('label_custom_key_table')
@@ -638,15 +628,15 @@ class AnthySetup(object):
label.set_label(_("_Thumb Shift Key Table:"))
label_output.set_label(_("Single _Output Chars"))
list_labels = [['base', _("Base")],
- ['nicola_j_table', _("NICOLA-J key extension")],
- ['nicola_a_table', _("NICOLA-A key extension")],
- ['nicola_f_table', _("NICOLA-F key extension")],
- ['kb231_j_fmv_table', _("FMV KB231-J key extension")],
- ['kb231_a_fmv_table', _("FMV KB231-A key extension")],
- ['kb231_f_fmv_table', _("FMV KB231-F key extension")],
- ['kb611_j_fmv_table', _("FMV KB611-J key extension")],
- ['kb611_a_fmv_table', _("FMV KB611-A key extension")],
- ['kb611_f_fmv_table', _("FMV KB611-F key extension")],
+ ['nicola-j-table', _("NICOLA-J key extension")],
+ ['nicola-a-table', _("NICOLA-A key extension")],
+ ['nicola-f-table', _("NICOLA-F key extension")],
+ ['kb231-j-fmv-table', _("FMV KB231-J key extension")],
+ ['kb231-a-fmv-table', _("FMV KB231-A key extension")],
+ ['kb231-f-fmv-table', _("FMV KB231-F key extension")],
+ ['kb611-j-fmv-table', _("FMV KB611-J key extension")],
+ ['kb611-a-fmv-table', _("FMV KB611-A key extension")],
+ ['kb611-f-fmv-table', _("FMV KB611-F key extension")],
]
self.__show_dialog_custom_key_table_extention(mode)
ls = Gtk.ListStore(str, str)
@@ -660,17 +650,17 @@ class AnthySetup(object):
tv = None
if mode == 'romaji':
- method = prefs.get_value('romaji_typing_rule', 'method')
+ method = prefs.get_value('romaji-typing-rule', 'method')
if method == None:
method = 'default'
tv = self.__get_romaji_treeview_custom_key_table(method)
if mode == 'kana':
- method = prefs.get_value('kana_typing_rule', 'method')
+ method = prefs.get_value('kana-typing-rule', 'method')
if method == None:
method = 'jp'
tv = self.__get_kana_treeview_custom_key_table(method)
if mode == 'thumb':
- method = prefs.get_value('thumb_typing_rule', 'method')
+ method = prefs.get_value('thumb-typing-rule', 'method')
if method == None:
method = 'base'
tv = self.__get_thumb_treeview_custom_key_table(method)
@@ -698,7 +688,7 @@ class AnthySetup(object):
return
section, key = self.__get_section_key(
Gtk.Buildable.get_name(self.__thumb_kb_layout_mode))
- layout_mode = self.prefs.get_value(section, key)
+ layout_mode = self.__prefs.get_value(section, key)
if layout_mode:
self.__thumb_kb_layout.set_sensitive(False)
else:
@@ -735,60 +725,52 @@ class AnthySetup(object):
return id
def __get_dict_file_from_id(self, selected_id):
- files = self.prefs.get_value('dict', 'files')
- retval = None
-
- for file in files:
- id = self.__get_quoted_id(file)
- # The selected_id is already quoted.
- if selected_id == id:
- retval = file
- break
- return retval
+ files = self.__prefs.get_value('dict', 'files')
+ return files.get(selected_id, None)
def __is_system_dict_file_from_id(self, selected_id):
- prefs = self.prefs
- section = 'dict/file/' + selected_id
- key = 'is_system'
-
- if key not in prefs.keys(section):
- return False
- return prefs.get_value(section, key)
+ prefs = self.__prefs
+ dict_item = prefs.get_value('dict', 'list')[selected_id]
+ return dict_item.is_system
- def __append_dict_id_in_model(self, id, is_gettext):
- prefs = self.prefs
+ def __append_dict_id_in_model(self, id):
+ prefs = self.__prefs
section = 'dict/file/' + id
- # user value is dbus.String
- prefs.set_value(section, 'short_label',
- prefs.str(prefs.get_value(section, 'short_label')))
- prefs.set_value(section, 'long_label',
- prefs.str(prefs.get_value(section, 'long_label')))
- short_label = prefs.get_value(section, 'short_label')
- long_label = prefs.get_value(section, 'long_label')
- embed = prefs.get_value(section, 'embed')
- single = prefs.get_value(section, 'single')
- reverse = prefs.get_value(section, 'reverse')
- if is_gettext:
+ dicts = prefs.get_value('dict', 'list')
+ dict_item = dicts[id]
+ short_label = dict_item.short_label
+ long_label = dict_item.long_label
+ embed = dict_item.embed
+ single = dict_item.single
+ reverse = dict_item.reverse
+ if dict_item.is_system:
long_label = _(long_label)
l = self.__builder.get_object('dict:view').get_model()
l.append([id, short_label, long_label, embed, single, reverse])
def __append_dicts_in_model(self):
- prefs = self.prefs
- for file in prefs.get_value('dict', 'files'):
- if not path.exists(file):
+ prefs = self.__prefs
+ order = prefs.get_value('dict', 'order')
+ dict_files = prefs.get_value('dict', 'files')
+ if len(order) == 0:
+ order = list(dict_files.keys())
+ for id in order:
+ if id == 'embedded':
continue
- id = self.__get_quoted_id(file)
- section = 'dict/file/' + id
- if section not in prefs.sections():
- self.__fetch_dict_values(section)
- is_system_dict = self.__is_system_dict_file_from_id(id)
- self.__append_dict_id_in_model(id, is_system_dict)
+ files = dict_files[id]
+ for file in files:
+ if not path.exists(file):
+ continue
+ self.__append_dict_id_in_model(id)
def __append_user_dict_from_dialog(self, file, id, new):
- files = self.prefs.get_value('dict', 'files')
+ files_dict = self.__prefs.get_value('dict', 'files')
if new:
+ files = []
+ for v in files_dict.values():
+ for f in v:
+ files.append(f)
if file in files:
self.__run_message_dialog(_("Your choosed file has already been added: ") + file,
Gtk.MessageType.ERROR)
@@ -805,6 +787,8 @@ class AnthySetup(object):
self.__run_message_dialog(_("You cannot add dictionaries in the anthy private directory: " + file),
Gtk.MessageType.ERROR)
return
+ else:
+ file = files_dict[id][0]
if new:
id = self.__get_quoted_id(file)
@@ -822,15 +806,23 @@ class AnthySetup(object):
long_label = self.__builder.get_object('dict:long_entry').get_text()
if new:
- files.append(file)
- self.prefs.set_value('dict', 'files', files)
-
+ order = self.__prefs.get_value('dict', 'order')
+ if len(order) == 0:
+ order = list(self.__prefs.get_value('dict', 'files').keys())
+ order.append(id)
+ self.__prefs.set_value('dict', 'order', order)
+ self.__prefs.set_list_item('dict', 'files', id, [file])
+
+ filename = file
+ if filename.find('/') >=0:
+ filename = filename[filename.rindex('/') + 1:]
+ if filename.find('.') >=0:
+ filname = filename[:filename.rindex('.')]
if short_label == None or short_label == '':
- short_label = id[0]
+ short_label = filename[0]
if long_label == None or long_label == '':
- long_label = id
+ long_label = filename
self.__update_dict_values(new, id, short_label, long_label, embed, single, reverse)
- self.__builder.get_object('btn_apply').set_sensitive(True)
files = []
def __init_dict_chooser_dialog(self):
@@ -856,15 +848,13 @@ class AnthySetup(object):
if selected_id == None:
return None
- is_system_dict = self.__is_system_dict_file_from_id(selected_id)
-
- prefs = self.prefs
- section = 'dict/file/' + selected_id
- short_label = prefs.get_value(section, 'short_label')
- long_label = prefs.get_value(section, 'long_label')
- embed = prefs.get_value(section, 'embed')
- single = prefs.get_value(section, 'single')
- reverse = prefs.get_value(section, 'reverse')
+ dict_item = self.__prefs.get_value('dict', 'list')[selected_id]
+ short_label = dict_item.short_label
+ long_label = dict_item.long_label
+ embed = dict_item.embed
+ single = dict_item.single
+ reverse = dict_item.reverse
+ is_system_dict = dict_item.is_system
if len(short_label) > 1:
short_label = short_label[0]
@@ -885,56 +875,32 @@ class AnthySetup(object):
return selected_id
- def __fetch_dict_values(self, section):
- prefs = self.prefs
- prefs.set_new_section(section)
- prefs.set_new_key(section, 'short_label')
- prefs.fetch_item(section, 'short_label')
- # user value is dbus.String
- prefs.set_value(section, 'short_label',
- prefs.str(prefs.get_value(section, 'short_label')))
- prefs.set_new_key(section, 'long_label')
- prefs.fetch_item(section, 'long_label')
- prefs.set_value(section, 'long_label',
- prefs.str(prefs.get_value(section, 'long_label')))
- prefs.set_new_key(section, 'embed')
- prefs.fetch_item(section, 'embed')
- prefs.set_new_key(section, 'single')
- prefs.fetch_item(section, 'single')
- prefs.set_new_key(section, 'reverse')
- prefs.fetch_item(section, 'reverse')
-
def __update_dict_values(self, new, id, short_label, long_label, embed, single, reverse):
- prefs = self.prefs
- section = 'dict/file/' + id
- if section not in prefs.sections():
- prefs.set_new_section(section)
-
- is_system_dict = self.__is_system_dict_file_from_id(id)
- if is_system_dict:
- if 'short_label' in prefs.keys(section):
- short_label = prefs.get_value(section, 'short_label')
- if 'long_label' in prefs.keys(section):
- long_label = prefs.get_value(section, 'long_label')
+ prefs = self.__prefs
if new:
+ dict_item = prefs.get_value('dict', 'template')
+ dict_item.id = id
+ dict_item.short_label = short_label
+ dict_item.long_label = long_label
+ dict_item.embed = embed
+ dict_item.single = single
+ dict_item.reverse = reverse
l = self.__builder.get_object('dict:view').get_model()
l.append([id, short_label, long_label, embed, single, reverse])
else:
+ dict_item = prefs.get_value('dict', 'list')[id]
+ if not dict_item.is_system:
+ dict_item.short_label = short_label
+ dict_item.long_label = long_label
+ dict_item.embed = embed
+ dict_item.single = single
+ dict_item.reverse = reverse
l, i = self.__builder.get_object('dict:view').get_selection().get_selected()
if i :
l[i] = [id, short_label, long_label, embed, single, reverse]
- key = 'short_label'
- prefs.set_value(section, key, short_label)
- key = 'long_label'
- prefs.set_value(section, key, long_label)
- key = 'embed'
- prefs.set_value(section, key, embed)
- key = 'single'
- prefs.set_value(section, key, single)
- key = 'reverse'
- prefs.set_value(section, key, reverse)
+ prefs.set_list_item('dict', 'list', id, dict_item)
def __text_cell_data_cb(self, column, renderer, model, iter, id):
l = self.__builder.get_object('dict:view').get_model()
@@ -1098,13 +1064,13 @@ class AnthySetup(object):
def __update_keymap_label(self):
self.__resync_engine_file()
- prefs = self.prefs
+ prefs = self.__prefs
keymap = self.__get_keymap()
if keymap == None:
return
if keymap == '':
keymap = 'default'
- keymap_list = prefs.get_value('common', 'keyboard_layouts')
+ keymap_list = prefs.get_value('common', 'keyboard-layouts')
if keymap != None and not keymap in keymap_list:
keymap_list.append(keymap)
index = -1
@@ -1124,11 +1090,6 @@ class AnthySetup(object):
self.on_cb_keymap_changed,
0)
- def __save_preferences(self):
- self.prefs.commit_all()
- if self.__keymap != None:
- self.__save_keymap()
-
def __search_and_mark(self, buffer, text, start, end, onetime, forward):
if forward:
match = start.forward_search(text, 0, end)
@@ -1211,51 +1172,12 @@ class AnthySetup(object):
button = self.__builder.get_object('button_remove_custom_key')
button.set_sensitive(True)
- def on_main_delete(self, widget, event):
- self.on_btn_cancel_clicked(widget)
+ def on_main_quit(self, widget, event):
+ Gtk.main_quit()
return True
- def on_btn_ok_clicked(self, widget):
- if self.__builder.get_object('btn_apply').get_state() == \
- Gtk.StateType.INSENSITIVE:
- Gtk.main_quit()
- return True
- dlg = self.__builder.get_object('quit_check')
- dlg.set_transient_for(widget.get_toplevel())
- dlg.set_markup('<big><b>%s</b></big>' % _("Confirmation"))
- dlg.format_secondary_text(
- _("You are about to close the setup dialog, is that OK?"))
- id = dlg.run()
- dlg.hide()
- if id == Gtk.ResponseType.YES:
- self.__save_preferences()
- Gtk.main_quit()
- return True
-
- def on_btn_cancel_clicked(self, widget):
- if self.__builder.get_object('btn_apply').get_state() == \
- Gtk.StateType.INSENSITIVE:
- Gtk.main_quit()
- return True
- dlg = self.__builder.get_object('quit_check_without_save')
- dlg.set_transient_for(widget.get_toplevel())
- dlg.set_markup('<big><b>%s</b></big>' % _("Notice!"))
- dlg.format_secondary_text(
- _("You are about to close the setup dialog without saving your changes, is that OK?"))
- id = dlg.run()
- dlg.hide()
- if id == Gtk.ResponseType.YES:
- Gtk.main_quit()
- return True
-
- def on_btn_apply_clicked(self, widget):
- self.__save_preferences()
- widget.set_sensitive(False)
-
- def on_cb_changed(self, widget):
- section, key = self.__get_section_key(Gtk.Buildable.get_name(widget))
- self.prefs.set_value(section, key, widget.get_active())
- self.__builder.get_object('btn_apply').set_sensitive(True)
+ def on_btn_close_clicked(self, widget):
+ Gtk.main_quit()
def on_cb_keymap_changed(self, widget, id):
it = widget.get_active()
@@ -1266,10 +1188,11 @@ class AnthySetup(object):
if self.__keymap == keymap:
return
self.__keymap = keymap
- self.__builder.get_object('btn_apply').set_sensitive(True)
+ self.__save_keymap()
+ self.__keymap = None
def on_cb_custom_key_table_changed(self, widget, user_data):
- prefs = self.prefs
+ prefs = self.__prefs
tv = self.__builder.get_object('treeview_custom_key_table')
mode = user_data
id = widget.get_active()
@@ -1283,27 +1206,12 @@ class AnthySetup(object):
if mode == 'romaji':
tv = self.__get_romaji_treeview_custom_key_table(method)
elif mode == 'kana':
- prefs.set_value('kana_typing_rule', 'method', method)
- self.__builder.get_object('btn_apply').set_sensitive(True)
+ prefs.set_value('kana-typing-rule', 'method', method)
tv = self.__get_kana_treeview_custom_key_table(method)
elif mode == 'thumb':
# thumb uses all tables so do not save the method.
tv = self.__get_thumb_treeview_custom_key_table(method)
- def on_sb_changed(self, widget):
- section, key = self.__get_section_key(Gtk.Buildable.get_name(widget))
- self.prefs.set_value(section, key, widget.get_value_as_int())
- self.__builder.get_object('btn_apply').set_sensitive(True)
-
- def on_ck_toggled(self, widget):
- section, key = self.__get_section_key(Gtk.Buildable.get_name(widget))
- self.prefs.set_value(section, key, widget.get_active())
- self.__builder.get_object('btn_apply').set_sensitive(True)
- if self.__thumb_kb_layout_mode and \
- Gtk.Buildable.get_name(widget) == \
- Gtk.Buildable.get_name(self.__thumb_kb_layout_mode):
- self.__set_thumb_kb_label()
-
def on_btn_edit_clicked(self, widget):
ls, it = self.__builder.get_object('shortcut').get_selection().get_selected()
m = self.__builder.get_object('es:treeview').get_model()
@@ -1320,19 +1228,20 @@ class AnthySetup(object):
if id == Gtk.ResponseType.OK:
new = l_to_s([m[i][0] for i in range(len(m))])
if new != ls.get(it, 1)[0]:
- sec = self._get_shortcut_sec()
- self.prefs.set_value(sec, ls.get(it, 0)[0], s_to_l(new))
+ group = self.__get_shortcut_group()
+ self.__prefs.set_list_item('shortcut', group,
+ ls.get(it, 0)[0], s_to_l(new))
ls.set(it, 1, new)
- self.__builder.get_object('btn_apply').set_sensitive(True)
def on_btn_default_clicked(self, widget):
ls, it = self.__builder.get_object('shortcut').get_selection().get_selected()
- sec = self._get_shortcut_sec()
- new = l_to_s(self.prefs.default[sec][ls.get(it, 0)[0]])
+ group = self.__get_shortcut_group()
+ shortcuts = self.__prefs.get_default_value('shortcut', group)
+ new = l_to_s(shortcuts[ls.get(it, 0)[0]])
if new != ls.get(it, 1)[0]:
- self.prefs.set_value(sec, ls.get(it, 0)[0], s_to_l(new))
+ self.__prefs.set_list_item('shortcut', group,
+ ls.get(it, 0)[0], s_to_l(new))
ls.set(it, 1, new)
- self.__builder.get_object('btn_apply').set_sensitive(True)
def on_btn_romaji_custom_table_clicked(self, widget):
self.__run_dialog_custom_key_table(widget, 'romaji')
@@ -1344,7 +1253,7 @@ class AnthySetup(object):
self.__run_dialog_custom_key_table(widget, 'thumb')
def on_btn_add_custom_key(self, widget, user_data):
- prefs = self.prefs
+ prefs = self.__prefs
input = self.__builder.get_object('entry_input_custom_key')
output = self.__builder.get_object('entry_output_custom_key')
left = self.__builder.get_object('entry_left_thumb_shift_custom_key')
@@ -1375,43 +1284,33 @@ class AnthySetup(object):
return
if type == 'romaji':
- section_base = 'romaji_typing_rule'
+ section = 'romaji-typing-rule'
model.append([type, key, value])
elif type == 'kana':
- section_base = 'kana_typing_rule'
+ section = 'kana-typing-rule'
model.append([type, key, value])
elif type == 'thumb':
- section_base = 'thumb_typing_rule'
+ section = 'thumb-typing-rule'
model.append([type, key, value, left_text, right_text])
- if section_base == None:
+ if section == None:
self.__run_message_dialog(_("Your custom key is not assigned in any sections. Maybe a bug."))
return
gkey = prefs.typing_to_config_key(key)
if gkey == '':
return
key = gkey
- section = section_base + '/' + method
- if key not in prefs.keys(section):
- # ibus does not support gconf_client_all_entries().
- # prefs.fetch_section() doesn't get the keys if they exist
- # in gconf only.
- # Use newkeys for that way.
- newkeys = prefs.get_value(section_base, 'newkeys')
- if key not in newkeys:
- newkeys.append(key)
- prefs.set_value(section_base, 'newkeys', newkeys)
if type != 'thumb':
- prefs.set_value(section, key, value)
+ prefs.set_list_item(section, 'list', (method, key), value)
else:
- prefs.set_value(section, key, [value, right_text, left_text])
+ prefs.set_list_item(section, 'list',
+ (method, key), [value, right_text, left_text])
left.set_text('')
right.set_text('')
input.set_text('')
output.set_text('')
- self.__builder.get_object('btn_apply').set_sensitive(True)
def on_btn_remove_custom_key(self, widget, user_data):
- prefs = self.prefs
+ prefs = self.__prefs
combobox = self.__builder.get_object('combobox_custom_key_table')
id = combobox.get_active()
model_combobox = combobox.get_model()
@@ -1422,31 +1321,21 @@ class AnthySetup(object):
key = l[i][1]
section_base = None
if type == 'romaji':
- section_base = 'romaji_typing_rule'
+ section = 'romaji-typing-rule'
elif type == 'kana':
- section_base = 'kana_typing_rule'
+ section = 'kana-typing-rule'
elif type == 'thumb':
- section_base = 'thumb_typing_rule'
- if section_base == None:
+ section = 'thumb-typing-rule'
+ if section == None:
self.__run_message_dialog(_("Your custom key is not assigned in any sections. Maybe a bug."))
return
- section = section_base + '/' + method
- newkeys = prefs.get_value(section_base, 'newkeys')
gkey = prefs.typing_to_config_key(key)
if gkey == '':
return
key = gkey
- if key in newkeys:
- newkeys.remove(key)
- prefs.set_value(section_base, 'newkeys', newkeys)
- # config.set_value(key, None) is not supported.
- if type != 'thumb':
- prefs.set_value(section, key, '')
- else:
- prefs.set_value(section, key, ['', '', ''])
+ prefs.delete_list_item(section, 'list', (method, key))
l.remove(i)
widget.set_sensitive(False)
- self.__builder.get_object('btn_apply').set_sensitive(True)
def on_btn_thumb_key_clicked(self, widget):
if Gtk.Buildable.get_name(widget) == 'thumb:button_ls':
@@ -1481,18 +1370,17 @@ class AnthySetup(object):
new = l[i][0]
if new != text:
section, key = self.__get_section_key(entry)
- self.prefs.set_value(section, key, new)
+ self.__prefs.set_value(section, key, new)
self.__builder.get_object(entry).set_text(new)
- self.__builder.get_object('btn_apply').set_sensitive(True)
def on_btn_dict_command_clicked(self, widget):
if Gtk.Buildable.get_name(widget) == 'dict:btn_edit_dict_command':
- key = 'dict_admin_command'
+ key = 'dict-admin-command'
elif Gtk.Buildable.get_name(widget) == 'dict:btn_add_word_command':
- key = 'add_word_command'
+ key = 'add-word-command'
else:
return
- command = self.prefs.get_value('common', key)
+ command = self.__prefs.get_value('common', key)
if not path.exists(command[0]):
self.__run_message_dialog(_("Your file does not exist: ") + command[0],
Gtk.MessageType.ERROR)
@@ -1553,17 +1441,19 @@ class AnthySetup(object):
if selected_id == None:
return
- if self.__is_system_dict_file_from_id(selected_id):
+ dict_item = self.__prefs.get_value('dict', 'list')[selected_id]
+ if dict_item.is_system:
self.__run_message_dialog(_("You cannot delete the system dictionary."),
Gtk.MessageType.ERROR)
return
file = self.__get_dict_file_from_id(selected_id)
if file != None:
- files = self.prefs.get_value('dict', 'files')
- files.remove(file)
- self.prefs.set_value('dict', 'files', files)
- self.__builder.get_object('btn_apply').set_sensitive(True)
+ order = self.__prefs.get_value('dict', 'order')
+ order.remove(selected_id)
+ order = self.__prefs.set_value('dict', 'order', order)
+ self.__prefs.delete_list_item('dict', 'files', selected_id)
+ self.__prefs.delete_list_item('dict', 'list', selected_id)
l.remove(i)
return
@@ -1575,32 +1465,25 @@ class AnthySetup(object):
if selected_id == None:
return
+ print('test', selected_id)
dict_file = self.__get_dict_file_from_id(selected_id)
if dict_file == None:
self.__run_message_dialog(_("Your file is not good."),
Gtk.MessageType.ERROR)
return
- if not path.exists(dict_file):
+ if not path.exists(dict_file[0]):
self.__run_message_dialog(_("Your file does not exist: ") + dict_file,
Gtk.MessageType.ERROR)
return
- if dict_file == None:
- return
-
# The selected id is already quoted.
- section = 'dict/file/' + selected_id
- if 'preview_lines' not in self.prefs.keys(section):
- section = 'dict/file/default'
- nline = self.prefs.get_value(section, 'preview_lines')
-
- section = 'dict/file/' + selected_id
- if 'encoding' not in self.prefs.keys(section):
- section = 'dict/file/default'
- encoding = self.prefs.get_value(section, 'encoding')
+ dicts = self.__prefs.get_value('dict', 'list')
+ dict_item = dicts[selected_id]
+ nline = dict_item.preview_lines
+ encoding = dict_item.encoding
lines = '';
- for i, line in enumerate(list(codecs.open(dict_file, 'r', 'utf-8'))):
+ for i, line in enumerate(list(codecs.open(dict_file[0], 'r', 'utf-8'))):
if nline >= 0 and i >= nline:
break;
lines = lines + line
@@ -1645,7 +1528,6 @@ class AnthySetup(object):
dlg.destroy()
def on_btn_dict_order_clicked(self, widget):
- dict_file = None
l, it = self.__builder.get_object('dict:view').get_selection().get_selected()
if not it:
@@ -1666,45 +1548,35 @@ class AnthySetup(object):
if next_it:
l.swap(it, next_it)
- dict_file = self.__get_dict_file_from_id(selected_id)
- files = self.prefs.get_value('dict', 'files')
+ order = self.__prefs.get_value('dict', 'order')
+ if len(order) == 0:
+ order = list(self.__prefs.get_value('dict', 'files').keys())
+ i = order.index(selected_id)
- if dict_file == None:
- return
-
- i = files.index(dict_file)
if Gtk.Buildable.get_name(widget) == 'dict:btn_up':
if i <= 0:
return
next_i = i - 1
elif Gtk.Buildable.get_name(widget) == 'dict:btn_down':
- if i + 1 >= len(dict_file):
+ if i + 1 >= len(order):
return
next_i = i + 1
- f = files[i]
- files[i] = files[next_i]
- files[next_i] = f
- self.prefs.set_value('dict', 'files', files)
- self.__builder.get_object('btn_apply').set_sensitive(True)
-
- def _get_shortcut_sec(self):
- l = ['default', 'atok', 'wnn']
- iter = self.__builder.get_object('shortcut_type').get_active_iter()
- model = self.__builder.get_object('shortcut_type').get_model()
- s_type = model[iter][0].lower()
- return 'shortcut/' + (s_type if s_type in l else 'default')
+ f = order[i]
+ order[i] = order[next_i]
+ order[next_i] = f
+ self.__prefs.set_value('dict', 'order', order)
def on_shortcut_type_changed(self, widget):
ls = self.__builder.get_object('shortcut').get_model()
ls.clear()
- sec = self._get_shortcut_sec()
- for k in self.prefs.keys(sec):
- ls.append([k, l_to_s(self.prefs.get_value(sec, k))])
+ group = self.__get_shortcut_group()
+ shortcuts = self.__prefs.get_value('shortcut', group)
+ for k in shortcuts.keys():
+ ls.append([k, l_to_s(shortcuts[k])])
section, key = self.__get_section_key(Gtk.Buildable.get_name(widget))
- self.prefs.set_value(section, key, sec[len('shortcut/'):])
- self.__builder.get_object('btn_apply').set_sensitive(True)
+ self.__prefs.set_value(section, key, group)
def on_shortcut_key_release_event(self, widget, event):
if event.hardware_keycode in [36, 65]:
@@ -1749,7 +1621,9 @@ class AnthySetup(object):
if not widget.get_text():
return
list = widget.get_text().split()
- if list[0][0] == '/':
+ if len(list) == 0:
+ return
+ elif list[0][0] == '/':
if len(list) == 1:
list.append(list[0][list[0].rfind('/') + 1:])
else:
@@ -1760,14 +1634,14 @@ class AnthySetup(object):
else:
list.insert(0, '/usr/bin/' + list[0])
list[1] = list[1][list[1].rfind('/') + 1:]
- if Gtk.Buildable.get_name(widget) == 'dict:entry_edit_dict_command':
- key = 'dict_admin_command'
- elif Gtk.Buildable.get_name(widget) == 'dict:entry_add_word_command':
- key = 'add_word_command'
+ if Gtk.Buildable.get_name(widget) == 'dict:entry-edit-dict-command':
+ key = 'dict-admin-command'
+ elif Gtk.Buildable.get_name(widget) == 'dict:entry-add-word-command':
+ key = 'add-word-command'
else:
return
- self.prefs.set_value('common', key, list)
- self.__builder.get_object('btn_apply').set_sensitive(True)
+ print('test', key, list)
+ self.__prefs.set_value('common', key, list)
def on_es_entry_changed(self, widget):
if not widget.get_text():