/* $Id: papi_private.h,v 1.15.2.3 2007/03/23 06:02:21 marcusva Exp $
*
* Copyright (c) 2006, Marcus von Appen
* All rights reserved.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _PAPI_PRIVATE_H_
#define _PAPI_PRIVATE_H_
#include <Python.h>
#include <atk/atk.h>
#ifdef DEBUG
#define debug(x) printf("DEBUG: File %s, Line %d: %s", __FILE__, __LINE__, x)
#else
#define debug(x) NULL
#endif
/* Backwards compatibility with Python 2.3. */
#if PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION == 3
# define Py_RETURN_NONE return Py_INCREF(Py_None), Py_None
# define Py_RETURN_TRUE return Py_INCREF(Py_True), Py_True
# define Py_RETURN_FALSE return Py_INCREF(Py_False), Py_False
#endif
#define ARRAY_AMOUNT(x) (sizeof (x) / sizeof ((x)[0]))
/**
* Identifier flag for the get_n_accessible_children method. As the
* AtkObjectclass->get_n_children interface receives an AtkObject, we
* cannot simply use an encapsulation _without_ using the GType system.
* We do not use the GType system, thus we bind the information directly
* to the AtkObject and use the g_object_set/get_data functions on it.
*/
#define PAPI_CHILDREN "PAPI_CHILDREN"
/**
* We have to manage a reference to the encapsulating PyAtkObject in our
* wrapped AtkObject, so that interfaces and methods, which receive an
* AtkObject as argument, can directly interact with the PyAtkObject, if
* necessary. This is esp. useful for the interface bindings, where
* users have to implement the interface methods as python methods,
* which we will invoke then.
*/
#define PAPI_PYOBJECT "PAPI_PYOBJECT"
/**
* Interface types used by the AtkObject resolution system to create
* interface enabled GTypes on the fly.
* See the GType related function in papi_atkobject.c
* papi_constants.c contains the names for exposing the constants.
*/
typedef enum
{
IFACE_INVALID = 0, /* Invalid interface identifier. */
IFACE_ACTION = 1 << 0, /* Identifies the AtkAction interface. */
IFACE_COMPONENT = 1 << 1, /* Identifies the AtkComponent interface. */
IFACE_DOCUMENT = 1 << 2, /* Identifies the AtkDocument interface. */
IFACE_EDITABLE_TEXT = 1 << 3, /* Identifies the AtkEditableText
* interface. */
IFACE_HYPERTEXT = 1 << 4, /* Identifies the AtkHypertext interface. */
IFACE_IMAGE = 1 << 5, /* Identifies the AtkImage interface. */
IFACE_SELECTION = 1 << 6, /* Identifies the AtkSelection interface. */
IFACE_STREAMABLE = 1 << 7, /* Identifies the AtkStreamableContent
* interface. */
IFACE_TABLE = 1 << 8, /* Identifies the AtkTable interface. */
IFACE_TEXT = 1 << 9, /* Identifies the AtkText interface. */
IFACE_VALUE = 1 << 10, /* Identifies the AtkValue interface. */
IFACE_HYPERLINK_IMPL = 1 << 11 /* Identifies the AtkHyperlinkImpl
* interface. */
} AtkInterfaceType;
/**
* Object types used by the module.
*/
extern PyTypeObject PyAtkObject_Type;
extern PyTypeObject PyAtkStateSet_Type;
extern PyTypeObject PyAtkRelation_Type;
extern PyTypeObject PyAtkRelationSet_Type;
extern PyTypeObject PyAtkHyperlink_Type;
extern PyTypeObject PyAtkAttribute_Type;
extern PyTypeObject PyAtkTextRectangle_Type;
extern PyTypeObject PyAtkTextRange_Type;
/**
* Different functions, which will export the globally available ATK
* functions into the python module.
*/
void atkrelationtype_export_funcs (PyObject *module);
void atkrole_export_funcs (PyObject *module);
void atkstatetype_export_funcs (PyObject *module);
void atktextattribute_export_funcs (PyObject *module);
void atkutil_export_funcs (PyObject *module);
void atkbridge_export_funcs (PyObject *module);
/**
* Creates constants for the python module from the different ATK
* enumerations.
*/
void constants_export (PyObject *module);
/**
* Globally used classbinding functions. As ATK forces implementors to
* override various interfaces of it, those are used to do that job and
* to point to the overriden or encapsulated interfaces.
*/
PyObject *atkutil_get_listeners (void);
guint atkutil_lookup_signal (const char *name);
void atkobjectclass_init (AtkObjectClass *class);
void atkutilclass_init (AtkUtilClass *class);
int atkutil_root_satisfied (void);
/**
* Functions to add the different available ATK interfaces to the
* underlying AtkObject instances and to the Python object wrapper.
*/
AtkInterfaceType atktype_get_num (GType *types);
GType atktype_get_type (AtkInterfaceType ifacenum);
void atktype_add_interface_methods (PyObject *self, AtkInterfaceType ifacenum);
/**
* Creates PyObject instances fom GValue types. Defined in
* papi_atkvalueiface.c
*/
PyObject *pyobject_from_gvalue (GValue *value);
/**
* Retrieval functions for various Atk interfaces, which are called, when
* new AtkObjects are instantiated using the get_papi_atk_type() call within
* the PyAtkObject init call.
*/
const GInterfaceInfo *atkactioniface_get_info (void);
void atkactioniface_add_methods (PyObject *self);
const GInterfaceInfo *atkcomponentiface_get_info (void);
void atkcomponentiface_add_methods (PyObject *self);
const GInterfaceInfo *atkdocumentiface_get_info (void);
void atkdocumentiface_add_methods (PyObject *self);
const GInterfaceInfo *atkeditableiface_get_info (void);
void atkeditableiface_add_methods (PyObject *self);
const GInterfaceInfo *atkhypertextiface_get_info (void);
void atkhypertextiface_add_methods (PyObject *self);
const GInterfaceInfo *atkimageiface_get_info (void);
void atkimageiface_add_methods (PyObject *self);
const GInterfaceInfo *atkselectioniface_get_info (void);
void atkselectioniface_add_methods (PyObject *self);
const GInterfaceInfo *atkstreamableiface_get_info (void);
void atkstreamableiface_add_methods (PyObject *self);
const GInterfaceInfo *atktableiface_get_info (void);
void atktableiface_add_methods (PyObject *self);
const GInterfaceInfo *atktextiface_get_info (void);
void atktextiface_add_methods (PyObject *self);
const GInterfaceInfo *atkvalueiface_get_info (void);
void atkvalueiface_add_methods (PyObject *self);
const GInterfaceInfo *atkhyperlinkimpliface_get_info (void);
void atkhyperlinkimpliface_add_methods (PyObject *self);
#endif /* _PAPI_PRIVATE_H_ */
syntax highlighted by Code2HTML, v. 0.9.1