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 gtk import gdk, glade
48 CONFIG_PRELOAD_ENGINES = "/general/preload_engines"
52 super(Setup, self).__init__()
54 self.__bus = ibus.Bus()
60 glade_file = path.join(path.dirname(__file__), "./setup.glade")
61 self.__xml = glade.XML(glade_file)
62 self.__dialog = self.__xml.get_widget("dialog_setup")
63 self.__tree = self.__xml.get_widget("treeview_engines")
64 self.__preload_engines = set(self.__bus.config_get_value(CONFIG_PRELOAD_ENGINES, []))
65 model = self.__create_model()
66 self.__tree.set_model(model)
68 # add icon search path
69 icon_theme = gtk.icon_theme_get_default()
70 dir = path.dirname(__file__)
71 icondir = path.join(dir, "..", "icons")
72 icon_theme.prepend_search_path(icondir)
74 # column for holiday names
75 column = gtk.TreeViewColumn()
76 column.set_title("Name")
78 renderer = gtk.CellRendererPixbuf()
79 renderer.set_property("xalign", 0.5)
81 column.pack_start(renderer)
82 column.set_attributes(renderer, icon_name = ICON_COLUMN, visible = VISIBLE_COLUMN)
84 renderer = gtk.CellRendererText()
85 renderer.set_property("xalign", 0.0)
87 # column.set_clickable(True)
88 column.pack_start(renderer)
89 column.set_attributes(renderer, text = NAME_COLUMN)
91 self.__tree.append_column(column)
93 # column for started names
94 renderer = gtk.CellRendererToggle()
95 renderer.set_data('column', ENABLE_COLUMN)
96 renderer.set_property("xalign", 0.5)
97 renderer.connect("toggled", self.__item_started_column_toggled_cb, model)
99 #col_offset = gtk.TreeViewColumn("Holiday", renderer, text=HOLIDAY_NAME_COLUMN)
100 column = gtk.TreeViewColumn("Started", renderer, active = ENABLE_COLUMN, visible = VISIBLE_COLUMN)
101 self.__tree.append_column(column)
103 # column for preload names
104 renderer = gtk.CellRendererToggle()
105 renderer.set_data('column', PRELOAD_COLUMN)
106 renderer.set_property("xalign", 0.5)
107 renderer.connect("toggled", self.__item_preload_column_toggled_cb, model)
109 column = gtk.TreeViewColumn("Preload", renderer, active = PRELOAD_COLUMN, visible = VISIBLE_COLUMN)
110 self.__tree.append_column(column)
113 renderer = gtk.CellRendererText()
114 column = gtk.TreeViewColumn("", renderer)
115 self.__tree.append_column(column)
119 def __item_started_column_toggled_cb(self, cell, path_str, model):
122 iter = model.get_iter_from_string(path_str)
123 data = model.get_value(iter, DATA_COLUMN)
125 # do something with the value
126 if data[DATA_STARTED] == False:
128 self.__bus.register_start_engine(data[DATA_NAME], data[DATA_LANG])
130 dlg = gtk.MessageDialog(type = gtk.MESSAGE_ERROR,
131 buttons = gtk.BUTTONS_CLOSE,
132 message_format = str(e))
137 self.__bus.register_stop_engine(data[DATA_NAME], data[DATA_LANG])
139 dlg = gtk.MessageDialog(type = gtk.MESSAGE_ERROR,
140 buttons = gtk.BUTTONS_CLOSE,
141 message_format = str(e))
144 data[DATA_STARTED] = not data[DATA_STARTED]
147 model.set(iter, ENABLE_COLUMN, data[DATA_STARTED])
149 def __item_preload_column_toggled_cb(self, cell, path_str, model):
152 iter = model.get_iter_from_string(path_str)
153 data = model.get_value(iter, DATA_COLUMN)
155 data[DATA_PRELOAD] = not data[DATA_PRELOAD]
156 engine = "%s:%s" % (data[DATA_LANG], data[DATA_NAME])
158 if data[DATA_PRELOAD]:
159 if engine not in self.__preload_engines:
160 self.__preload_engines.add(engine)
161 self.__bus.config_set_value(CONFIG_PRELOAD_ENGINES, list(self.__preload_engines))
163 if engine in self.__preload_engines:
164 self.__preload_engines.remove(engine)
165 self.__bus.config_set_value(CONFIG_PRELOAD_ENGINES, list(self.__preload_engines))
169 model.set(iter, PRELOAD_COLUMN, data[DATA_PRELOAD])
171 def __create_model(self):
173 model = gtk.TreeStore(
175 gobject.TYPE_BOOLEAN,
176 gobject.TYPE_BOOLEAN,
177 gobject.TYPE_BOOLEAN,
179 gobject.TYPE_PYOBJECT)
183 for name, lang, icon, author, credits, _exec, started in self.__bus.register_list_engines():
184 _lang = ibus.LANGUAGES.get(lang, "other")
185 if _lang not in langs:
186 langs[_lang] = list()
187 langs[_lang].append([name, lang, icon, author, credits, _exec, started])
192 iter = model.append(None)
195 ENABLE_COLUMN, False,
196 PRELOAD_COLUMN, False,
197 VISIBLE_COLUMN, False,
201 for name, lang, icon, author, credits, _exec, started in langs[key]:
202 child_iter = model.append(iter)
203 is_preload = "%s:%s" % (lang, name) in self.__preload_engines
204 model.set(child_iter,
206 ENABLE_COLUMN, started,
207 PRELOAD_COLUMN, is_preload,
208 VISIBLE_COLUMN, True,
211 [name, lang, icon, author, credits, _exec, started, is_preload])
217 return self.__dialog.run()
219 if __name__ == "__main__":