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.
15 from interfaces import *
17 from factory import accessible_factory
18 from accessible import BoundingBox, Accessible
20 from dbus.types import UInt32
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(Accessible):
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, x, y, coord_type):
92 @return True if the specified point lies within the Component's
93 bounding box, False otherwise.
95 func = self.get_dbus_method("contains", dbus_interface=ATSPI_COMPONENT)
96 return func(x, y, coord_type)
98 def getAccessibleAtPoint(self, x, y, coord_type):
100 @return the Accessible child whose bounding box contains the
103 #TODO Need to return an actual accessible object rather than a random string.
104 func = self.get_dbus_method("getAccessibleAtPoint", dbus_interface=ATSPI_COMPONENT)
105 return func(x, y, coord_type)
109 Obtain the alpha value of the component. An alpha value of 1.0
110 or greater indicates that the object is fully opaque, and an
111 alpha value of 0.0 indicates that the object is fully transparent.
112 Negative alpha values have no defined meaning at this time.
114 func = self.get_dbus_method("getAlpha", dbus_interface=ATSPI_COMPONENT)
117 def getExtents(self, coord_type):
119 Obtain the Component's bounding box, in pixels, relative to the
120 specified coordinate system.
122 @return a BoundingBox which entirely contains the object's onscreen
123 visual representation.
125 func = self.get_dbus_method("getExtents", dbus_interface=ATSPI_COMPONENT)
126 extents = func(UInt32(coord_type))
127 return BoundingBox(*extents)
131 @return the ComponentLayer in which this object resides.
133 func = self.get_dbus_method("getLayer", dbus_interface=ATSPI_COMPONENT)
134 return ComponentLayer(func())
136 def getMDIZOrder(self):
138 Obtain the relative stacking order (i.e. 'Z' order) of an object.
139 Larger values indicate that an object is on "top" of the stack,
140 therefore objects with smaller MDIZOrder may be obscured by objects
141 with a larger MDIZOrder, but not vice-versa.
142 @return an integer indicating the object's place in the stacking
145 func = self.get_dbus_method("getMDIZOrder", dbus_interface=ATSPI_COMPONENT)
148 def getPosition(self, coord_type):
150 Obtain the position of the current component in the coordinate
151 system specified by coord_type.
154 an out parameter which will be back-filled with the returned
157 an out parameter which will be back-filled with the returned
160 func = self.get_dbus_method("getPosition", dbus_interface=ATSPI_COMPONENT)
161 return func(UInt32(coord_type))
165 Obtain the size, in the coordinate system specified by coord_type,
166 of the rectangular area which fully contains the object's visual
167 representation, without accounting for viewport clipping.
169 the object's horizontal extents in the specified coordinate system.
171 the object's vertical extents in the specified coordinate system.
173 func = self.get_dbus_method("getSize", dbus_interface=ATSPI_COMPONENT)
178 Request that the object obtain keyboard focus.
179 @return True if keyboard focus was successfully transferred to
182 func = self.get_dbus_method("grabFocus", dbus_interface=ATSPI_COMPONENT)
185 # Register the accessible class with the factory.
186 accessible_factory.register_accessible_class(ATSPI_COMPONENT, Component)
188 #END----------------------------------------------------------------------------