1 #Copyright (C) 2008 Codethink Ltd
3 #This library is free software; you can redistribute it and/or
4 #modify it under the terms of the GNU Lesser General Public
5 #License version 2 as published by the Free Software Foundation.
7 #This program is distributed in the hope that it will be useful,
8 #but WITHOUT ANY WARRANTY; without even the implied warranty of
9 #MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 #GNU General Public License for more details.
11 #You should have received a copy of the GNU Lesser General Public License
12 #along with this program; if not, write to the Free Software
13 #Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
16 from base import BaseProxy, Enum
17 from factory import create_accessible, add_accessible_class
18 from accessible import BoundingBox
20 from dbus.types import Int16
39 #------------------------------------------------------------------------------
41 class CoordType(Enum):
47 XY_SCREEN = CoordType(0)
48 XY_WINDOW = CoordType(1)
50 #------------------------------------------------------------------------------
52 class ComponentLayer(Enum):
62 8:'LAYER_LAST_DEFINED',
65 LAYER_BACKGROUND = ComponentLayer(1)
66 LAYER_CANVAS = ComponentLayer(2)
67 LAYER_INVALID = ComponentLayer(0)
68 LAYER_LAST_DEFINED = ComponentLayer(8)
69 LAYER_MDI = ComponentLayer(4)
70 LAYER_OVERLAY = ComponentLayer(6)
71 LAYER_POPUP = ComponentLayer(5)
72 LAYER_WIDGET = ComponentLayer(3)
73 LAYER_WINDOW = ComponentLayer(7)
75 #------------------------------------------------------------------------------
77 class Component(BaseProxy):
79 The Component interface is implemented by objects which occupy
80 on-screen space, e.g. objects which have onscreen visual representations.
81 The methods in Component allow clients to identify where the
82 objects lie in the onscreen coordinate system, their relative
83 size, stacking order, and position. It also provides a mechanism
84 whereby keyboard focus may be transferred to specific user interface
85 elements programmatically. This is a 2D API, coordinates of 3D
86 objects are projected into the 2-dimensional screen view for
87 purposes of this interface.
90 def contains(self, *args, **kwargs):
92 @return True if the specified point lies within the Component's
93 bounding box, False otherwise.
95 func = self.get_dbus_method("contains")
96 return func(*args, **kwargs)
98 def deregisterFocusHandler(self, *args, **kwargs):
100 Request that an EventListener registered via registerFocusHandler
101 no longer be notified when this object receives keyboard focus.
103 func = self.get_dbus_method("deregisterFocusHandler")
104 return func(*args, **kwargs)
106 def getAccessibleAtPoint(self, *args, **kwargs):
108 @return the Accessible child whose bounding box contains the
111 func = self.get_dbus_method("getAccessibleAtPoint")
112 return func(*args, **kwargs)
114 def getAlpha(self, *args, **kwargs):
116 Obtain the alpha value of the component. An alpha value of 1.0
117 or greater indicates that the object is fully opaque, and an
118 alpha value of 0.0 indicates that the object is fully transparent.
119 Negative alpha values have no defined meaning at this time.
121 func = self.get_dbus_method("getAlpha")
122 return func(*args, **kwargs)
124 def getExtents(self, coord_type):
126 Obtain the Component's bounding box, in pixels, relative to the
127 specified coordinate system.
129 @return a BoundingBox which entirely contains the object's onscreen
130 visual representation.
132 func = self.get_dbus_method("getExtents")
133 extents = func(Int16(coord_type))
134 return BoundingBox(*extents)
136 def getLayer(self, *args, **kwargs):
138 @return the ComponentLayer in which this object resides.
140 func = self.get_dbus_method("getLayer")
141 return ComponentLayer(func(*args, **kwargs))
143 def getMDIZOrder(self):
145 Obtain the relative stacking order (i.e. 'Z' order) of an object.
146 Larger values indicate that an object is on "top" of the stack,
147 therefore objects with smaller MDIZOrder may be obscured by objects
148 with a larger MDIZOrder, but not vice-versa.
149 @return an integer indicating the object's place in the stacking
152 func = self.get_dbus_method("getMDIZOrder")
155 def getPosition(self, coord_type):
157 Obtain the position of the current component in the coordinate
158 system specified by coord_type.
161 an out parameter which will be back-filled with the returned
164 an out parameter which will be back-filled with the returned
167 func = self.get_dbus_method("getPosition")
168 return func(Int16(coord_type))
170 def getSize(self, *args, **kwargs):
172 Obtain the size, in the coordinate system specified by coord_type,
173 of the rectangular area which fully contains the object's visual
174 representation, without accounting for viewport clipping.
176 the object's horizontal extents in the specified coordinate system.
178 the object's vertical extents in the specified coordinate system.
180 func = self.get_dbus_method("getSize")
181 return func(*args, **kwargs)
183 def grabFocus(self, *args, **kwargs):
185 Request that the object obtain keyboard focus.
186 @return True if keyboard focus was successfully transferred to
189 func = self.get_dbus_method("grabFocus")
190 return func(*args, **kwargs)
192 def registerFocusHandler(self, *args, **kwargs):
194 Register an EventListener for notification when this object receives
197 func = self.get_dbus_method("registerFocusHandler")
198 return func(*args, **kwargs)
200 # Register the Accessible class with the accessible factory.
201 add_accessible_class(interfaces.ATSPI_COMPONENT, Component)
203 #END----------------------------------------------------------------------------