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); }
/*! * \brief Render all the visible object in the layer * @param renderer explicit this pointer * @param layer layer to draw * @param active TRUE if it is the currently active layer * @param update the update rectangle, NULL for unlimited * * \memberof _DiaPyRenderer */ static void draw_layer (DiaRenderer *renderer, Layer *layer, gboolean active, Rectangle *update) { PyObject *func, *res, *arg, *self = PYDIA_RENDERER (renderer); func = PyObject_GetAttrString (self, "draw_layer"); if (func && PyCallable_Check(func)) { PyObject *olayer = PyDiaLayer_New (layer); PyObject *orect; Py_INCREF (self); Py_INCREF (func); if (update) { orect = PyDiaRectangle_New (update, NULL); } else { Py_INCREF(Py_None); orect = Py_None; } arg = Py_BuildValue ("(OiO)", olayer, active, orect); if (arg) { res = PyEval_CallObject (func, arg); ON_RES(res, FALSE); } Py_XDECREF (olayer); Py_XDECREF (orect); Py_DECREF(func); Py_DECREF(self); } else { /* member optional */ PyErr_Clear(); /* have to call the base class */ DIA_RENDERER_CLASS (parent_class)->draw_layer (renderer, layer, active, update); } }
static PyObject * PyDiaDiagramData_GetAttr(PyDiaDiagramData *self, gchar *attr) { Diagram *diagram = DIA_DIAGRAM(self->data); if (!strcmp(attr, "__members__")) return Py_BuildValue("[ssssssssssss]", "extents", "bg_color", "paper", "layers", "active_layer", "grid_width", "grid_visible", "hguides", "vguides", "layers", "active_layer", "selected" ); else if (!strcmp(attr, "extents")) return PyDiaRectangle_New(&self->data->extents, NULL); else if (!strcmp(attr, "bg_color")) { return PyDiaColor_New (&(self->data->bg_color)); } else if (!strcmp(attr, "layers")) { guint i, len = self->data->layers->len; PyObject *ret = PyTuple_New(len); for (i = 0; i < len; i++) PyTuple_SetItem(ret, i, PyDiaLayer_New( g_ptr_array_index(self->data->layers, i))); return ret; } else if (!strcmp(attr, "active_layer")) { return PyDiaLayer_New(self->data->active_layer); } else if (!strcmp(attr, "paper")) { return PyDiaPaperinfo_New (&self->data->paper); } else if (diagram && !strcmp(attr, "grid_width")) return Py_BuildValue("(dd)", diagram->grid.width_x, diagram->grid.width_y); else if (diagram && !strcmp(attr, "grid_visible")) return Py_BuildValue("(ii)", diagram->grid.visible_x, diagram->grid.visible_y); else if (diagram && !strcmp(attr, "hguides")) { int len = diagram->guides.nhguides; PyObject *ret = PyTuple_New(len); int i; for (i = 0; i < len; i++) PyTuple_SetItem(ret, i, PyFloat_FromDouble(diagram->guides.hguides[i])); return ret; } else if (diagram && !strcmp(attr, "vguides")) { int len = diagram->guides.nvguides; PyObject *ret = PyTuple_New(len); int i; for (i = 0; i < len; i++) PyTuple_SetItem(ret, i, PyFloat_FromDouble(diagram->guides.vguides[i])); return ret; } else if (!strcmp(attr, "layers")) { guint i, len = self->data->layers->len; PyObject *ret = PyTuple_New(len); for (i = 0; i < len; i++) PyTuple_SetItem(ret, i, PyDiaLayer_New( g_ptr_array_index(self->data->layers, i))); return ret; } else if (!strcmp(attr, "active_layer")) { return PyDiaLayer_New(self->data->active_layer); } else if (!strcmp(attr, "selected")) { PyObject *ret; GList *tmp; gint i; ret = PyTuple_New(g_list_length(self->data->selected)); for (i = 0, tmp = self->data->selected; tmp; i++, tmp = tmp->next) PyTuple_SetItem(ret, i, PyDiaObject_New((DiaObject *)tmp->data)); return ret; } return Py_FindMethod(PyDiaDiagramData_Methods, (PyObject *)self, attr); }