/* *NOT A CALLBACK* --> Must be called by inherited class (see aadldata.c) */ void aadlbox_load(ObjectNode obj_node, int version, DiaContext *ctx, Aadlbox *aadlbox) { AttributeNode attr; DataNode composite, data; Aadl_type type; gchar *declaration; Aadlport *port; ConnectionPoint *connection; int i, num; attr = object_find_attribute(obj_node, "aadlbox_ports"); composite = attribute_first_data(attr); num = attribute_num_data(attr); for (i=0; i<num; i++) { Point p; attr = composite_find_attribute(composite, "point"); data_point(attribute_first_data(attr), &p, ctx); attr = composite_find_attribute(composite, "port_type"); type = data_enum(attribute_first_data(attr), ctx); attr = composite_find_attribute(composite, "port_declaration"); declaration = data_string(attribute_first_data(attr), ctx); port = g_new0(Aadlport,1); port->handle = g_new0(Handle,1); port->type = type; port->declaration = declaration; aadlbox_add_port(aadlbox, &p, port); composite = data_next(composite); } attr = object_find_attribute(obj_node, "aadlbox_connections"); num = attribute_num_data(attr); data = attribute_first_data(attr); for (i=0; i<num; i++) { Point p; data_point(data, &p, ctx); connection = g_new0(ConnectionPoint,1); aadlbox_add_connection(aadlbox, &p, connection); data = data_next(data); } object_load_props(&aadlbox->element.object,obj_node, ctx); }
UMLFormalParameter * uml_formalparameter_read(DataNode composite) { UMLFormalParameter *param; AttributeNode attr_node; param = g_new(UMLFormalParameter, 1); param->name = NULL; attr_node = composite_find_attribute(composite, "name"); if (attr_node != NULL) param->name = data_string( attribute_first_data(attr_node) ); param->type = NULL; attr_node = composite_find_attribute(composite, "type"); if (attr_node != NULL) param->type = data_string( attribute_first_data(attr_node) ); return param; }
GdkPixbuf * data_pixbuf (DataNode data) { GdkPixbuf *pixbuf = NULL; GdkPixbufLoader *loader; GError *error = NULL; AttributeNode attr = composite_find_attribute(data, "data"); loader = gdk_pixbuf_loader_new (); if (loader) { xmlNode *node = attribute_first_data (attr); gint state = 0; guint save = 0; # define BUF_SIZE 4096 guchar buf[BUF_SIZE]; gchar *in = NULL; /* direct access, not involving another xmlStrDup/xmlFree */ gssize len = 0; if (node->children && xmlStrcmp (node->children->name, (const xmlChar*)"text") == 0) { in = (gchar *)node->children->content; len = strlen ((char *)in); } do { gsize step = g_base64_decode_step (in, len > BUF_SIZE ? BUF_SIZE : len, buf, &state, &save); if (!gdk_pixbuf_loader_write (loader, buf, step, &error)) break; in += BUF_SIZE; len -= BUF_SIZE; } while (len > 0); if (gdk_pixbuf_loader_close (loader, error ? NULL : &error)) { pixbuf = g_object_ref (gdk_pixbuf_loader_get_pixbuf (loader)); } else { message_warning (_("Failed to load image form diagram:\n%s"), error->message); g_error_free (error); } g_object_unref (loader); } # undef BUF_SIZE return pixbuf; }
Text * data_text(AttributeNode text_attr) { char *string = ""; Font *font; real height; Point pos = {0.0, 0.0}; Color col; Alignment align; AttributeNode attr; DataNode composite_node; Text *text; composite_node = attribute_first_data(text_attr); attr = composite_find_attribute(text_attr, "string"); if (attr != NULL) string = data_string(attribute_first_data(attr)); font = font_getfont("Courier"); attr = composite_find_attribute(text_attr, "font"); if (attr != NULL) font = data_font(attribute_first_data(attr)); height = 1.0; attr = composite_find_attribute(text_attr, "height"); if (attr != NULL) height = data_real(attribute_first_data(attr)); attr = composite_find_attribute(text_attr, "pos"); if (attr != NULL) data_point(attribute_first_data(attr), &pos); col = color_black; attr = composite_find_attribute(text_attr, "color"); if (attr != NULL) data_color(attribute_first_data(attr), &col); align = ALIGN_LEFT; attr = composite_find_attribute(text_attr, "alignment"); if (attr != NULL) align = data_enum(attribute_first_data(attr)); text = new_text(string, font, height, &pos, &col, align); if (string) free(string); return text; }
Text * data_text(AttributeNode text_attr, DiaContext *ctx) { char *string = NULL; DiaFont *font; real height; Point pos = {0.0, 0.0}; Color col; Alignment align; AttributeNode attr; Text *text; attr = composite_find_attribute(text_attr, "string"); if (attr != NULL) string = data_string(attribute_first_data(attr), ctx); height = 1.0; attr = composite_find_attribute(text_attr, "height"); if (attr != NULL) height = data_real(attribute_first_data(attr), ctx); attr = composite_find_attribute(text_attr, "font"); if (attr != NULL) { font = data_font(attribute_first_data(attr), ctx); } else { font = dia_font_new_from_style(DIA_FONT_SANS,1.0); } attr = composite_find_attribute(text_attr, "pos"); if (attr != NULL) data_point(attribute_first_data(attr), &pos, ctx); col = color_black; attr = composite_find_attribute(text_attr, "color"); if (attr != NULL) data_color(attribute_first_data(attr), &col, ctx); align = ALIGN_LEFT; attr = composite_find_attribute(text_attr, "alignment"); if (attr != NULL) align = data_enum(attribute_first_data(attr), ctx); text = new_text(string ? string : "", font, height, &pos, &col, align); if (font) dia_font_unref(font); if (string) g_free(string); return text; }
UMLAttribute * uml_attribute_read(DataNode composite) { UMLAttribute *attr; AttributeNode attr_node; attr = g_new(UMLAttribute, 1); attr->name = NULL; attr_node = composite_find_attribute(composite, "name"); if (attr_node != NULL) attr->name = data_string( attribute_first_data(attr_node) ); attr->type = NULL; attr_node = composite_find_attribute(composite, "type"); if (attr_node != NULL) attr->type = data_string( attribute_first_data(attr_node) ); attr->value = NULL; attr_node = composite_find_attribute(composite, "value"); if (attr_node != NULL) attr->value = data_string( attribute_first_data(attr_node) ); attr->visibility = FALSE; attr_node = composite_find_attribute(composite, "visibility"); if (attr_node != NULL) attr->visibility = data_enum( attribute_first_data(attr_node) ); attr->abstract = FALSE; attr_node = composite_find_attribute(composite, "abstract"); if (attr_node != NULL) attr->abstract = data_boolean( attribute_first_data(attr_node) ); attr->class_scope = FALSE; attr_node = composite_find_attribute(composite, "class_scope"); if (attr_node != NULL) attr->class_scope = data_boolean( attribute_first_data(attr_node) ); attr->left_connection = NULL; attr->right_connection = NULL; return attr; }
UMLOperation * uml_operation_read(DataNode composite) { UMLOperation *op; UMLParameter *param; AttributeNode attr_node; AttributeNode attr_node2; DataNode composite2; int i, num; op = g_new(UMLOperation, 1); op->name = NULL; attr_node = composite_find_attribute(composite, "name"); if (attr_node != NULL) op->name = data_string( attribute_first_data(attr_node) ); op->type = NULL; attr_node = composite_find_attribute(composite, "type"); if (attr_node != NULL) op->type = data_string( attribute_first_data(attr_node) ); op->visibility = FALSE; attr_node = composite_find_attribute(composite, "visibility"); if (attr_node != NULL) op->visibility = data_enum( attribute_first_data(attr_node) ); op->abstract = FALSE; attr_node = composite_find_attribute(composite, "abstract"); if (attr_node != NULL) op->abstract = data_boolean( attribute_first_data(attr_node) ); op->class_scope = FALSE; attr_node = composite_find_attribute(composite, "class_scope"); if (attr_node != NULL) op->class_scope = data_boolean( attribute_first_data(attr_node) ); op->parameters = NULL; attr_node2 = composite_find_attribute(composite, "parameters"); num = attribute_num_data(attr_node2); composite2 = attribute_first_data(attr_node2); for (i=0;i<num;i++) { param = g_new(UMLParameter, 1); param->name = NULL; attr_node = composite_find_attribute(composite2, "name"); if (attr_node != NULL) param->name = data_string( attribute_first_data(attr_node) ); param->type = NULL; attr_node = composite_find_attribute(composite2, "type"); if (attr_node != NULL) param->type = data_string( attribute_first_data(attr_node) ); param->value = NULL; attr_node = composite_find_attribute(composite2, "value"); if (attr_node != NULL) param->value = data_string( attribute_first_data(attr_node) ); param->kind = UML_UNDEF_KIND; attr_node = composite_find_attribute(composite2, "kind"); if (attr_node != NULL) param->kind = data_enum( attribute_first_data(attr_node) ); op->parameters = g_list_append(op->parameters, param); composite2 = data_next(composite2); } op->left_connection = NULL; op->right_connection = NULL; return op; }
static DiaObject * association_load(ObjectNode obj_node, int version, const char *filename) { Association *assoc; AttributeNode attr; DataNode composite; OrthConn *orth; DiaObject *obj; int i; /* first calls our _create() method */ obj = object_load_using_properties(&association_type, obj_node, version, filename); assoc = (Association *)obj; orth = &assoc->orth; /* ... butnot orthconn_load() */ if (version < 1) orth->autorouting = FALSE; if (version < 2) { /* vesrion 1 used to name it differently */ attr = object_find_attribute(obj_node, "autorouting"); if (attr != NULL) orth->autorouting = data_boolean(attribute_first_data(attr)); attr = object_find_attribute(obj_node, "ends"); composite = attribute_first_data(attr); for (i=0;i<2;i++) { assoc->end[i].role = NULL; attr = composite_find_attribute(composite, "role"); if (attr != NULL) { assoc->end[i].role = data_string(attribute_first_data(attr)); } if ( assoc->end[i].role != NULL && 0 == strcmp(assoc->end[i].role, "")) { g_free(assoc->end[i].role); assoc->end[i].role = NULL; } assoc->end[i].multiplicity = NULL; attr = composite_find_attribute(composite, "multiplicity"); if (attr != NULL) { assoc->end[i].multiplicity = data_string(attribute_first_data(attr)); } if ( assoc->end[i].multiplicity != NULL && 0 == strcmp(assoc->end[i].multiplicity, "")) { g_free(assoc->end[i].multiplicity); assoc->end[i].multiplicity = NULL; } assoc->end[i].arrow = FALSE; attr = composite_find_attribute(composite, "arrow"); if (attr != NULL) assoc->end[i].arrow = data_boolean(attribute_first_data(attr)); assoc->end[i].aggregate = AGGREGATE_NONE; attr = composite_find_attribute(composite, "aggregate"); if (attr != NULL) assoc->end[i].aggregate = data_enum(attribute_first_data(attr)); assoc->end[i].visibility = FALSE; attr = composite_find_attribute(composite, "visibility"); if (attr != NULL) assoc->end[i].visibility = data_enum( attribute_first_data(attr) ); assoc->end[i].text_width = 0.0; if (assoc->end[i].role != NULL) { assoc->end[i].text_width = dia_font_string_width(assoc->end[i].role, assoc_font, ASSOCIATION_FONTHEIGHT); } if (assoc->end[i].multiplicity != NULL) { assoc->end[i].text_width = MAX(assoc->end[i].text_width, dia_font_string_width(assoc->end[i].multiplicity, assoc_font, ASSOCIATION_FONTHEIGHT) ); } composite = data_next(composite); } /* derive new members state from ends */ assoc->show_direction = (assoc->direction != ASSOC_NODIR); if (assoc->end[0].aggregate == AGGREGATE_NORMAL) { assoc->assoc_type = AGGREGATE_NORMAL; assoc->direction = ASSOC_RIGHT; } else if (assoc->end[0].aggregate == AGGREGATE_COMPOSITION) { assoc->assoc_type = AGGREGATE_COMPOSITION; assoc->direction = ASSOC_RIGHT; } else if (assoc->end[1].aggregate == AGGREGATE_NORMAL) { assoc->assoc_type = AGGREGATE_NORMAL; assoc->direction = ASSOC_LEFT; } else if (assoc->end[1].aggregate == AGGREGATE_COMPOSITION) { assoc->assoc_type = AGGREGATE_COMPOSITION; assoc->direction = ASSOC_LEFT; } } /* version < 2 */ association_set_state(assoc, association_get_state(assoc)); return &assoc->orth.object; }