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 image import Image
27 from handle import Handle
29 ICON_SIZE = gtk.ICON_SIZE_MENU
31 class LanguageBar (gtk.Toolbar):
33 "property-activate" : (
34 gobject.SIGNAL_RUN_FIRST,
36 (gobject.TYPE_STRING, )),
38 gobject.SIGNAL_RUN_FIRST,
40 (gobject.TYPE_PYOBJECT, )),
44 gtk.Toolbar.__init__ (self)
45 self.set_property ("icon-size", ICON_SIZE)
46 icon_theme = gtk.icon_theme_get_default ()
47 icon_theme.prepend_search_path ("/home/phuang/sources/ibus/icons")
51 self._toplevel = gtk.Window (gtk.WINDOW_POPUP)
52 self._toplevel.add (self)
54 root = gdk.get_default_root_window ()
55 workarea = root.property_get ("_NET_WORKAREA")[2]
56 self._toplevel.move (workarea[2] - 200, workarea[3] - 40)
58 def _add_items (self):
59 img = gtk.image_new_from_icon_name ("engine-default", ICON_SIZE)
60 btn = gtk.ToolButton (img, "engine")
61 btn.connect ("clicked", lambda x: self._add_items ())
64 img = gtk.image_new_from_icon_name ("ibus-keyboard", ICON_SIZE)
65 btn = gtk.ToolButton (img, "keyboard")
68 img = gtk.image_new_from_icon_name ("ibus-zh", ICON_SIZE)
69 btn = gtk.ToolButton (img, "keyboard")
72 self.insert (gtk.SeparatorToolItem (), -1)
76 def _create_ui (self):
78 self._handle = gtk.ToolItem ()
79 self._handle.add (Handle ())
80 self.insert (self._handle, -1)
82 # create input methods menu
83 image = gtk.image_new_from_icon_name ("engine-default", gtk.ICON_SIZE_MENU)
84 self._im_menu = gtk.ToolButton (icon_widget = image)
85 self._im_menu.connect ("clicked", lambda w: self.emit ("im-menu-popup", self._im_menu))
86 self.insert (self._im_menu, -1)
88 def _remove_properties (self):
89 # reset all properties
90 for name, props in self._properties.items ():
91 for prop, widget in props:
98 gtk.Toolbar.do_show (self)
101 def do_check_resize (self):
104 w, h = item.size_request ()
106 self.set_size_request (width + 4, -1)
108 def do_size_request (self, requisition):
109 gtk.Toolbar.do_size_request (self, requisition)
110 self._toplevel.resize (1, 1)
113 self._remove_properties ()
115 def register_properties (self, props):
116 self._remove_properties ()
117 # create new properties
119 if prop._type == ibus.PROP_TYPE_NORMAL:
120 widget = gtk.ToolButton ()
121 widget.set_icon_name (prop._icon)
122 widget.set_label (prop._label)
123 widget.connect ("clicked",
124 lambda widget, prop: self.emit ("property-activate", prop._name),
127 widget = gtk.ToolItem ()
129 widget.set_sensitive (prop._sensitive)
131 widget.set_no_show_all (False)
134 widget.set_no_show_all (True)
136 if not self._properties.has_key (prop._name):
137 self._properties [prop._name] = []
138 self._properties [prop._name].append ((prop, widget))
139 self.insert (widget, -1)
142 def update_properties (self, props):
146 self._toplevel.show_all ()
147 gtk.Toolbar.show_all (self)
150 self._toplevel.hide_all ()
151 gtk.Toolbar.hide_all (self)
153 gobject.type_register (LanguageBar, "IBusLanguageBar")