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
29 def __init__ (self
, prop
):
33 def update_property (self
, prop
):
34 if self
._prop
== None:
39 if self
._prop
._name
== prop
._name
and self
._prop
._type
== prop
._type
:
41 self
.property_changed ()
44 if any (map (lambda i
: i
.update_property (prop
), self
._sub
_itmes
)):
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
):
69 class ToolButton (gtk
.ToolButton
, ToolItem
):
71 "property-activate" : (
72 gobject
.SIGNAL_RUN_FIRST
,
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
)
86 self
.set_no_show_all (False)
89 self
.set_no_show_all (True)
93 def set_icon_name (self
, icon_name
):
95 gtk
.ToolButton
.set_icon_name (self
, icon_name
)
96 self
.set_is_important (False)
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
):
105 gtk
.ToolButton
.set_tooltip_text (self
, text
)
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
):
122 "property-activate" : (
123 gobject
.SIGNAL_RUN_FIRST
,
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
)
138 self
.set_no_show_all (False)
141 self
.set_no_show_all (True)
144 def set_icon_name (self
, icon_name
):
146 gtk
.ToggleToolButton
.set_icon_name (self
, icon_name
)
147 self
.set_is_important (False)
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
):
156 gtk
.ToggleToolButton
.set_tooltip_text (self
, text
)
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
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
):
182 # "property-activate" : (
183 # gobject.SIGNAL_RUN_FIRST,
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")