WIP.
[ibus.git] / panel / toolitem.py
bloba6d542d54615c018612269ce2d5daa8fece5684a
1 # vim:set noet ts=4:
3 # ibus - The Input Bus
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
22 import gtk
23 import gtk.gdk as gdk
24 import gobject
25 import ibus
26 from menu import *
28 class ToolItem:
29 def __init__ (self, prop):
30 self._prop = prop
31 self._sub_itmes = []
33 def update_property (self, prop):
34 if self._prop == None:
35 return False
37 retval = False
39 if self._prop._name == prop._name and self._prop._type == prop._type:
40 self._prop = prop
41 self.property_changed ()
42 retval = True
44 if any (map (lambda i: i.update_property (prop), self._sub_itmes)):
45 retval = True
47 return retval
49 def set_prop_label (self, label):
50 self._prop._label = label
51 self.property_changed ()
53 def set_icon (self, icon):
54 self._prop._icon = icon
55 self.property_changed ()
57 def set_tooltip (self, tooltip):
58 self._prop._tooltip = tooltip
59 self.property_changed ()
61 def set_state (self, state):
62 self._prop._state = state
63 self.property_changed ()
65 def property_changed (self):
66 pass
69 class ToolButton (gtk.ToolButton, ToolItem):
70 __gsignals__ = {
71 "property-activate" : (
72 gobject.SIGNAL_RUN_FIRST,
73 gobject.TYPE_NONE,
74 (gobject.TYPE_STRING, gobject.TYPE_INT)),
77 def __init__ (self, prop):
78 gtk.ToolButton.__init__ (self, label = prop._label)
79 ToolItem.__init__ (self, prop)
81 self.set_icon_name (prop._icon)
82 self.set_tooltip_text (prop._tooltip)
83 self.set_sensitive (prop._sensitive)
85 if prop._visible:
86 self.set_no_show_all (False)
87 self.show_all ()
88 else:
89 self.set_no_show_all (True)
90 self.hide_all ()
93 def set_icon_name (self, icon_name):
94 if icon_name:
95 gtk.ToolButton.set_icon_name (self, icon_name)
96 self.set_is_important (False)
97 else:
98 gtk.ToolButton.set_icon_name (self, None)
99 self.set_is_important (True)
101 self._prop._icon = icon_name
103 def set_tooltip_text (self, text):
104 if text:
105 gtk.ToolButton.set_tooltip_text (self, text)
106 else:
107 gtk.ToolButton.set_tooltip_text (self, None)
109 self._prop._tooltip = text
111 def property_changed (self):
112 self.set_icon_name (self._prop._icon)
113 self.set_tooltip_text (self._prop._tooltip)
114 self.set_label (self._prop._label)
116 def do_clicked (self):
117 self.emit ("property-activate", self._prop._name, self._prop._state)
120 class ToggleToolButton (gtk.ToggleToolButton, ToolItem):
121 __gsignals__ = {
122 "property-activate" : (
123 gobject.SIGNAL_RUN_FIRST,
124 gobject.TYPE_NONE,
125 (gobject.TYPE_STRING, gobject.TYPE_INT)),
128 def __init__ (self, prop):
129 gtk.ToggleToolButton.__init__ (self)
130 ToolItem.__init__ (self, prop)
132 self.set_label (prop._label)
133 self.set_icon_name (prop._icon)
134 self.set_tooltip_text (prop._tooltip)
135 self.set_state (prop._state)
136 self.set_sensitive (prop._sensitive)
137 if prop._visible:
138 self.set_no_show_all (False)
139 self.show_all ()
140 else:
141 self.set_no_show_all (True)
142 self.hide_all ()
144 def set_icon_name (self, icon_name):
145 if icon_name:
146 gtk.ToggleToolButton.set_icon_name (self, icon_name)
147 self.set_is_important (False)
148 else:
149 gtk.ToggleToolButton.set_icon_name (self, None)
150 self.set_is_important (True)
152 self._prop._icon = icon_name
154 def set_tooltip_text (self, text):
155 if text:
156 gtk.ToggleToolButton.set_tooltip_text (self, text)
157 else:
158 gtk.ToggleToolButton.set_tooltip_text (self, None)
160 self._prop._tooltip = text
162 def property_changed (self):
163 self.set_icon_name (self._prop._icon)
164 self.set_tooltip_text (self._prop._tooltip)
165 self.set_label (self._prop._label)
166 self.set_active (self._prop._state == ibus.PROP_STATE_CHECKED)
168 def do_toggled (self):
169 if self.get_active ():
170 self._prop._state = ibus.PROP_STATE_CHECKED
171 else:
172 self._prop._state = ibus.PROP_STATE_UNCHECKED
173 self.emit ("property-activate", self._prop._name, self._prop._state)
175 class SeparatorToolItem (gtk.SeparatorToolItem, ToolItem):
176 def __init__ (self, prop):
177 gtk.SeparatorToolItem.__init__ (self)
178 ToolItem.__init__ (self, prop)
180 class MenuToolButton (ToggleToolButton):
181 # __gsignals__ = {
182 # "property-activate" : (
183 # gobject.SIGNAL_RUN_FIRST,
184 # gobject.TYPE_NONE,
185 # (gobject.TYPE_STRING, gobject.TYPE_INT)),
188 def __init__ (self, prop):
189 ToggleToolButton.__init__ (self, prop)
190 self._menu = Menu (prop)
191 self._menu.connect ("deactivate", lambda m: self.set_active (False))
192 self._menu.connect ("property-activate", lambda w,n,s: self.emit ("property-activate", n, s))
194 def do_toggled (self):
195 if self.get_active ():
196 self._menu.popup (0, gtk.get_current_event_time (), self)
198 gobject.type_register (ToolButton, "ToolButton")
199 gobject.type_register (ToggleToolButton, "IBusToggleToolButton")
200 gobject.type_register (MenuToolButton, "MenuToolButton")