static Object * implements_load(ObjectNode obj_node, int version, const char *filename) { Implements *implements; AttributeNode attr; Connection *conn; Object *obj; if (implements_font == NULL) implements_font = font_getfont("Courier"); implements = g_malloc(sizeof(Implements)); conn = &implements->connection; obj = (Object *) implements; obj->type = &implements_type; obj->ops = &implements_ops; connection_load(conn, obj_node); connection_init(conn, 4, 0); implements->circle_diameter = 1.0; attr = object_find_attribute(obj_node, "diameter"); if (attr != NULL) implements->circle_diameter = data_real(attribute_first_data(attr)); implements->text = NULL; attr = object_find_attribute(obj_node, "text"); if (attr != NULL) implements->text = data_string(attribute_first_data(attr)); attr = object_find_attribute(obj_node, "text_pos"); if (attr != NULL) data_point(attribute_first_data(attr), &implements->text_pos); implements->text_width = font_string_width(implements->text, implements_font, IMPLEMENTS_FONTHEIGHT); implements->text_handle.id = HANDLE_MOVE_TEXT; implements->text_handle.type = HANDLE_MINOR_CONTROL; implements->text_handle.connect_type = HANDLE_NONCONNECTABLE; implements->text_handle.connected_to = NULL; obj->handles[2] = &implements->text_handle; implements->circle_handle.id = HANDLE_CIRCLE_SIZE; implements->circle_handle.type = HANDLE_MINOR_CONTROL; implements->circle_handle.connect_type = HANDLE_NONCONNECTABLE; implements->circle_handle.connected_to = NULL; obj->handles[3] = &implements->circle_handle; implements->properties_dialog = NULL; implements_update_data(implements); return (Object *)implements; }
static DiaObject * bus_load(ObjectNode obj_node, int version, const char *filename) { Bus *bus; Connection *conn; LineBBExtras *extra; DiaObject *obj; AttributeNode attr; DataNode data; int i; bus = g_malloc0(sizeof(Bus)); conn = &bus->connection; obj = &conn->object; extra = &conn->extra_spacing; obj->type = &bus_type; obj->ops = &bus_ops; connection_load(conn, obj_node); attr = object_find_attribute(obj_node, "bus_handles"); bus->num_handles = 0; if (attr != NULL) bus->num_handles = attribute_num_data(attr); connection_init(conn, 2 + bus->num_handles, 0); data = attribute_first_data(attr); bus->handles = g_malloc(sizeof(Handle *)*bus->num_handles); bus->parallel_points = g_malloc(sizeof(Point)*bus->num_handles); for (i=0;i<bus->num_handles;i++) { bus->handles[i] = g_new0(Handle,1); bus->handles[i]->id = HANDLE_BUS; bus->handles[i]->type = HANDLE_MINOR_CONTROL; bus->handles[i]->connect_type = HANDLE_CONNECTABLE_NOBREAK; bus->handles[i]->connected_to = NULL; data_point(data, &bus->handles[i]->pos); obj->handles[2+i] = bus->handles[i]; data = data_next(data); } bus->line_color = color_black; attr = object_find_attribute(obj_node, "line_color"); if (attr != NULL) data_color(attribute_first_data(attr), &bus->line_color); extra->start_trans = extra->end_trans = extra->start_long = extra->end_long = LINE_WIDTH/2.0; bus_update_data(bus); return &bus->connection.object; }
static DiaObject * flow_load(ObjectNode obj_node, int version, DiaContext *ctx) { Flow *flow; AttributeNode attr; Connection *conn; DiaObject *obj; LineBBExtras *extra; flow = g_malloc0(sizeof(Flow)); conn = &flow->connection; obj = &conn->object; extra = &conn->extra_spacing; obj->type = &flow_type; obj->ops = &flow_ops; connection_load(conn, obj_node, ctx); connection_init(conn, 3, 0); flow->text = NULL; attr = object_find_attribute(obj_node, "text"); if (attr != NULL) flow->text = data_text(attribute_first_data(attr), ctx); else { /* pathologic */ DiaFont *font = dia_font_new_from_style(DIA_FONT_SANS, FLOW_FONTHEIGHT); flow->text = new_text("", font, FLOW_FONTHEIGHT, &obj->position, &color_black, ALIGN_CENTER); dia_font_unref(font); } attr = object_find_attribute(obj_node, "type"); if (attr != NULL) flow->type = (FlowType)data_int(attribute_first_data(attr), ctx); flow->text_handle.id = HANDLE_MOVE_TEXT; flow->text_handle.type = HANDLE_MINOR_CONTROL; flow->text_handle.connect_type = HANDLE_NONCONNECTABLE; flow->text_handle.connected_to = NULL; flow->text_handle.pos = flow->text->position; obj->handles[2] = &flow->text_handle; extra->start_long = extra->end_long = extra->start_trans = FLOW_WIDTH/2.0; extra->end_trans = MAX(FLOW_WIDTH, FLOW_ARROWLEN) / 2.0; flow->textpos = flow->text->position; flow_update_data(flow); return &flow->connection.object; }
static Object * message_load(ObjectNode obj_node, int version, const char *filename) { Message *message; AttributeNode attr; Connection *conn; Object *obj; if (message_font == NULL) message_font = font_getfont("Helvetica"); message = g_malloc(sizeof(Message)); conn = &message->connection; obj = (Object *) message; obj->type = &message_type; obj->ops = &message_ops; connection_load(conn, obj_node); connection_init(conn, 3, 0); message->text = NULL; attr = object_find_attribute(obj_node, "text"); if (attr != NULL) message->text = data_string(attribute_first_data(attr)); attr = object_find_attribute(obj_node, "text_pos"); if (attr != NULL) data_point(attribute_first_data(attr), &message->text_pos); attr = object_find_attribute(obj_node, "type"); if (attr != NULL) message->type = (MessageType)data_int(attribute_first_data(attr)); if (message->text) message->text_width = font_string_width(message->text, message_font, MESSAGE_FONTHEIGHT); else message->text_width = 0; message->text_handle.id = HANDLE_MOVE_TEXT; message->text_handle.type = HANDLE_MINOR_CONTROL; message->text_handle.connect_type = HANDLE_NONCONNECTABLE; message->text_handle.connected_to = NULL; obj->handles[2] = &message->text_handle; message_update_data(message); return (Object *)message; }
static Object * constraint_load(ObjectNode obj_node, int version, const char *filename) { Constraint *constraint; AttributeNode attr; Connection *conn; Object *obj; if (constraint_font == NULL) constraint_font = font_getfont("Courier"); constraint = g_malloc(sizeof(Constraint)); conn = &constraint->connection; obj = (Object *) constraint; obj->type = &constraint_type; obj->ops = &constraint_ops; connection_load(conn, obj_node); connection_init(conn, 3, 0); constraint->text = NULL; attr = object_find_attribute(obj_node, "text"); if (attr != NULL) constraint->text = data_string(attribute_first_data(attr)); attr = object_find_attribute(obj_node, "text_pos"); if (attr != NULL) data_point(attribute_first_data(attr), &constraint->text_pos); constraint->text_width = font_string_width(constraint->text, constraint_font, CONSTRAINT_FONTHEIGHT); constraint->text_handle.id = HANDLE_MOVE_TEXT; constraint->text_handle.type = HANDLE_MINOR_CONTROL; constraint->text_handle.connect_type = HANDLE_NONCONNECTABLE; constraint->text_handle.connected_to = NULL; obj->handles[2] = &constraint->text_handle; constraint->properties_dialog = NULL; constraint_update_data(constraint); return (Object *)constraint; }
static DiaObject * wanlink_load(ObjectNode obj_node, int version,DiaContext *ctx) { WanLink *wanlink; Connection *conn; DiaObject *obj; AttributeNode attr; DataNode data; wanlink = g_malloc0(sizeof(WanLink)); conn = &wanlink->connection; obj = (DiaObject *) wanlink; obj->type = &wanlink_type; obj->ops = &wanlink_ops; connection_load(conn, obj_node, ctx); connection_init(conn, 2, 0); attr = object_find_attribute(obj_node, "width"); if (attr != NULL) { data = attribute_first_data(attr); wanlink->width = data_real(data, ctx); } wanlink->line_color = color_black; attr = object_find_attribute(obj_node, "line_color"); if (attr != NULL) data_color(attribute_first_data(attr), &wanlink->line_color, ctx); /* both colors where black at the time this was hardcoded ... */ wanlink->fill_color = color_black; attr = object_find_attribute(obj_node, "fill_color"); if (attr != NULL) data_color(attribute_first_data(attr), &wanlink->fill_color, ctx); wanlink_update_data (wanlink); return obj; }
static Object * arc_load(ObjectNode obj_node, int version, const char *filename) { Arc *arc; Connection *conn; Object *obj; AttributeNode attr; arc = g_malloc(sizeof(Arc)); conn = &arc->connection; obj = (Object *) arc; obj->type = &arc_type;; obj->ops = &arc_ops; connection_load(conn, obj_node); arc->arc_color = color_black; attr = object_find_attribute(obj_node, "arc_color"); if (attr != NULL) data_color(attribute_first_data(attr), &arc->arc_color); arc->curve_distance = 0.1; attr = object_find_attribute(obj_node, "curve_distance"); if (attr != NULL) arc->curve_distance = data_real(attribute_first_data(attr)); arc->line_width = 0.1; attr = object_find_attribute(obj_node, "line_width"); if (attr != NULL) arc->line_width = data_real(attribute_first_data(attr)); arc->line_style = LINESTYLE_SOLID; attr = object_find_attribute(obj_node, "line_style"); if (attr != NULL) arc->line_style = data_enum(attribute_first_data(attr)); arc->dashlength = DEFAULT_LINESTYLE_DASHLEN; attr = object_find_attribute(obj_node, "dashlength"); if (attr != NULL) arc->dashlength = data_real(attribute_first_data(attr)); arc->start_arrow.type = ARROW_NONE; arc->start_arrow.length = 0.8; arc->start_arrow.width = 0.8; attr = object_find_attribute(obj_node, "start_arrow"); if (attr != NULL) arc->start_arrow.type = data_enum(attribute_first_data(attr)); attr = object_find_attribute(obj_node, "start_arrow_length"); if (attr != NULL) arc->start_arrow.length = data_real(attribute_first_data(attr)); attr = object_find_attribute(obj_node, "start_arrow_width"); if (attr != NULL) arc->start_arrow.width = data_real(attribute_first_data(attr)); arc->end_arrow.type = ARROW_NONE; arc->end_arrow.length = 0.8; arc->end_arrow.width = 0.8; attr = object_find_attribute(obj_node, "end_arrow"); if (attr != NULL) arc->end_arrow.type = data_enum(attribute_first_data(attr)); attr = object_find_attribute(obj_node, "end_arrow_length"); if (attr != NULL) arc->end_arrow.length = data_real(attribute_first_data(attr)); attr = object_find_attribute(obj_node, "end_arrow_width"); if (attr != NULL) arc->end_arrow.width = data_real(attribute_first_data(attr)); connection_init(conn, 3, 0); obj->handles[2] = &arc->middle_handle; arc->middle_handle.id = HANDLE_MIDDLE; arc->middle_handle.type = HANDLE_MINOR_CONTROL; arc->middle_handle.connect_type = HANDLE_NONCONNECTABLE; arc->middle_handle.connected_to = NULL; arc_update_data(arc); return (Object *)arc; }
static DiaObject * line_load(ObjectNode obj_node, int version, DiaContext *ctx) { Line *line; Connection *conn; DiaObject *obj; AttributeNode attr; line = g_malloc0(sizeof(Line)); conn = &line->connection; obj = &conn->object; obj->type = &line_type; obj->ops = &line_ops; connection_load(conn, obj_node, ctx); line->line_color = color_black; attr = object_find_attribute(obj_node, "line_color"); if (attr != NULL) data_color(attribute_first_data(attr), &line->line_color, ctx); line->line_width = 0.1; attr = object_find_attribute(obj_node, PROP_STDNAME_LINE_WIDTH); if (attr != NULL) line->line_width = data_real(attribute_first_data(attr), ctx); line->line_style = LINESTYLE_SOLID; attr = object_find_attribute(obj_node, "line_style"); if (attr != NULL) line->line_style = data_enum(attribute_first_data(attr), ctx); line->line_caps = LINECAPS_BUTT; attr = object_find_attribute(obj_node, "line_caps"); if (attr != NULL) line->line_caps = data_enum(attribute_first_data(attr), ctx); load_arrow(obj_node, &line->start_arrow, "start_arrow", "start_arrow_length", "start_arrow_width", ctx); load_arrow(obj_node, &line->end_arrow, "end_arrow", "end_arrow_length", "end_arrow_width", ctx); line->absolute_start_gap = 0.0; attr = object_find_attribute(obj_node, "absolute_start_gap"); if (attr != NULL) line->absolute_start_gap = data_real(attribute_first_data(attr), ctx); line->absolute_end_gap = 0.0; attr = object_find_attribute(obj_node, "absolute_end_gap"); if (attr != NULL) line->absolute_end_gap = data_real(attribute_first_data(attr), ctx); line->dashlength = DEFAULT_LINESTYLE_DASHLEN; attr = object_find_attribute(obj_node, "dashlength"); if (attr != NULL) line->dashlength = data_real(attribute_first_data(attr), ctx); connection_init(conn, 2, 0); line->cpl = connpointline_load(obj,obj_node,"numcp",1,NULL, ctx); line_update_data(line); return &line->connection.object; }
static Object * line_load(ObjectNode obj_node, int version, const char *filename) { Line *line; Connection *conn; Object *obj; AttributeNode attr; line = g_malloc(sizeof(Line)); conn = &line->connection; obj = (Object *) line; obj->type = &line_type; obj->ops = &line_ops; connection_load(conn, obj_node); line->line_color = color_black; attr = object_find_attribute(obj_node, "line_color"); if (attr != NULL) data_color(attribute_first_data(attr), &line->line_color); line->line_width = 0.1; attr = object_find_attribute(obj_node, "line_width"); if (attr != NULL) line->line_width = data_real(attribute_first_data(attr)); line->line_style = LINESTYLE_SOLID; attr = object_find_attribute(obj_node, "line_style"); if (attr != NULL) line->line_style = data_enum(attribute_first_data(attr)); line->start_arrow.type = ARROW_NONE; line->start_arrow.length = 0.8; line->start_arrow.width = 0.8; attr = object_find_attribute(obj_node, "start_arrow"); if (attr != NULL) line->start_arrow.type = data_enum(attribute_first_data(attr)); attr = object_find_attribute(obj_node, "start_arrow_length"); if (attr != NULL) line->start_arrow.length = data_real(attribute_first_data(attr)); attr = object_find_attribute(obj_node, "start_arrow_width"); if (attr != NULL) line->start_arrow.width = data_real(attribute_first_data(attr)); line->end_arrow.type = ARROW_NONE; line->end_arrow.length = 0.8; line->end_arrow.width = 0.8; attr = object_find_attribute(obj_node, "end_arrow"); if (attr != NULL) line->end_arrow.type = data_enum(attribute_first_data(attr)); attr = object_find_attribute(obj_node, "end_arrow_length"); if (attr != NULL) line->end_arrow.length = data_real(attribute_first_data(attr)); attr = object_find_attribute(obj_node, "end_arrow_width"); if (attr != NULL) line->end_arrow.width = data_real(attribute_first_data(attr)); line->dashlength = DEFAULT_LINESTYLE_DASHLEN; attr = object_find_attribute(obj_node, "dashlength"); if (attr != NULL) line->dashlength = data_real(attribute_first_data(attr)); connection_init(conn, 2, 1); obj->connections[0] = &line->middle_point; line->middle_point.object = obj; line->middle_point.connected = NULL; line_update_data(line); return (Object *)line; }
static DiaObject * arc_load(ObjectNode obj_node, int version,DiaContext *ctx) { Arc *arc; Connection *conn; DiaObject *obj; AttributeNode attr; arc = g_malloc0(sizeof(Arc)); conn = &arc->connection; obj = &conn->object; obj->type = &arc_type; obj->ops = &arc_ops; connection_load(conn, obj_node, ctx); arc->arc_color = color_black; attr = object_find_attribute(obj_node, "arc_color"); if (attr != NULL) data_color(attribute_first_data(attr), &arc->arc_color, ctx); arc->curve_distance = 0.1; attr = object_find_attribute(obj_node, "curve_distance"); if (attr != NULL) arc->curve_distance = data_real(attribute_first_data(attr), ctx); arc->line_width = 0.1; attr = object_find_attribute(obj_node, PROP_STDNAME_LINE_WIDTH); if (attr != NULL) arc->line_width = data_real(attribute_first_data(attr), ctx); arc->line_style = LINESTYLE_SOLID; attr = object_find_attribute(obj_node, "line_style"); if (attr != NULL) arc->line_style = data_enum(attribute_first_data(attr), ctx); arc->dashlength = DEFAULT_LINESTYLE_DASHLEN; attr = object_find_attribute(obj_node, "dashlength"); if (attr != NULL) arc->dashlength = data_real(attribute_first_data(attr), ctx); arc->line_caps = LINECAPS_BUTT; attr = object_find_attribute(obj_node, "line_caps"); if (attr != NULL) arc->line_caps = data_enum(attribute_first_data(attr), ctx); load_arrow(obj_node, &arc->start_arrow, "start_arrow", "start_arrow_length", "start_arrow_width", ctx); load_arrow(obj_node, &arc->end_arrow, "end_arrow", "end_arrow_length", "end_arrow_width", ctx); connection_init(conn, 4, 0); _arc_setup_handles (arc); /* older versions did not prohibit everything reduced to a single point * and afterwards failed on all the calculations producing nan. */ if (distance_point_point (&arc->connection.endpoints[0], &arc->connection.endpoints[1]) < 0.02) { arc->curve_distance = 0.0; arc->connection.endpoints[0].x -= 0.01; arc->connection.endpoints[1].x += 0.01; arc_update_handles (arc); } arc_update_data(arc); return &arc->connection.object; }