X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=pyatspi%2Faccessible.py;h=093ac0382569bd6ca9cccb685b90a422263deeec;hb=44f09457a5943064561849630015596a4d4528e6;hp=54be0cd88862767eff9ed67e7d0d05605f5d2456;hpb=91308d34413609f0d82dd0e280d3ee76229bd555;p=platform%2Fcore%2Fuifw%2Fat-spi2-atk.git diff --git a/pyatspi/accessible.py b/pyatspi/accessible.py index 54be0cd..093ac03 100644 --- a/pyatspi/accessible.py +++ b/pyatspi/accessible.py @@ -12,7 +12,74 @@ #along with this program; if not, write to the Free Software #Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -from base import BaseProxy +import interfaces +from base import BaseProxy, Enum +from factory import create_accessible, add_accessible_class +from state import StateSet, _marshal_state_set +from relation import _marshal_relation_set +from role import Role + +__all__ = [ + "LOCALE_TYPE", + "LOCALE_TYPE_COLLATE", + "LOCALE_TYPE_CTYPE", + "LOCALE_TYPE_MESSAGES", + "LOCALE_TYPE_MONETARY", + "LOCALE_TYPE_NUMERIC", + "LOCALE_TYPE_TIME", + "BoundingBox", + "Accessible", + ] + +#------------------------------------------------------------------------------ + +class LOCALE_TYPE(Enum): + _enum_lookup = { + 0:'LOCALE_TYPE_MESSAGES', + 1:'LOCALE_TYPE_COLLATE', + 2:'LOCALE_TYPE_CTYPE', + 3:'LOCALE_TYPE_MONETARY', + 4:'LOCALE_TYPE_NUMERIC', + 5:'LOCALE_TYPE_TIME', + } + +LOCALE_TYPE_COLLATE = LOCALE_TYPE(1) +LOCALE_TYPE_CTYPE = LOCALE_TYPE(2) +LOCALE_TYPE_MESSAGES = LOCALE_TYPE(0) +LOCALE_TYPE_MONETARY = LOCALE_TYPE(3) +LOCALE_TYPE_NUMERIC = LOCALE_TYPE(4) +LOCALE_TYPE_TIME = LOCALE_TYPE(5) + +#------------------------------------------------------------------------------ + +class BoundingBox(list): + def __new__(cls, x, y, width, height): + return list.__new__(cls, (x, y, width, height)) + def __init__(self, x, y, width, height): + list.__init__(self, (x, y, width, height)) + + def _get_x(self): + return self[0] + def _set_x(self, val): + self[0] = val + x = property(fget=_get_x, fset=_set_x) + def _get_y(self): + return self[1] + def _set_y(self, val): + self[1] = val + y = property(fget=_get_y, fset=_set_y) + def _get_width(self): + return self[2] + def _set_width(self, val): + self[2] = val + width = property(fget=_get_width, fset=_set_width) + def _get_height(self): + return self[3] + def _set_height(self, val): + self[3] = val + height = property(fget=_get_height, fset=_set_height) + +#------------------------------------------------------------------------------ class Accessible(BaseProxy): """ @@ -21,16 +88,27 @@ class Accessible(BaseProxy): 'children' and position in the accessible-object hierarchy, whether or not they actually have children. """ + + def __len__(self): + return self.getChildCount() + + def __getitem__(self, index): + return self.getChildAtIndex(index) - def getApplication(self, *args, **kwargs): + def getApplication(self): """ Get the containing Application for this object. @return the Application instance to which this object belongs. """ - func = self.get_dbus_method("getApplication") - return func(*args, **kwargs) + application_root = self._cache[self._app_name]._get_root() + #TODO Set the desktop object as the parent of this. + return create_accessible(self._cache, + self._app_name, + application_root, + interfaces.ATSPI_APPLICATION, + connection=self._cache._connection) - def getAttributes(self, *args, **kwargs): + def getAttributes(self): """ Get a list of properties applied to this object as a whole, as an AttributeSet consisting of name-value pairs. As such these @@ -56,32 +134,41 @@ class Accessible(BaseProxy): Similarly, relevant structural metadata should be exposed using attribute names and values chosen from the CSS2 and WICD specification: http://www.w3.org/TR/1998/REC-CSS2-19980512 WICD (http://www.w3.org/TR/2005/WD-WICD-20051121/). - @return : an AttributeSet encapsulating any "attribute values" - currently defined for the object. + + @return : An AttributeSet encapsulating any "attribute values" + currently defined for the object. An attribute set is a list of strings + with each string comprising an name-value pair format 'name:value'. """ func = self.get_dbus_method("getAttributes") - return func(*args, **kwargs) + return func() - def getChildAtIndex(self, *args, **kwargs): + def getChildAtIndex(self, index): """ Get the accessible child of this object at index. @param : index an in parameter indicating which child is requested (zero-indexed). @return : the 'nth' Accessible child of this object. """ - func = self.get_dbus_method("getChildAtIndex") - return func(*args, **kwargs) + path = self.cached_data.children[index] + return create_accessible(self._cache, + self._app_name, + path, + interfaces.ATSPI_ACCESSIBLE, + connection=self._cache._connection) - def getIndexInParent(self, *args, **kwargs): + def getIndexInParent(self): """ Get the index of this object in its parent's child list. @return : a long integer indicating this object's index in the parent's list. """ - func = self.get_dbus_method("getIndexInParent") - return func(*args, **kwargs) + for i in range(0, self.parent.childCount): + child = self.parent.getChildAtIndex(i) + if self.isEqual(child): + return i + raise AccessibleObjectNoLongerExists("Child not found within parent") - def getLocalizedRoleName(self, *args, **kwargs): + def getLocalizedRoleName(self): """ Get a string indicating the type of UI role played by this object, translated to the current locale. @@ -89,45 +176,46 @@ class Accessible(BaseProxy): by this object. """ func = self.get_dbus_method("getLocalizedRoleName") - return func(*args, **kwargs) + return func() - def getRelationSet(self, *args, **kwargs): + def getRelationSet(self): """ Get a set defining this object's relationship to other accessible objects. @return : a RelationSet defining this object's relationships. """ func = self.get_dbus_method("getRelationSet") - return func(*args, **kwargs) + relation_set = func() + return _marshal_relation_set(self._cache, self._dbus_object, self._app_name, relation_set) - def getRole(self, *args, **kwargs): + def getRole(self): """ Get the Role indicating the type of UI role played by this object. @return : a Role indicating the type of UI role played by this object. """ - func = self.get_dbus_method("getRole") - return func(*args, **kwargs) + return Role(self.cached_data.role) - def getRoleName(self, *args, **kwargs): + def getRoleName(self): """ Get a string indicating the type of UI role played by this object. @return : a UTF-8 string indicating the type of UI role played by this object. """ func = self.get_dbus_method("getRoleName") - return func(*args, **kwargs) + return func() - def getState(self, *args, **kwargs): + def getState(self): """ Get the current state of the object as a StateSet. @return : a StateSet encapsulating the currently true states of the object. """ func = self.get_dbus_method("getState") - return func(*args, **kwargs) + bitfield = func() + return _marshal_state_set(bitfield) - def isEqual(self, *args, **kwargs): + def isEqual(self, accessible): """ Determine whether an Accessible refers to the same object as another. This method should be used rather than brute-force comparison @@ -139,52 +227,50 @@ class Accessible(BaseProxy): @return : a boolean indicating whether the two object references point to the same object. """ - func = self.get_dbus_method("isEqual") - return func(*args, **kwargs) - - def unimplemented(self, *args, **kwargs): - """ - /cond future expansion - """ - func = self.get_dbus_method("unimplemented") - return func(*args, **kwargs) + return (self._app_name == accessible._app_name) and \ + (self._acc_path == accessible._acc_path) def get_childCount(self): - self._pgetter(self._dbus_interface, "childCount") - def set_childCount(self, value): - self._psetter(self._dbus_interface, "childCount", value) + return len(self.cached_data.children) _childCountDoc = \ """ childCount: the number of children contained by this object. """ - childCount = property(fget=get_childCount, fset=set_childCount, doc=_childCountDoc) + childCount = property(fget=get_childCount, doc=_childCountDoc) def get_description(self): - self._pgetter(self._dbus_interface, "description") - def set_description(self, value): - self._psetter(self._dbus_interface, "description", value) + return self.cached_data.description _descriptionDoc = \ """ a string describing the object in more detail than name. """ - description = property(fget=get_description, fset=set_description, doc=_descriptionDoc) + description = property(fget=get_description, doc=_descriptionDoc) def get_name(self): - self._pgetter(self._dbus_interface, "name") - def set_name(self, value): - self._psetter(self._dbus_interface, "name", value) + return self.cached_data.name _nameDoc = \ """ a (short) string representing the object's name. """ - name = property(fget=get_name, fset=set_name, doc=_nameDoc) + name = property(fget=get_name, doc=_nameDoc) def get_parent(self): - self._pgetter(self._dbus_interface, "parent") - def set_parent(self, value): - self._psetter(self._dbus_interface, "parent", value) + if self._parent: + return self._parent + else: + return create_accessible(self._cache, + self._app_name, + self.cached_data.parent, + interfaces.ATSPI_ACCESSIBLE, + connection=self._cache._connection) + _parentDoc = \ """ an Accessible object which is this object's containing object. """ - parent = property(fget=get_parent, fset=set_parent, doc=_parentDoc) + parent = property(fget=get_parent, doc=_parentDoc) + +# Register the Accessible class with the accessible factory. +add_accessible_class(interfaces.ATSPI_ACCESSIBLE, Accessible) + +#END----------------------------------------------------------------------------