summaryrefslogtreecommitdiffstats
path: root/setup
diff options
context:
space:
mode:
Diffstat (limited to 'setup')
-rw-r--r--setup/.gitignore1
-rw-r--r--setup/Makefile.am3
-rw-r--r--setup/enginecombobox.py92
-rw-r--r--setup/enginetreeview.py157
-rw-r--r--setup/icon.py60
-rw-r--r--setup/keyboardshortcut.py4
-rw-r--r--setup/main.py233
-rw-r--r--setup/setup.glade114
8 files changed, 484 insertions, 180 deletions
diff --git a/setup/.gitignore b/setup/.gitignore
index bcebcbe..1a6aff2 100644
--- a/setup/.gitignore
+++ b/setup/.gitignore
@@ -1 +1,2 @@
ibus-setup
+ibus-setup.desktop
diff --git a/setup/Makefile.am b/setup/Makefile.am
index ad2e9d4..0e144e9 100644
--- a/setup/Makefile.am
+++ b/setup/Makefile.am
@@ -21,6 +21,9 @@
ibussetup_PYTHON = \
main.py \
+ icon.py \
+ enginecombobox.py \
+ enginetreeview.py \
keyboardshortcut.py \
$(NULL)
diff --git a/setup/enginecombobox.py b/setup/enginecombobox.py
new file mode 100644
index 0000000..c8eaa15
--- /dev/null
+++ b/setup/enginecombobox.py
@@ -0,0 +1,92 @@
+# vim:set et sts=4 sw=4:
+#
+# ibus - The Input Bus
+#
+# Copyright (c) 2007-2008 Huang Peng <shawn.p.huang@gmail.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this program; if not, write to the
+# Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+# Boston, MA 02111-1307 USA
+
+import gtk
+import gobject
+import ibus
+
+from icon import load_icon
+
+class EngineComboBox(gtk.ComboBox):
+ def __init__(self, engines):
+ super(EngineComboBox, self).__init__()
+
+ self.__model = gtk.TreeStore(gobject.TYPE_PYOBJECT)
+
+ lang = {}
+ for e in engines:
+ l = ibus.get_language_name(e.language)
+ if l not in lang:
+ lang[l] = []
+ lang[l].append(e)
+
+ for l in lang.keys():
+ iter1 = self.__model.append(None)
+ self.__model.set(iter1, 0, l)
+ for e in lang[l]:
+ iter2 = self.__model.append(iter1)
+ self.__model.set(iter2, 0, e)
+
+ self.set_model(self.__model)
+
+ renderer = gtk.CellRendererPixbuf()
+ renderer.set_property("xalign", 0)
+ self.pack_start(renderer, False)
+ self.set_cell_data_func(renderer, self.__icon_cell_data_cb)
+
+ renderer = gtk.CellRendererText()
+ renderer.set_property("xalign", 0)
+ self.pack_start(renderer, True)
+ self.set_cell_data_func(renderer, self.__name_cell_data_cb)
+
+ def __icon_cell_data_cb(self, celllayout, renderer, model, iter):
+ engine = self.__model.get_value(iter, 0)
+
+ icon_size = gtk.icon_size_lookup(gtk.ICON_SIZE_LARGE_TOOLBAR)[0]
+ if isinstance (engine, str) or isinstance (engine, unicode):
+ renderer.set_property("visible", False)
+ renderer.set_property("sensitive", False)
+ else:
+ renderer.set_property("visible", True)
+ renderer.set_property("sensitive", True)
+ pixbuf = load_icon(engine.icon, gtk.ICON_SIZE_LARGE_TOOLBAR)
+ if pixbuf == None:
+ pixbuf = load_icon("default-engine", gtk.ICON_SIZE_LARGE_TOOLBAR)
+ if pixbuf == None:
+ pixbuf = load_icon("gtk-missing-image", gtk.ICON_SIZE_LARGE_TOOLBAR)
+ renderer.set_property("pixbuf", pixbuf)
+
+ def __name_cell_data_cb(self, celllayout, renderer, model, iter):
+ engine = self.__model.get_value(iter, 0)
+
+ if isinstance (engine, str) or isinstance (engine, unicode):
+ renderer.set_property("sensitive", False)
+ renderer.set_property("text", engine)
+ else:
+ renderer.set_property("sensitive", True)
+ renderer.set_property("text", engine.longname)
+
+ def get_active_engine(self):
+ iter = self.get_active_iter()
+ if iter == None:
+ return None
+ return self.get_model()[iter][0]
+
diff --git a/setup/enginetreeview.py b/setup/enginetreeview.py
new file mode 100644
index 0000000..4e4c131
--- /dev/null
+++ b/setup/enginetreeview.py
@@ -0,0 +1,157 @@
+# vim:set et sts=4 sw=4:
+#
+# ibus - The Input Bus
+#
+# Copyright (c) 2007-2008 Huang Peng <shawn.p.huang@gmail.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this program; if not, write to the
+# Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+# Boston, MA 02111-1307 USA
+
+import gtk
+import gobject
+import ibus
+
+from icon import load_icon
+
+class EngineTreeView(gtk.TreeView):
+ __gsignals__ = {
+ 'changed' : (
+ gobject.SIGNAL_RUN_LAST,
+ gobject.TYPE_NONE,
+ ())
+ }
+
+ def __init__(self, engines):
+ super(EngineTreeView, self).__init__()
+
+ self.__engines = set([])
+
+ self.__model = gtk.TreeStore(gobject.TYPE_PYOBJECT)
+ self.set_model(self.__model)
+
+ self.set_headers_visible(False)
+
+ column = gtk.TreeViewColumn()
+
+ renderer = gtk.CellRendererPixbuf()
+ renderer.set_property("xalign", 0)
+ column.pack_start(renderer, False)
+ column.set_cell_data_func(renderer, self.__icon_cell_data_cb)
+
+ renderer = gtk.CellRendererText()
+ renderer.set_property("xalign", 0)
+ column.pack_start(renderer, True)
+ column.set_cell_data_func(renderer, self.__name_cell_data_cb)
+ self.append_column (column)
+
+ self.set_engines(engines)
+
+ def __icon_cell_data_cb(self, celllayout, renderer, model, iter):
+ engine = self.__model.get_value(iter, 0)
+
+ icon_size = gtk.icon_size_lookup(gtk.ICON_SIZE_LARGE_TOOLBAR)[0]
+ pixbuf = load_icon(engine.icon, gtk.ICON_SIZE_LARGE_TOOLBAR)
+
+ if pixbuf == None:
+ pixbuf = load_icon("default-engine", gtk.ICON_SIZE_LARGE_TOOLBAR)
+ if pixbuf == None:
+ pixbuf = load_icon("gtk-missing-image", gtk.ICON_SIZE_LARGE_TOOLBAR)
+
+ renderer.set_property("pixbuf", pixbuf)
+
+ def __name_cell_data_cb(self, celllayout, renderer, model, iter):
+ engine = self.__model.get_value(iter, 0)
+ renderer.set_property("sensitive", True)
+ renderer.set_property("text", engine.longname)
+
+ def set_engines(self, engines):
+ self.__model.clear()
+ self.__engines = set([])
+ for e in engines:
+ if e in self.__engines:
+ continue
+ iter = self.__model.append(None)
+ self.__model.set(iter, 0, e)
+ self.__engines.add(e)
+ self.emit("changed")
+
+ def get_selected_iter(self):
+ selection = self.get_selection()
+ if selection:
+ return selection.get_selected()[1]
+
+ def get_engines(self):
+ return map(lambda r: r[0], self.__model)
+
+ def get_select_engine(self):
+ iter = self.get_selected_iter()
+ if iter == None:
+ return None
+ row = self.__model.get(iter)
+ return row[0]
+
+ def prepend_engine(self, engine):
+ if engine == None or engine in self.__engines:
+ return
+ iter = self.__model.prepend(None)
+ self.__model.set(iter, 0, engine)
+ self.__engines.add(engine)
+ self.emit("changed")
+ self.scroll_to_cell(self.__model[0].path, None)
+
+ def remove_engine(self):
+ iter = self.get_selected_iter()
+ if iter == None:
+ return
+ row = self.__model[iter]
+ engine = row[0]
+ self.__engines.remove(engine)
+ index = row.path[0]
+ self.__model.remove(iter)
+ self.emit("changed")
+ try:
+ row = self.__model[index]
+ selection = self.get_selection()
+ selection.select_path(row.path)
+ except:
+ pass
+
+ def move_up_engine(self):
+ iter = self.get_selected_iter()
+ if iter == None:
+ return
+ row = self.__model[iter]
+ index = row.path[0]
+ if index == 0:
+ return
+ self.__model.swap(iter, self.__model[index - 1].iter)
+ self.emit("changed")
+ self.scroll_to_cell(row.path, None)
+
+ def move_down_engine(self):
+ iter = self.get_selected_iter()
+ if iter == None:
+ return
+ row = self.__model[iter]
+ index = row.path[0]
+ last_row = self.__model[-1]
+ last_index = last_row.path[0]
+ if index == last_index:
+ return
+ self.__model.swap(iter, self.__model[index + 1].iter)
+ self.emit("changed")
+ self.scroll_to_cell(row.path, None)
+
+gobject.type_register(EngineTreeView)
diff --git a/setup/icon.py b/setup/icon.py
new file mode 100644
index 0000000..fedd2cf
--- /dev/null
+++ b/setup/icon.py
@@ -0,0 +1,60 @@
+# vim:set et sts=4 sw=4:
+#
+# ibus - The Input Bus
+#
+# Copyright (c) 2007-2008 Huang Peng <shawn.p.huang@gmail.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this program; if not, write to the
+# Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+# Boston, MA 02111-1307 USA
+
+__all__ = (
+ "load_icon"
+)
+
+import gtk
+from gtk import gdk
+from os import path
+
+
+icon_theme = gtk.icon_theme_get_default()
+dir = path.dirname(__file__)
+icondir = path.join(dir, "..", "icons")
+icon_theme.prepend_search_path(icondir)
+
+icon_cache = {}
+
+def load_icon(icon, size):
+ if (icon, size) in icon_cache:
+ return icon_cache[(icon, size)]
+
+ icon_size = gtk.icon_size_lookup(size)[0]
+ pixbuf = None
+ try:
+ pixbuf = gdk.pixbuf_new_from_file(icon)
+ w, h = pixbuf.get_width(), pixbuf.get_height()
+ rate = max(w, h) / float(icon_size)
+ w = int(w / rate)
+ h = int(h / rate)
+ pixbuf = pixbuf.scale_simple(w, h, gdk.INTERP_BILINEAR)
+ except:
+ pass
+ if pixbuf == None:
+ try:
+ theme = gtk.icon_theme_get_default()
+ pixbuf = theme.load_icon(icon, icon_size, 0)
+ except:
+ pass
+ icon_cache[(icon, size)] = pixbuf
+ return pixbuf
diff --git a/setup/keyboardshortcut.py b/setup/keyboardshortcut.py
index c667903..c30dbcc 100644
--- a/setup/keyboardshortcut.py
+++ b/setup/keyboardshortcut.py
@@ -80,7 +80,7 @@ class KeyboardShortcutSelection(gtk.VBox):
table = gtk.Table(4, 2)
self.__modifier_buttons = []
- self.__modifier_buttons.append(("Ctrl", gtk.CheckButton("_Ctrl"), gdk.CONTROL_MASK))
+ self.__modifier_buttons.append(("Control", gtk.CheckButton("_Control"), gdk.CONTROL_MASK))
self.__modifier_buttons.append(("Alt", gtk.CheckButton("A_lt"), gdk.MOD1_MASK))
self.__modifier_buttons.append(("Shift", gtk.CheckButton("_Shift"), gdk.SHIFT_MASK))
self.__modifier_buttons.append(("Meta", gtk.CheckButton("_Meta"), gdk.META_MASK))
@@ -258,7 +258,7 @@ if __name__ == "__main__":
dlg = KeyboardShortcutSelectionDialog(
title = "Select test",
buttons = (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OK, gtk.RESPONSE_OK))
- dlg.add_shortcut("Ctrl+Shift+space")
+ dlg.add_shortcut("Control+Shift+space")
dlg.set_shortcuts(None)
print dlg.run()
print dlg.get_shortcuts()
diff --git a/setup/main.py b/setup/main.py
index 7fe9f2e..e3349d0 100644
--- a/setup/main.py
+++ b/setup/main.py
@@ -33,6 +33,9 @@ from os import path
from xdg import BaseDirectory
from gtk import gdk
from gtk import glade
+from enginecombobox import EngineComboBox
+from enginetreeview import EngineTreeView
+from icon import load_icon
_ = lambda a : gettext.dgettext("ibus", a)
N_ = lambda a : a
@@ -75,12 +78,6 @@ class Setup(object):
def __init_ui(self):
# add icon search path
- icon_theme = gtk.icon_theme_get_default()
- dir = path.dirname(__file__)
- icondir = path.join(dir, "..", "icons")
- icon_theme.prepend_search_path(icondir)
-
-
self.__dialog = self.__xml.get_widget("dialog_setup")
# auto start ibus
@@ -90,76 +87,111 @@ class Setup(object):
# keyboard shortcut
# trigger
- shortcuts = self.__bus.config_get_value(
- "general", "keyboard_shortcut_trigger",
+ self.__config = self.__bus.get_config()
+ shortcuts = self.__config.get_value(
+ "general/hotkey", "trigger",
ibus.CONFIG_GENERAL_SHORTCUT_TRIGGER_DEFAULT)
+
button = self.__xml.get_widget("button_trigger")
entry = self.__xml.get_widget("entry_trigger")
entry.set_text("; ".join(shortcuts))
button.connect("clicked", self.__shortcut_button_clicked_cb,
- N_("trigger"), "general", "keyboard_shortcut_trigger", entry)
+ N_("trigger"), "general/hotkey", "trigger", entry)
# next engine
- shortcuts = self.__bus.config_get_value(
- "general", "keyboard_shortcut_next_engine",
+ shortcuts = self.__config.get_value(
+ "general/hotkey", "next_engine",
ibus.CONFIG_GENERAL_SHORTCUT_NEXT_ENGINE_DEFAULT)
button = self.__xml.get_widget("button_next_engine")
entry = self.__xml.get_widget("entry_next_engine")
entry.set_text("; ".join(shortcuts))
button.connect("clicked", self.__shortcut_button_clicked_cb,
- N_("next engine"), "general", "keyboard_shortcut_next_engine", entry)
+ N_("next engine"), "general/hotkey", "next_engine", entry)
# prev engine
- shortcuts = self.__bus.config_get_value(
- "general", "keyboard_shortcut_prev_engine",
+ shortcuts = self.__config.get_value(
+ "general/hotkey", "prev_engine",
ibus.CONFIG_GENERAL_SHORTCUT_PREV_ENGINE_DEFAULT)
button = self.__xml.get_widget("button_prev_engine")
entry = self.__xml.get_widget("entry_prev_engine")
entry.set_text("; ".join(shortcuts))
button.connect("clicked", self.__shortcut_button_clicked_cb,
- N_("prev engine"), "general", "keyboard_shortcut_prev_engine", entry)
-
-
+ N_("prev engine"), "general/hotkey", "prev_engine", entry)
# lookup table orientation
self.__combobox_lookup_table_orientation = self.__xml.get_widget("combobox_lookup_table_orientation")
self.__combobox_lookup_table_orientation.set_active(
- self.__bus.config_get_value("panel", "lookup_table_orientation", 0))
+ self.__config.get_value("panel", "lookup_table_orientation", 0))
self.__combobox_lookup_table_orientation.connect("changed",
self.__combobox_lookup_table_orientation_changed_cb)
# auto hide
self.__checkbutton_auto_hide = self.__xml.get_widget("checkbutton_auto_hide")
self.__checkbutton_auto_hide.set_active(
- self.__bus.config_get_value("panel", "auto_hide", False))
+ self.__config.get_value("panel", "auto_hide", False))
self.__checkbutton_auto_hide.connect("toggled", self.__checkbutton_auto_hide_toggled_cb)
# custom font
self.__checkbutton_custom_font = self.__xml.get_widget("checkbutton_custom_font")
self.__checkbutton_custom_font.set_active(
- self.__bus.config_get_value("panel", "use_custom_font", False))
+ self.__config.get_value("panel", "use_custom_font", False))
self.__checkbutton_custom_font.connect("toggled", self.__checkbutton_custom_font_toggled_cb)
self.__fontbutton_custom_font = self.__xml.get_widget("fontbutton_custom_font")
- if self.__bus.config_get_value("panel", "use_custom_font", False):
+ if self.__config.get_value("panel", "use_custom_font", False):
self.__fontbutton_custom_font.set_sensitive(True)
else:
self.__fontbutton_custom_font.set_sensitive(False)
font_name = gtk.settings_get_default().get_property("gtk-font-name")
font_name = unicode(font_name, "utf-8")
- font_name = self.__bus.config_get_value("panel", "custom_font", font_name)
+ font_name = self.__config.get_value("panel", "custom_font", font_name)
self.__fontbutton_custom_font.connect("notify::font-name", self.__fontbutton_custom_font_notify_cb)
self.__fontbutton_custom_font.set_font_name(font_name)
- self.__init_engine_view()
+ # init engine page
+ self.__engines = self.__bus.list_engines()
+ self.__combobox = EngineComboBox(self.__engines)
+ self.__combobox.show()
+ self.__xml.get_widget("alignment_engine_combobox").add(self.__combobox)
+
+ tmp_dict = {}
+ for e in self.__engines:
+ tmp_dict[e.name] = e
+ engine_names = self.__config.get_value("general", "preload_engines", [])
+ engines = []
+ for n in engine_names:
+ if n in tmp_dict:
+ engines.append(tmp_dict[n])
+ self.__treeview = EngineTreeView(engines)
+ self.__treeview.show()
+ self.__xml.get_widget("scrolledwindow_engine_treeview").add(self.__treeview)
+
+ self.__treeview.connect("changed", self.__treeview_changed_cb)
+
+ button = self.__xml.get_widget("button_engine_add")
+ button.connect("clicked",
+ lambda *args:self.__treeview.prepend_engine(self.__combobox.get_active_engine()))
+ button = self.__xml.get_widget("button_engine_remove")
+ button.connect("clicked", lambda *args:self.__treeview.remove_engine())
+ button = self.__xml.get_widget("button_engine_up")
+ button.connect("clicked", lambda *args:self.__treeview.move_up_engine())
+
+ button = self.__xml.get_widget("button_engine_down")
+ button.connect("clicked", lambda *args:self.__treeview.move_down_engine())
+
+ def __treeview_changed_cb(self, treeview):
+ engines = self.__treeview.get_engines()
+ engine_names = map(lambda e: e.name, engines)
+ self.__config.set_list("general", "preload_engines", engine_names, "s")
def __init_bus(self):
try:
self.__bus = ibus.Bus()
# self.__bus.connect("config-value-changed", self.__config_value_changed_cb)
- self.__bus.connect("config-reloaded", self.__config_reloaded_cb)
- self.__bus.config_add_watch("/general")
- self.__bus.config_add_watch("/panel")
+ # self.__bus.connect("config-reloaded", self.__config_reloaded_cb)
+ # self.__bus.config_add_watch("/general")
+ # self.__bus.config_add_watch("/general/hotkey")
+ # self.__bus.config_add_watch("/panel")
except:
while self.__bus == None:
message = _("IBus daemon is not started. Do you want to start it now?")
@@ -190,60 +222,6 @@ class Setup(object):
dlg.destroy()
self.__flush_gtk_events()
- def __init_engine_view(self):
- # engines tree
- self.__tree = self.__xml.get_widget("treeview_engines")
- self.__preload_engines = set(self.__bus.config_get_value("general", "preload_engines", []))
- model = self.__create_model()
- self.__tree.set_model(model)
-
- # column for engine
- column = gtk.TreeViewColumn()
- column.set_title(_("Engine"))
- column.set_resizable(True)
- column.set_min_width(120)
-
- renderer = gtk.CellRendererPixbuf()
- renderer.set_property("xalign", 0.5)
-
- column.pack_start(renderer, False)
- column.set_attributes(renderer, pixbuf = COLUMN_ICON, visible = COLUMN_VISIBLE)
-
- renderer = gtk.CellRendererText()
- renderer.set_property("xalign", 0.0)
- renderer.set_property("ellipsize", pango.ELLIPSIZE_END)
-
- # column.set_clickable(True)
- column.pack_start(renderer)
- column.set_attributes(renderer, text = COLUMN_NAME)
-
- self.__tree.append_column(column)
-
- # column for started
- renderer = gtk.CellRendererToggle()
- renderer.set_data('column', COLUMN_ENABLE)
- renderer.set_property("xalign", 0.5)
- renderer.connect("toggled", self.__item_started_column_toggled_cb, model)
-
- #col_offset = gtk.TreeViewColumn("Holiday", renderer, text=HOLIDAY_NAME)
- column = gtk.TreeViewColumn(_("Started"), renderer, active = COLUMN_ENABLE, visible = COLUMN_VISIBLE)
- column.set_resizable(True)
- self.__tree.append_column(column)
-
- # column for preload
- renderer = gtk.CellRendererToggle()
- renderer.set_data('column', COLUMN_PRELOAD)
- renderer.set_property("xalign", 0.5)
- renderer.connect("toggled", self.__item_preload_column_toggled_cb, model)
-
- column = gtk.TreeViewColumn(_("Preload"), renderer, active = COLUMN_PRELOAD, visible = COLUMN_VISIBLE)
- column.set_resizable(True)
- self.__tree.append_column(column)
-
- renderer = gtk.CellRendererText()
- column = gtk.TreeViewColumn("", renderer)
- self.__tree.append_column(column)
-
def __shortcut_button_clicked_cb(self, button, name, section, _name, entry):
buttons = (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OK, gtk.RESPONSE_OK)
title = _("Select keyboard shortcut for %s") % _(name)
@@ -259,7 +237,7 @@ class Setup(object):
dialog.destroy()
if id != gtk.RESPONSE_OK:
return
- self.__bus.config_set_value(section, _name, shortcuts)
+ self.__config.set_value(section, _name, shortcuts)
entry.set_text("; ".join(shortcuts))
@@ -309,94 +287,15 @@ class Setup(object):
if data[DATA_PRELOAD]:
if engine not in self.__preload_engines:
self.__preload_engines.add(engine)
- self.__bus.config_set_list("general", "preload_engines", list(self.__preload_engines), "s")
+ self.__config.set_list("general", "preload_engines", list(self.__preload_engines), "s")
else:
if engine in self.__preload_engines:
self.__preload_engines.remove(engine)
- self.__bus.config_set_list("general", "preload_engines", list(self.__preload_engines), "s")
+ self.__config.set_list("general", "preload_engines", list(self.__preload_engines), "s")
# set new value
model.set(iter, COLUMN_PRELOAD, data[DATA_PRELOAD])
- def __load_icon(self, icon, icon_size):
- pixbuf = None
- try:
- pixbuf = gdk.pixbuf_new_from_file(icon)
- w, h = pixbuf.get_width(), pixbuf.get_height()
- rate = max(w, h) / float(icon_size)
- w = int(w / rate)
- h = int(h / rate)
- pixbuf = pixbuf.scale_simple(w, h, gdk.INTERP_BILINEAR)
- except:
- pass
- if pixbuf == None:
- try:
- theme = gtk.icon_theme_get_default()
- pixbuf = theme.load_icon(icon, icon_size, 0)
- except:
- pass
- return pixbuf
-
- def __create_model(self):
- # create tree store
- model = gtk.TreeStore(
- gobject.TYPE_STRING,
- gobject.TYPE_BOOLEAN,
- gobject.TYPE_BOOLEAN,
- gobject.TYPE_BOOLEAN,
- gdk.Pixbuf,
- gobject.TYPE_PYOBJECT)
-
- langs = dict()
-
- self.__bus.register_reload_engines()
- for name, local_name, lang, icon, author, credits, _exec, started in self.__bus.register_list_engines():
- _lang = ibus.get_language_name(lang)
- if _lang not in langs:
- langs[_lang] = list()
- langs[_lang].append([name, local_name, lang, icon, author, credits, _exec, started])
-
- keys = langs.keys()
- keys.sort()
- if _("Other") in keys:
- keys.remove(_("Other"))
- keys.append(_("Other"))
-
- icon_size = gtk.icon_size_lookup(gtk.ICON_SIZE_LARGE_TOOLBAR)[0]
- pixbuf_missing = self.__load_icon("engine-default", icon_size)
- if pixbuf_missing == None:
- pixbuf_missing = self.__load_icon("gtk-missing-image", icon_size)
-
- for key in keys:
- iter = model.append(None)
- model.set(iter,
- COLUMN_NAME, key,
- COLUMN_ENABLE, False,
- COLUMN_PRELOAD, False,
- COLUMN_VISIBLE, False,
- COLUMN_ICON, None,
- COLUMN_DATA, None)
- langs[key].sort()
-
- for name, local_name, lang, icon, author, credits, _exec, started in langs[key]:
- child_iter = model.append(iter)
- is_preload = "%s:%s" % (lang, name) in self.__preload_engines
-
- pixbuf = self.__load_icon(icon, icon_size)
- if pixbuf == None:
- pixbuf = pixbuf_missing
-
- model.set(child_iter,
- COLUMN_NAME, local_name,
- COLUMN_ENABLE, started,
- COLUMN_PRELOAD, is_preload,
- COLUMN_VISIBLE, True,
- COLUMN_ICON, pixbuf,
- COLUMN_DATA,
- [name, local_name, lang, icon, author, credits, _exec, started, is_preload])
-
- return model
-
def __is_auto_start(self):
link_file = path.join(BaseDirectory.xdg_config_home, "autostart/ibus.desktop")
ibus_desktop = path.join(os.getenv("IBUS_PREFIX"), "share/applications/ibus.desktop")
@@ -425,27 +324,27 @@ class Setup(object):
os.symlink(ibus_desktop, link_file)
def __combobox_lookup_table_orientation_changed_cb(self, combobox):
- self.__bus.config_set_value(
+ self.__config.set_value(
"panel", "lookup_table_orientation",
self.__combobox_lookup_table_orientation.get_active())
def __checkbutton_auto_hide_toggled_cb(self, button):
- self.__bus.config_set_value(
+ self.__config.set_value(
"panel", "auto_hide",
self.__checkbutton_auto_hide.get_active())
def __checkbutton_custom_font_toggled_cb(self, button):
if self.__checkbutton_custom_font.get_active():
self.__fontbutton_custom_font.set_sensitive(True)
- self.__bus.config_set_value("panel", "use_custom_font", True)
+ self.__config.set_value("panel", "use_custom_font", True)
else:
self.__fontbutton_custom_font.set_sensitive(False)
- self.__bus.config_set_value("panel", "use_custom_font", False)
+ self.__config.set_value("panel", "use_custom_font", False)
def __fontbutton_custom_font_notify_cb(self, button, arg):
font_name = self.__fontbutton_custom_font.get_font_name()
font_name = unicode(font_name, "utf-8")
- self.__bus.config_set_value("panel", "custom_font", font_name)
+ self.__config.set_value("panel", "custom_font", font_name)
def __config_value_changed_cb(self, bus, section, name, value):
pass
diff --git a/setup/setup.glade b/setup/setup.glade
index 72854d9..c8e63ed 100644
--- a/setup/setup.glade
+++ b/setup/setup.glade
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
-<!--Generated with glade3 3.4.5 on Thu Oct 9 11:25:43 2008 -->
+<!--Generated with glade3 3.4.5 on Wed Feb 4 15:58:20 2009 -->
<glade-interface>
<widget class="GtkDialog" id="dialog_setup">
<property name="border_width">5</property>
@@ -340,20 +340,112 @@ Vertical</property>
<property name="left_padding">2</property>
<property name="right_padding">2</property>
<child>
- <widget class="GtkScrolledWindow" id="scrolledwindow1">
- <property name="width_request">300</property>
- <property name="height_request">350</property>
+ <widget class="GtkHBox" id="hbox1">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="shadow_type">GTK_SHADOW_IN</property>
<child>
- <widget class="GtkTreeView" id="treeview_engines">
+ <widget class="GtkAlignment" id="alignment6">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="reorderable">True</property>
+ <property name="top_padding">4</property>
+ <child>
+ <widget class="GtkVBox" id="vbox1">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkAlignment" id="alignment_engine_combobox">
+ <property name="visible">True</property>
+ <child>
+ <placeholder/>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkScrolledWindow" id="scrolledwindow_engine_treeview">
+ <property name="width_request">240</property>
+ <property name="height_request">350</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="shadow_type">GTK_SHADOW_IN</property>
+ <child>
+ <placeholder/>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkAlignment" id="alignment2">
+ <property name="visible">True</property>
+ <property name="top_padding">8</property>
+ <property name="bottom_padding">8</property>
+ <property name="left_padding">8</property>
+ <property name="right_padding">8</property>
+ <child>
+ <widget class="GtkVButtonBox" id="vbuttonbox1">
+ <property name="visible">True</property>
+ <property name="spacing">5</property>
+ <property name="layout_style">GTK_BUTTONBOX_START</property>
+ <child>
+ <widget class="GtkButton" id="button_engine_add">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="label" translatable="yes">gtk-add</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">0</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkButton" id="button_engine_remove">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="label" translatable="yes">gtk-remove</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">0</property>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="button_engine_up">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="label" translatable="yes">gtk-go-up</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">0</property>
+ </widget>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="button_engine_down">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="label" translatable="yes">gtk-go-down</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">0</property>
+ </widget>
+ <packing>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
</widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
</child>
</widget>
</child>