/* $Id: papi_atktextrange.c,v 1.3.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.
*/
#include "papi.h"
#include "papi_private.h"
/* Forward declarations. */
static PyObject* _atktextrange_new (PyTypeObject *type, PyObject *args,
PyObject *kwds);
static int _atktextrange_init (PyAtkTextRange *self, PyObject *args,
PyObject *kwds);
static void _atktextrange_dealloc (PyAtkTextRange *self);
static PyObject* _atktextrange_get_bounds (PyAtkTextRange *self,
void *closure);
static int _atktextrange_set_bounds (PyAtkTextRange *self, PyObject *value,
void *closure);
static PyObject* _atktextrange_get_start_offset (PyAtkTextRange *self,
void *closure);
static int _atktextrange_set_start_offset (PyAtkTextRange *self,
PyObject *value, void *closure);
static PyObject* _atktextrange_get_end_offset (PyAtkTextRange *self,
void *closure);
static int _atktextrange_set_end_offset (PyAtkTextRange *self, PyObject *value,
void *closure);
static PyObject* _atktextrange_get_content (PyAtkTextRange *self,
void *closure);
static int _atktextrange_set_content (PyAtkTextRange *self, PyObject *value,
void *closure);
/**
* Getters and setters for the PyAtkTextRange.
*/
static PyGetSetDef _atktextrange_getsets[] = {
{ "bounds", (getter) _atktextrange_get_bounds,
(setter) _atktextrange_set_bounds,
"A rectangle giving the bounds of the text range.", NULL },
{ "start_offset",(getter) _atktextrange_get_start_offset,
(setter) _atktextrange_set_start_offset,
"The start offset of a AtkTextRange.", NULL },
{ "end_offset",(getter) _atktextrange_get_end_offset,
(setter) _atktextrange_set_end_offset,
"The end offset of a AtkTextRange.", NULL },
{ "content",(getter) _atktextrange_get_content,
(setter) _atktextrange_set_content, "The text in the text range.",
NULL },
{ NULL, NULL, NULL, NULL, NULL }
};
/**
* PyAtkTextRange wrapper type, that encapsulates the AtkTextRange.
*/
PyTypeObject PyAtkTextRange_Type =
{
PyObject_HEAD_INIT(NULL)
0,
"papi.AtkTextRange", /* tp_name */
sizeof (PyAtkTextRange), /* tp_basicsize */
0, /* tp_itemsize */
(destructor) _atktextrange_dealloc, /* tp_dealloc */
0, /* tp_print */
0, /* tp_getattr */
0, /* tp_setattr */
0, /* tp_compare */
0, /* tp_repr */
0, /* tp_as_number */
0, /* tp_as_sequence */
0, /* tp_as_mapping */
0, /* tp_hash */
0, /* tp_call */
0, /* tp_str */
0, /* tp_getattro */
0, /* tp_setattro */
0, /* tp_as_buffer */
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */
"A structure used to describe a text range.", /* tp_doc */
0, /* tp_traverse */
0, /* tp_clear */
0, /* tp_richcompare */
0, /* tp_weaklistoffset */
0, /* tp_iter */
0, /* tp_iternext */
0, /* tp_methods */
0, /* tp_members */
_atktextrange_getsets, /* tp_getset */
0, /* tp_base */
0, /* tp_dict */
0, /* tp_descr_get */
0, /* tp_descr_set */
0, /* tp_dictoffset */
(initproc) _atktextrange_init, /* tp_init */
0, /* tp_alloc */
_atktextrange_new, /* tp_new */
0, /* tp_free */
0, /* tp_is_gc */
0, /* tp_bases */
0, /* tp_mro */
0, /* tp_cache */
0, /* tp_subclasses */
0, /* tp_weaklist */
0 /* tp_del */
};
/**
* Creates a new PyAtkTextRange.
*/
static PyObject*
_atktextrange_new (PyTypeObject *type, PyObject *args, PyObject *kwds)
{
PyAtkTextRange *self;
debug ("_atktextrange_new\n");
self = (PyAtkTextRange *) type->tp_alloc (type, 0);
self->obj = g_new (AtkTextRange, 1);
if (!self->obj)
{
PyErr_SetNone (PyExc_MemoryError);
return NULL;
}
return (PyObject *) self;
}
/**
* Initializes the PyAtkTextRange members.
*/
static int
_atktextrange_init (PyAtkTextRange *self, PyObject *args, PyObject *kwds)
{
PyAtkTextRectangle *bounds = NULL;
static char *kwlist[] = { "bounds", "start_offset", "end_offset",
"content", NULL };
debug ("_atktextrange_init\n");
/* Optional keywords - name and value. */
if (!PyArg_ParseTupleAndKeywords (args, kwds, "|Oiis", kwlist, &bounds,
&(self->obj->start_offset),
&(self->obj->end_offset),
&(self->obj->content)))
return -1;
/* Set the bounds. */
if (bounds)
{
if (!PyObject_TypeCheck (bounds, &PyAtkTextRectangle_Type))
{
PyErr_SetString (PyExc_TypeError,
"bounds must be a AtkTextRectangle");
return -1;
}
self->obj->bounds.x = bounds->obj->x;
self->obj->bounds.y = bounds->obj->y;
self->obj->bounds.width = bounds->obj->width;
self->obj->bounds.height = bounds->obj->height;
}
return 0;
}
/**
* Deallocates the PyAtkTextRange and its members.
*/
static void
_atktextrange_dealloc (PyAtkTextRange *self)
{
debug ("_atktextrange_dealloc\n");
if (self->obj)
g_free (self->obj);
self->ob_type->tp_free ((PyObject *) self);
}
/**
* Getter for AtkTextRange.bounds.
*/
static PyObject*
_atktextrange_get_bounds (PyAtkTextRange *self, void *closure)
{
PyAtkTextRectangle *rect;
debug ("_atktextrange_get_bounds\n");
rect = PyAtkTextRectangle_Type.tp_new (&PyAtkTextRectangle_Type, NULL,
NULL);
rect->obj->x = self->obj->bounds.x;
rect->obj->y = self->obj->bounds.y;
rect->obj->width = self->obj->bounds.width;
rect->obj->height = self->obj->bounds.height;
return (PyObject *) rect;
}
/**
* Setter for AtkTextRange.bounds.
*/
static int
_atktextrange_set_bounds (PyAtkTextRange *self, PyObject *value, void *closure)
{
PyAtkTextRectangle *rect;
debug ("_atktextrange_set_bounds\n");
if (!PyObject_TypeCheck (value, &PyAtkTextRectangle_Type))
{
PyErr_SetString (PyExc_TypeError, "value must be a AtkTextRectangle");
return -1;
}
rect = (PyAtkTextRectangle *) value;
self->obj->bounds.x = rect->obj->x;
self->obj->bounds.y = rect->obj->y;
self->obj->bounds.width = rect->obj->width;
self->obj->bounds.height = rect->obj->height;
return 0;
}
/**
* Getter for AtkTextRange.start_offset.
*/
static PyObject*
_atktextrange_get_start_offset (PyAtkTextRange *self, void *closure)
{
debug ("_atktextrange_get_start_offset\n");
return PyInt_FromLong (self->obj->start_offset);
}
/**
* Setter for AtkTextRange.start_offset.
*/
static int
_atktextrange_set_start_offset (PyAtkTextRange *self, PyObject *value,
void *closure)
{
debug ("_atktextrange_set_start_offset\n");
if (!PyInt_Check (value))
{
PyErr_SetString (PyExc_TypeError, "value must be an integer");
return -1;
}
self->obj->start_offset = PyInt_AsLong (value);
return 0;
}
/**
* Getter for AtkTextRange.end_offset.
*/
static PyObject*
_atktextrange_get_end_offset (PyAtkTextRange *self, void *closure)
{
debug ("_atktextrange_get_end_offset\n");
return PyInt_FromLong (self->obj->end_offset);
}
/**
* Setter for AtkTextRange.end_offset.
*/
static int
_atktextrange_set_end_offset (PyAtkTextRange *self, PyObject *value,
void *closure)
{
debug ("_atktextrange_set_end_offset\n");
if (!PyInt_Check (value))
{
PyErr_SetString (PyExc_TypeError, "value must be an integer");
return -1;
}
self->obj->end_offset = PyInt_AsLong (value);
return 0;
}
/**
* Getter for AtkTextRange.content.
*/
static PyObject*
_atktextrange_get_content (PyAtkTextRange *self, void *closure)
{
debug ("_atktextrange_get_content\n");
return PyString_FromString (self->obj->content);
}
/**
* Setter for AtkTextRange.content.
*/
static int
_atktextrange_set_content (PyAtkTextRange *self, PyObject *value,
void *closure)
{
debug ("_atktextrange_set_content\n");
if (!PyString_Check (value))
{
PyErr_SetString (PyExc_TypeError, "value must be a string");
return -1;
}
self->obj->content = PyString_AsString (value);
return 0;
}
syntax highlighted by Code2HTML, v. 0.9.1