Пример #1
0
static PyObject *
PyDiaObject_GetAttr(PyDiaObject *self, gchar *attr)
{
    if (!strcmp(attr, "__members__"))
	return Py_BuildValue("[sssss]", "bounding_box", "connections",
			     "handles", "properties", "type");
    else if (!strcmp(attr, "type"))
	return PyDiaObjectType_New(self->object->type);
    else if (!strcmp(attr, "bounding_box"))
	return PyDiaRectangle_New(&(self->object->bounding_box), NULL);
    else if (!strcmp(attr, "handles")) {
	int i;
	PyObject *ret = PyTuple_New(self->object->num_handles);

	for (i = 0; i < self->object->num_handles; i++)
	    PyTuple_SetItem(ret, i, PyDiaHandle_New(self->object->handles[i], self->object));
	return ret;
    } else if (!strcmp(attr, "connections")) {
	int i;
	PyObject *ret = PyTuple_New(self->object->num_connections);

	for (i = 0; i < self->object->num_connections; i++)
	    PyTuple_SetItem(ret, i, PyDiaConnectionPoint_New(
				self->object->connections[i]));
	return ret;
    } else if (!strcmp(attr, "properties")) {
	return PyDiaProperties_New(self->object);
    }

    return Py_FindMethod(PyDiaObject_Methods, (PyObject *)self, attr);
}
Пример #2
0
static PyObject *
PyDiaSheet_GetAttr(PyDiaSheet *self, gchar *attr)
{
    if (!strcmp(attr, "__members__"))
	return Py_BuildValue("[ssss]", "name", "description", "filename", "objects");
    else if (!strcmp(attr, "name"))
	return PyString_FromString(self->sheet->name);
    else if (!strcmp(attr, "description"))
	return PyString_FromString(self->sheet->description);
    else if (!strcmp(attr, "filename"))
	return PyString_FromString(self->sheet->filename);
    else if (!strcmp(attr, "user"))
	return PyInt_FromLong(self->sheet->scope == SHEET_SCOPE_USER ? 1 : 0);
    else if (!strcmp(attr, "objects")) {
	/* Just returning tuples with information for now. Wrapping SheetObject
	 * looks like overkill for the time being.
	 *  - DiaObjectType or None
	 *  - description of the SheetObject
	 *  - filename of the icon file
	 */
	PyObject *ret = PyList_New(0);
	GSList *list;

	for (list = self->sheet->objects; list != NULL; list = list->next) {
	    SheetObject *so = list->data;
	    DiaObjectType *ot = object_get_type (so->object_type);

	    if (!ot)
		Py_INCREF(Py_None);
	    PyList_Append(ret, Py_BuildValue ("(Oss)",
						ot ? PyDiaObjectType_New (ot) : Py_None,
						PyString_FromString (so->description ? so->description : ""),
						PyString_FromString (so->pixmap_file ? so->pixmap_file : "")));
	}
	return ret;
    }

    return Py_FindMethod(PyDiaSheet_Methods, (PyObject *)self, attr);
}