1 # vim:set et sts=4 sw=4:
5 # Copyright (c) 2007-2008 Huang Peng <shawn.p.huang@gmail.com>
7 # This library is free software; you can redistribute it and/or
8 # modify it under the terms of the GNU Lesser General Public
9 # License as published by the Free Software Foundation; either
10 # version 2 of the License, or (at your option) any later version.
12 # This library is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU Lesser General Public License for more details.
17 # You should have received a copy of the GNU Lesser General Public
18 # License along with this program; if not, write to the
19 # Free Software Foundation, Inc., 59 Temple Place, Suite 330,
20 # Boston, MA 02111-1307 USA
26 from icon import load_icon
28 _ = lambda a : gettext.dgettext("ibus", a)
30 class EngineComboBox(gtk.ComboBox):
31 def __init__(self, engines):
32 super(EngineComboBox, self).__init__()
34 self.__model = gtk.TreeStore(gobject.TYPE_PYOBJECT)
36 iter1 = self.__model.append(None)
37 self.__model.set(iter1, 0, 0)
40 l = ibus.get_language_name(e.language)
47 if ibus.get_language_name("Other") in keys:
48 keys.remove( ibus.get_language_name("Other"))
49 keys += [ibus.get_language_name("Other")]
51 iter1 = self.__model.append(None)
52 self.__model.set(iter1, 0, l)
54 iter2 = self.__model.append(iter1)
55 self.__model.set(iter2, 0, e)
57 self.set_model(self.__model)
59 renderer = gtk.CellRendererPixbuf()
60 renderer.set_property("xalign", 0)
61 self.pack_start(renderer, False)
62 self.set_cell_data_func(renderer, self.__icon_cell_data_cb)
64 renderer = gtk.CellRendererText()
65 renderer.set_property("xalign", 0)
66 self.pack_start(renderer, True)
67 self.set_cell_data_func(renderer, self.__name_cell_data_cb)
71 def __icon_cell_data_cb(self, celllayout, renderer, model, iter):
72 engine = self.__model.get_value(iter, 0)
74 icon_size = gtk.icon_size_lookup(gtk.ICON_SIZE_LARGE_TOOLBAR)[0]
75 if isinstance(engine, str) or isinstance (engine, unicode):
76 renderer.set_property("visible", False)
77 renderer.set_property("sensitive", False)
78 elif isinstance(engine, int):
79 renderer.set_property("visible", False)
80 renderer.set_property("sensitive", False)
82 renderer.set_property("visible", True)
83 renderer.set_property("sensitive", True)
84 pixbuf = load_icon(engine.icon, gtk.ICON_SIZE_LARGE_TOOLBAR)
86 pixbuf = load_icon("engine-default", gtk.ICON_SIZE_LARGE_TOOLBAR)
88 pixbuf = load_icon("gtk-missing-image", gtk.ICON_SIZE_LARGE_TOOLBAR)
89 renderer.set_property("pixbuf", pixbuf)
91 def __name_cell_data_cb(self, celllayout, renderer, model, iter):
92 engine = self.__model.get_value(iter, 0)
94 if isinstance (engine, str) or isinstance (engine, unicode):
95 renderer.set_property("sensitive", False)
96 renderer.set_property("text", engine)
97 elif isinstance(engine, int):
98 renderer.set_property("sensitive", True)
99 renderer.set_property("text", _("Select an input method"))
101 renderer.set_property("sensitive", True)
102 renderer.set_property("text", engine.longname)
104 def get_active_engine(self):
105 i = self.get_active()
106 iter = self.get_active_iter()
107 if i == 0 or i == -1:
109 return self.get_model()[iter][0]