dc8fc458d3f335d167066810c28b1fb4f4ac42e2
[platform/core/uifw/at-spi2-atk.git] / pyatspi / component.py
1 #Copyright (C) 2008 Codethink Ltd
2
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.
6
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.
14
15 from interfaces import *
16 from base import Enum
17 from factory import accessible_factory
18 from accessible import BoundingBox, Accessible
19
20 from dbus.types import UInt32
21
22 __all__ = [
23            "CoordType",
24            "XY_SCREEN",
25            "XY_WINDOW",
26            "ComponentLayer",
27            "Component",
28            "LAYER_BACKGROUND",
29            "LAYER_CANVAS",
30            "LAYER_INVALID",
31            "LAYER_LAST_DEFINED",
32            "LAYER_MDI",
33            "LAYER_OVERLAY",
34            "LAYER_POPUP",
35            "LAYER_WIDGET",
36            "LAYER_WINDOW",
37           ]
38
39 #------------------------------------------------------------------------------
40
41 class CoordType(Enum):
42         _enum_lookup = {
43                 0:'XY_SCREEN',
44                 1:'XY_WINDOW',
45         }
46
47 XY_SCREEN = CoordType(0)
48 XY_WINDOW = CoordType(1)
49
50 #------------------------------------------------------------------------------
51
52 class ComponentLayer(Enum):
53         _enum_lookup = {
54                 0:'LAYER_INVALID',
55                 1:'LAYER_BACKGROUND',
56                 2:'LAYER_CANVAS',
57                 3:'LAYER_WIDGET',
58                 4:'LAYER_MDI',
59                 5:'LAYER_POPUP',
60                 6:'LAYER_OVERLAY',
61                 7:'LAYER_WINDOW',
62                 8:'LAYER_LAST_DEFINED',
63         }
64
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)
74
75 #------------------------------------------------------------------------------
76
77 class Component(Accessible):
78         """
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.
88         """
89
90         def contains(self, x, y, coord_type):
91                 """
92                 @return True if the specified point lies within the Component's
93                 bounding box, False otherwise.
94                 """
95                 func = self.get_dbus_method("contains", dbus_interface=ATSPI_COMPONENT)
96                 return func(x, y, coord_type)
97
98         def getAccessibleAtPoint(self, x, y, coord_type):
99                 """
100                 @return the Accessible child whose bounding box contains the
101                 specified point.
102                 """
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)
106
107         def getAlpha(self):
108                 """
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.
113                 """
114                 func = self.get_dbus_method("getAlpha", dbus_interface=ATSPI_COMPONENT)
115                 return func()
116
117         def getExtents(self, coord_type):
118                 """
119                 Obtain the Component's bounding box, in pixels, relative to the
120                 specified coordinate system. 
121                 @param coord_type
122                 @return a BoundingBox which entirely contains the object's onscreen
123                 visual representation.
124                 """
125                 func = self.get_dbus_method("getExtents", dbus_interface=ATSPI_COMPONENT)
126                 extents = func(UInt32(coord_type))
127                 return BoundingBox(*extents)
128
129         def getLayer(self):
130                 """
131                 @return the ComponentLayer in which this object resides.
132                 """
133                 func = self.get_dbus_method("getLayer", dbus_interface=ATSPI_COMPONENT)
134                 return ComponentLayer(func())
135
136         def getMDIZOrder(self):
137                 """
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
143                 order.
144                 """
145                 func = self.get_dbus_method("getMDIZOrder", dbus_interface=ATSPI_COMPONENT)
146                 return func()
147
148         def getPosition(self, coord_type):
149                 """
150                 Obtain the position of the current component in the coordinate
151                 system specified by coord_type. 
152                 @param : coord_type
153                 @param : x
154                 an out parameter which will be back-filled with the returned
155                 x coordinate. 
156                 @param : y
157                 an out parameter which will be back-filled with the returned
158                 y coordinate.
159                 """
160                 func = self.get_dbus_method("getPosition", dbus_interface=ATSPI_COMPONENT)
161                 return func(UInt32(coord_type))
162
163         def getSize(self):
164                 """
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. 
168                 @param : width
169                 the object's horizontal extents in the specified coordinate system.
170                 @param : height
171                 the object's vertical extents in the specified coordinate system.
172                 """
173                 func = self.get_dbus_method("getSize", dbus_interface=ATSPI_COMPONENT)
174                 return func()
175
176         def grabFocus(self):
177                 """
178                 Request that the object obtain keyboard focus.
179                 @return True if keyboard focus was successfully transferred to
180                 the Component.
181                 """
182                 func = self.get_dbus_method("grabFocus", dbus_interface=ATSPI_COMPONENT)
183                 return func()
184
185 # Register the accessible class with the factory.
186 accessible_factory.register_accessible_class(ATSPI_COMPONENT, Component)
187
188 #END----------------------------------------------------------------------------