PackageCanvas * PackageCanvas::read(char * & st, UmlCanvas * canvas, char * k) { if (!strcmp(k, "packagecanvas_ref")) return ((PackageCanvas *) dict_get(read_id(st), "packagecanvas", canvas)); else if (!strcmp(k, "packagecanvas")) { int id = read_id(st); BrowserNode * br = BrowserPackage::read_ref(st); UmlColor color = UmlDefaultColor; Uml3States in_tab = UmlDefaultState; ShowContextMode context = DefaultShowContextMode; Uml3States show_stereotype_properties = UmlDefaultState;; k = read_keyword(st); if (!strcmp(k, "name_in_tab")) { in_tab = state(read_keyword(st)); k = read_keyword(st); } if (!strcmp(k, "show_context_mode")) { context = context_mode(read_keyword(st)); k = read_keyword(st); } if (!strcmp(k, "show_stereotype_properties")) { show_stereotype_properties = state(read_keyword(st)); k = read_keyword(st); } read_color(st, "color", color, k); if (strcmp(k, "xyzwh")) wrong_keyword(k, "xyzwh"); int x = (int) read_double(st); PackageCanvas * result = new PackageCanvas(br, canvas, x, (int) read_double(st), id); read_zwh(st, result); if (read_file_format() >= 58) { k = read_keyword(st); result->read_stereotype_property(st, k); // updates k if (strcmp(k, "end")) wrong_keyword(k, "end"); } result->name_in_tab = in_tab; result->show_context_mode = context; result->show_stereotype_properties = show_stereotype_properties; result->itscolor = color; result->check_size(); result->set_center100(); result->show(); result->check_stereotypeproperties(); return result; } else return 0; }
AssocContainCanvas * AssocContainCanvas::read(char * & st, UmlCanvas * canvas, char * k) { if (!strcmp(k, "containcanvas_ref")) return ((AssocContainCanvas *) dict_get(read_id(st), "contain canvas", canvas)); else if (!strcmp(k, "containcanvas")) { int id = read_id(st); LineGeometry geo; bool fixed; k = read_keyword(st); // may read id if (!strcmp(k, "geometry")) { geo = line_geometry(read_keyword(st)); k = read_keyword(st); if (! strcmp(k, "unfixed")) { k = read_keyword(st); fixed = FALSE; } else fixed = TRUE; } else { geo = NoGeometry; fixed = FALSE; } float dbegin; float dend; if (! strcmp(k, "decenter_begin")) { dbegin = read_double(st) / 1000; k = read_keyword(st); } else dbegin = -1; if (! strcmp(k, "decenter_end")) { dend = read_double(st) / 1000; k = read_keyword(st); } else dend = -1; unread_keyword(k, st); AssocContainCanvas * r = (AssocContainCanvas *) read_list(st, canvas, UmlContain, geo, fixed, dbegin, dend, id, &make); // remove association between components available in the // 2.0 deployment diagrams if (r->begin->type() == UmlComponent) Undefined.append(r); else if (read_file_format() == 30) // to remove redondant transitions made by release 2.22 RelsToCheck.append(r); return r; } else return 0; }
DeploymentNodeCanvas * DeploymentNodeCanvas::read(char * & st, UmlCanvas * canvas, char * k) { if (!strcmp(k, "deploymentnodecanvas_ref")) return ((DeploymentNodeCanvas *) dict_get(read_id(st), "deploymentnodecanvas", canvas)); else if (!strcmp(k, "deploymentnodecanvas")) { int id = read_id(st); BrowserNode * br = BrowserDeploymentNode::read_ref(st); QString iname; Uml3States write_horizontally = UmlDefaultState; Uml3States show_stereotype_properties = UmlDefaultState; k = read_keyword(st); if (!strcmp(k, "name")) { iname = read_string(st); k = read_keyword(st); } if (!strcmp(k, "write_horizontally") || !strcmp(k, "write_horizontaly")) { write_horizontally = state(read_keyword(st)); k = read_keyword(st); } if (!strcmp(k, "show_stereotype_properties")) { show_stereotype_properties = state(read_keyword(st)); k = read_keyword(st); } UmlColor color = UmlDefaultColor; read_color(st, "color", color, k); if (strcmp(k, "xyzwh")) wrong_keyword(k, "xyzwh"); int x = (int) read_double(st); DeploymentNodeCanvas * result = new DeploymentNodeCanvas(br, canvas, x, (int) read_double(st), id); read_zwh(st, result); if (read_file_format() >= 58) { k = read_keyword(st); result->read_stereotype_property(st, k); // updates k if (strcmp(k, "end")) wrong_keyword(k, "end"); } result->iname = iname; result->write_horizontally = write_horizontally; result->show_stereotype_properties = show_stereotype_properties; result->itscolor = color; result->check_size(); result->set_center100(); result->show(); result->check_stereotypeproperties(); return result; } else return 0; }
ArtifactCanvas * ArtifactCanvas::read(char * & st, UmlCanvas * canvas, char * k) { if (!strcmp(k, "artifactcanvas_ref") || ((read_file_format() < 20) && !strcmp(k, "componentcanvas_ref"))) return ((ArtifactCanvas *) dict_get(read_id(st), "artifactcanvas", canvas)); else if (!strcmp(k, "artifactcanvas") || ((read_file_format() < 20) && !strcmp(k, "componentcanvas"))) { int id = read_id(st); BrowserArtifact * br = BrowserArtifact::read_ref(st, read_keyword(st)); ArtifactCanvas * result = new ArtifactCanvas(canvas, id); result->browser_node = br; connect(br->get_data(), SIGNAL(changed()), result, SLOT(modified())); connect(br->get_data(), SIGNAL(deleted()), result, SLOT(deleted())); k = read_keyword(st); read_color(st, "color", result->itscolor, k); // updates k if (strcmp(k, "xyz")) wrong_keyword(k, "xyz"); read_xyz(st, result); if (read_file_format() >= 58) { k = read_keyword(st); result->read_stereotype_property(st, k); // updates k if (strcmp(k, "end")) wrong_keyword(k, "end"); } result->compute_size(); result->set_center100(); result->show(); result->check_stereotypeproperties(); return result; } else return 0; }
UcUseCaseCanvas * UcUseCaseCanvas::read(char * & st, UmlCanvas * canvas, char * k) { if (!strcmp(k, "usecasecanvas_ref")) return ((UcUseCaseCanvas *) dict_get(read_id(st), "usecasecanvas", canvas)); else if (!strcmp(k, "usecasecanvas")) { int id = read_id(st); BrowserNode * br = BrowserUseCase::read_ref(st); UmlColor color = UmlDefaultColor; k = read_keyword(st); read_color(st, "color", color, k); if (strcmp(k, "xyzwh")) wrong_keyword(k, "xyzwh"); int x = (int) read_double(st); UcUseCaseCanvas * result = new UcUseCaseCanvas(br, canvas, x, (int) read_double(st), id); result->itscolor = color; read_zwh(st, result); result->width_scale100 = result->width(); result->height_scale100 = result->height(); result->set_center100(); k = read_keyword(st); result->update_name(); read_xy(st, result->label); result->label->setZ(result->z() + 0.5); result->label->set_center100(); if (!strcmp(k, "label_xyz")) // old version read_double(st); else if (strcmp(k, "label_xy")) wrong_keyword(k, "label_xy/label_xyz"); if (read_file_format() >= 58) { k = read_keyword(st); result->read_stereotype_property(st, k); // updates k if (strcmp(k, "end")) wrong_keyword(k, "end"); } result->show(); result->check_stereotypeproperties(); return result; } else return 0; }
StateActionCanvas * StateActionCanvas::read(char * & st, UmlCanvas * canvas, char * k) { if (!strcmp(k, "stateactioncanvas_ref")) return ((StateActionCanvas *) dict_get(read_id(st), "stateactioncanvas", canvas)); else if (!strcmp(k, "stateactioncanvas")) { int id = read_id(st); BrowserStateAction * br = BrowserStateAction::read_ref(st); StateActionCanvas * result = new StateActionCanvas(canvas, id); result->browser_node = br; connect(br->get_data(), SIGNAL(changed()), result, SLOT(modified())); connect(br->get_data(), SIGNAL(deleted()), result, SLOT(deleted())); k = read_keyword(st); if (!strcmp(k, "language")) { result->language = drawing_language(read_keyword(st)); k = read_keyword(st); } if (!strcmp(k, "show_stereotype_properties")) { result->show_stereotype_properties = state(read_keyword(st)); k = read_keyword(st); } read_color(st, "color", result->itscolor, k); // updates k if (!strcmp(k, "xyzwh")) read_xyzwh(st, result); else wrong_keyword(k, "xyzwh"); if (read_file_format() >= 58) { k = read_keyword(st); result->read_stereotype_property(st, k); // updates k if (strcmp(k, "end")) wrong_keyword(k, "end"); } result->compute_size(); result->set_center100(); result->show(); result->check_stereotypeproperties(); return result; } else return 0; }
SdDurationCanvas * SdDurationCanvas::read_internal(char * & st, UmlCanvas * canvas, int id, SdDurationSupport * sp) { UmlColor color = UmlDefaultColor; bool coreg = FALSE; char * k = read_keyword(st); if (!strcmp(k, "coregion")) { coreg = TRUE; k = read_keyword(st); } read_color(st, "color", color, k); if (strcmp(k, "xyzwh")) wrong_keyword(k, "xyzwh"); int x = (int) read_double(st); int y = (int) read_double(st); double z = read_double(st); (void) read_double(st); // width not used to bypass old bug SdDurationCanvas * result = new SdDurationCanvas(canvas, sp, x, y, DURATION_WIDTH, (int) read_double(st), id, coreg); result->itscolor = color; result->setZ(z); result->update_hpos(); // in case the current font is not the original one result->set_center100(); result->show(); if (read_file_format() >= 48) { k = read_keyword(st); while (!strcmp(k, "overlappingdurationcanvas")) { (void) read_internal(st, canvas, read_id(st), result); k = read_keyword(st); } if (strcmp(k, "end")) wrong_keyword(k, "end"); } return result; }
FragmentCanvas * FragmentCanvas::read(char * & st, UmlCanvas * canvas, char * k) { if (!strcmp(k, "fragment_ref")) return (FragmentCanvas *) dict_get(read_id(st), "fragment", canvas); else if (!strcmp(k, "fragment")) { int id = read_id(st); FragmentCanvas * result = new FragmentCanvas(canvas, 0, 0, id); result->name = read_string(st); k = read_keyword(st); read_color(st, "color", result->itscolor, k); if (!strcmp(k, "refer")) { result->refer = BrowserDiagram::read_diagram_ref(st); connect(result->refer->get_data(), SIGNAL(changed()), result, SLOT(modified())); connect(result->refer->get_data(), SIGNAL(deleted()), result, SLOT(modified())); k = read_keyword(st); } if (! strcmp(k, "form")) { result->form = read_string(st); k = read_keyword(st); } if (strcmp(k, "xyzwh")) wrong_keyword(k, "xyzwh"); read_xyzwh(st, result); result->check_size(); result->width_scale100 = result->width(); result->height_scale100 = result->height(); result->set_center100(); result->show(); if (read_file_format() >= 28) { while (strcmp(k = read_keyword(st), "end")) result->separators.append(FragmentSeparatorCanvas::read(st, canvas, k, result)); } return result; } else return 0; }
void FormalParamData::read(char * & st) { read_keyword(st, "formal"); read_keyword(st, "name"); name = read_string(st); read_keyword(st, "type"); type = read_string(st); AType t1; t1.read(st, "default_value", "explicit_default_value"); set_default_value(t1.type, t1.explicit_type); if (read_file_format() >= 24) { AType t2; t2.read(st, "extends", "explicit_extends"); set_extends(t2.type, t2.explicit_type); } }
static int convert_file(struct arguments *args) { struct dvb_file *dvb_file = NULL; int ret; printf("Reading file %s\n", args->input_file); dvb_file = read_file_format(args->input_file, args->delsys, args->input_format); if (!dvb_file) { fprintf(stderr, "Error reading file %s\n", args->input_file); return -1; } printf("Writing file %s\n", args->output_file); ret = write_file_format(args->output_file, dvb_file, args->delsys, args->output_format); return ret; }
BundlerParserOutput read_bundler_out(const std::string &filename) { std::ifstream file; file.exceptions(std::ifstream::failbit | std::ifstream::badbit); file.open(filename); FileFormat format = read_file_format(file); ObjectCounts counts = read_object_counts(file); auto constraints = read_constraints(file, counts.constraints); auto cam_list = std::make_shared<CameraArray>(); read_cams(file, format, counts.cameras, *cam_list); auto point_list = std::make_shared<PointArray>(); read_points(file, format, counts.points, *point_list); file.close(); World world(cam_list, point_list, constraints); return BundlerParserOutput(std::move(world), format); }
ArrowJunctionCanvas * ArrowJunctionCanvas::read(char * & st, UmlCanvas * canvas, char * k) { if (!strcmp(k, "arrowjunctioncanvas")) { int id = read_id(st); BrowserClass * br = BrowserClass::read_ref(st); ArrowJunctionCanvas * result = new ArrowJunctionCanvas(canvas, 0, 0, br, id); read_keyword(st, "xyz"); read_xyz(st, result); result->set_center100(); if (read_file_format() >= 27) { read_keyword(st, "label_xy"); read_xy(st, result->label); result->label->set_center100(); } result->show(); return result; } else return 0; }
OdClassInstCanvas * OdClassInstCanvas::read(char * & st, UmlCanvas * canvas, char * k) { if (!strcmp(k, "classinstance_ref")) return ((OdClassInstCanvas *) dict_get(read_id(st), "classinstance", canvas)); else if (!strcmp(k, "classinstance")) { // old release int id = read_id(st); BrowserClass * cl = BrowserClass::read_ref(st); k = read_keyword(st); UmlColor co = UmlDefaultColor; read_color(st, "color", co, k); // updates k Uml3States ho; if (!strcmp(k, "write_horizontally") || !strcmp(k, "write_horizontaly")) { ho = state(read_keyword(st)); k = read_keyword(st); } else ho = UmlDefaultState; if (strcmp(k, "xyz")) wrong_keyword(k, "xyz"); int x = (int) read_double(st); int y = (int) read_double(st); double z = read_double(st); read_keyword(st, "name"); BrowserNode * parent = canvas->browser_diagram()->container(UmlClass); BrowserClassInstance * icl = // create a new one, don't look at already exising instances // contrarilly to the collaboration and sequence diagram // because of attributes & relations new BrowserClassInstance(read_string(st), cl, parent); OdClassInstCanvas * result = new OdClassInstCanvas(icl, canvas, x, y, id); result->setZ(z); result->itscolor = co; result->write_horizontally = ho; result->show_context_mode = noContext; k = read_keyword(st); if (!strcmp(k, "values")) ((ClassInstanceData *) icl->get_data())->read_attributes(st, k); // updates k else if (strcmp(k, "end") && strcmp(k, "xyz")) wrong_keyword(k, "end or xyz"); if (*k == 'x') read_xyz(st, result); result->compute_size(); result->set_center100(); result->show(); // to save new instance and diagram def result->package_modified(); canvas->browser_diagram()->modified(); return result; } else if (!strcmp(k, "classinstancecanvas")) { int id = read_id(st); BrowserClassInstance * icl = BrowserClassInstance::read_ref(st); read_keyword(st, "xyz"); int x = (int) read_double(st); OdClassInstCanvas * result = new OdClassInstCanvas(icl, canvas, x, (int) read_double(st), id); result->setZ(read_double(st)); result->ClassInstCanvas::read(st, k); if (read_file_format() < 74) result->show_context_mode = noContext; result->read_stereotype_property(st, k); // updates k if (strcmp(k, "end")) wrong_keyword(k, "end"); if (result->get_type() != 0) { // not a deleted instance result->compute_size(); result->set_center100(); result->show(); result->check_stereotypeproperties(); } return result; } else return 0; }
static int parse(struct arguments *args, struct dvb_v5_fe_parms *parms, char *channel, int *vpid, int *apid, int *sid) { struct dvb_file *dvb_file; struct dvb_entry *entry; int i; uint32_t sys; /* This is used only when reading old formats */ switch (parms->current_sys) { case SYS_DVBT: case SYS_DVBS: case SYS_DVBC_ANNEX_A: case SYS_ATSC: sys = parms->current_sys; break; case SYS_DVBC_ANNEX_C: sys = SYS_DVBC_ANNEX_A; break; case SYS_DVBC_ANNEX_B: sys = SYS_ATSC; break; case SYS_ISDBT: sys = SYS_DVBT; break; default: sys = SYS_UNDEFINED; break; } dvb_file = read_file_format(args->confname, sys, args->input_format); if (!dvb_file) return -2; for (entry = dvb_file->first_entry; entry != NULL; entry = entry->next) { if (!strcmp(entry->channel, channel)) break; if (entry->vchannel && !strcmp(entry->vchannel, channel)) break; } /* * Give a second shot, using a case insensitive seek */ if (!entry) { for (entry = dvb_file->first_entry; entry != NULL; entry = entry->next) { if (!strcasecmp(entry->channel, channel)) break; } } if (!entry) { ERROR("Can't find channel"); return -3; } if (entry->video_pid) { if (args->n_vpid < entry->video_pid_len) *vpid = entry->video_pid[args->n_vpid]; else *vpid = entry->video_pid[0]; } if (entry->audio_pid) { if (args->n_apid < entry->audio_pid_len) *apid = entry->audio_pid[args->n_apid]; else *apid = entry->audio_pid[0]; } if (entry->other_el_pid) { int i, type = -1; for (i = 0; i < entry->other_el_pid_len; i++) { if (type != entry->other_el_pid[i].type) { type = entry->other_el_pid[i].type; if (i) printf("\n"); printf("service has pid type %02x: ", type); } printf(" %d", entry->other_el_pid[i].pid); } printf("\n"); } *sid = entry->service_id; /* First of all, set the delivery system */ for (i = 0; i < entry->n_props; i++) if (entry->props[i].cmd == DTV_DELIVERY_SYSTEM) dvb_set_compat_delivery_system(parms, entry->props[i].u.data); /* Copy data into parms */ for (i = 0; i < entry->n_props; i++) { uint32_t data = entry->props[i].u.data; /* Don't change the delivery system */ if (entry->props[i].cmd == DTV_DELIVERY_SYSTEM) continue; dvb_fe_store_parm(parms, entry->props[i].cmd, data); if (parms->current_sys == SYS_ISDBT) { dvb_fe_store_parm(parms, DTV_ISDBT_PARTIAL_RECEPTION, 0); dvb_fe_store_parm(parms, DTV_ISDBT_SOUND_BROADCASTING, 0); dvb_fe_store_parm(parms, DTV_ISDBT_LAYER_ENABLED, 0x07); if (entry->props[i].cmd == DTV_CODE_RATE_HP) { dvb_fe_store_parm(parms, DTV_ISDBT_LAYERA_FEC, data); dvb_fe_store_parm(parms, DTV_ISDBT_LAYERB_FEC, data); dvb_fe_store_parm(parms, DTV_ISDBT_LAYERC_FEC, data); } else if (entry->props[i].cmd == DTV_MODULATION) { dvb_fe_store_parm(parms, DTV_ISDBT_LAYERA_MODULATION, data); dvb_fe_store_parm(parms, DTV_ISDBT_LAYERB_MODULATION, data); dvb_fe_store_parm(parms, DTV_ISDBT_LAYERC_MODULATION, data); } } if (parms->current_sys == SYS_ATSC && entry->props[i].cmd == DTV_MODULATION) { if (data != VSB_8 && data != VSB_16) dvb_fe_store_parm(parms, DTV_DELIVERY_SYSTEM, SYS_DVBC_ANNEX_B); } } #if 0 /* HACK to test the write file function */ write_dvb_file("dvb_channels.conf", dvb_file); #endif dvb_file_free(dvb_file); return 0; }
SimpleRelationCanvas * SimpleRelationCanvas::read(char *& st, UmlCanvas * canvas, char * k) { if (!strcmp(k, "simplerelationcanvas_ref")) return ((SimpleRelationCanvas *) dict_get(read_id(st), "simplerelationcanvas", canvas)); else if (!strcmp(k, "simplerelationcanvas")) { int id = read_id(st); BrowserSimpleRelation * br = BrowserSimpleRelation::read_ref(st); SimpleRelationData * rd = (SimpleRelationData *) br->get_data(); LineGeometry geo; bool fixed; k = read_keyword(st); if (! strcmp(k, "geometry")) { geo = line_geometry(read_keyword(st)); k = read_keyword(st); if (! strcmp(k, "unfixed")) { k = read_keyword(st); fixed = FALSE; } else fixed = TRUE; } else { geo = NoGeometry; fixed = FALSE; } float dbegin; float dend; if (! strcmp(k, "decenter_begin")) { dbegin = read_double(st) / 1000; k = read_keyword(st); } else dbegin = -1; if (! strcmp(k, "decenter_end")) { dend = read_double(st) / 1000; k = read_keyword(st); } else dend = -1; unread_keyword(k, st); read_keyword(st, "from"); read_keyword(st, "ref"); DiagramItem * bi = dict_get(read_id(st), "canvas", canvas); BrowserNode * b = rd->get_start_node(); UmlCode t = rd->get_type(); SimpleRelationCanvas * first = 0; SimpleRelationCanvas * result; LabelCanvas * stereotype; double z; for (;;) { read_keyword(st, "z"); z = read_double(st); k = read_keyword(st); if (!strcmp(k, "stereotype")) { (void) read_string(st); read_keyword(st, "xyz"); int x = (int) read_double(st); int y = (int) read_double(st); if ((rd == 0) || (*(rd->get_stereotype()) == 0)) { stereotype = 0; read_double(st); // z } else { QString s = toUnicode(rd->get_short_stereotype()); if (s[0] != '{') s = QString("<<") + s + ">>"; stereotype = new LabelCanvas(s, canvas, x, y); stereotype->setZ(read_double(st)); } k = read_keyword(st); } else stereotype = 0; if (strcmp(k, "to")) wrong_keyword(k, "to"); DiagramItem * di; if (strcmp(k = read_keyword(st), "ref")) { di = ArrowPointCanvas::read(st, canvas, k); if (di == 0) unknown_keyword(k); } else di = dict_get(read_id(st), "classcanvas", canvas); // do not give rd to not call update() result = new SimpleRelationCanvas(canvas, bi, di, b, t, id, dbegin, dend); result->geometry = geo; result->fixed_geometry = fixed; result->set_z(z); result->data = rd; connect(rd, SIGNAL(changed()), result, SLOT(modified())); connect(rd, SIGNAL(deleted()), result, SLOT(deleted())); if (first == 0) { first = result; if (read_file_format() == 30) // to remove redondant relation made by release 2.22 RelsToCheck.append(result); } if (stereotype != 0) (result->stereotype = stereotype)->show(); result->show(); if (di->type() != UmlArrowPoint) break; bi = di; read_keyword(st, "line"); id = read_id(st); } if (read_file_format() >= 58) { // stereotype property k = read_keyword(st); first->stereotypeproperties = StereotypePropertiesCanvas::read(st, canvas, k, first); if (first->stereotypeproperties != 0) k = read_keyword(st); if (strcmp(k, "end")) wrong_keyword(k, "end"); } // to add stereotype ... if needed first->update(FALSE); if (first != result) result->update(FALSE); first->check_stereotypeproperties(); // manage case where the relation is deleted but present in the browser if (result->data->get_start()->deletedp()) RelsToDel.append(result); else result->update_geometry(); return result; } else return 0; }
RelationData * RelationData::read(char *& st, char *& k, BrowserRelation *& unconsistent) { unconsistent = 0; RelationData * result; int id; if (!strcmp(k, "relation_ref")) { if ((result = all[id = read_id(st)]) == 0) result = new RelationData(UmlRelations/*!!*/, id); k = read_keyword(st); return result; } else if (!strcmp(k, "relation")) { if ((result = all[id = read_id(st)]) == 0) result = new RelationData(relation_type(read_keyword(st)), id); else if (result->type != UmlRelations) { // shared identifier result->set_unconsistent(); unconsistent = result->start; result = new RelationData(relation_type(read_keyword(st)), id); result->set_unconsistent(); } else { result->type = relation_type(read_keyword(st)); result->name = default_name(result->type); if (result->start != 0) { // Created by RelationData::read_ref() // invalidate start/end to not delete result // when start/end will be deleted result->start->invalidate(); result->end->invalidate(); } } k = read_keyword(st); if (!strcmp(k, "name")) { result->name = read_string(st); k = read_keyword(st); } result->BasicData::read(st, k); // updates k if (in_lib_import()) { result->original_id = id; if (! strcmp(k, "oid")) { // a sub lib is imported as a part of the imported lib (void) read_id(st); k = read_keyword(st); } } else if (! strcmp(k, "oid")) { result->original_id = read_id(st); k = read_keyword(st); } bool assoc = isa_association(result->type); if (strcmp(k, "a")) wrong_keyword(k, "a"); read_role(result->a, assoc, st, k, result); // updates k result->start = BrowserRelation::read_ref(st, k); read_keyword(st, "b"); if (!RelationData::uni_directional(result->type)) { read_role(result->b, assoc, st, k, result); // updates k result->end = BrowserRelation::read_ref(st, k); // 'end' may be read before 'start' : relation's type was unknown result->end->set_name(0); result->end->set_name(result->name); } else { k = read_keyword(st); if (!strcmp(k, "multiplicity")) { result->b.multiplicity = read_string(st); k = read_keyword(st); } else result->b.multiplicity = 0; if (strcmp(k, "parent")) wrong_keyword(k, "parent"); result->end_removed_from = BrowserClass::read_ref(st); result->b.uml_visibility = ((BrowserNode *) result->end_removed_from->parent())->get_visibility(UmlRelations); connect(result->end_removed_from->get_data(), SIGNAL(deleted()), result, SLOT(end_deleted())); result->end = 0; // manage old declarations switch (result->type) { case UmlRealize: case UmlGeneralisation: if (result->a.cpp_decl == "Generated") result->a.cpp_decl = "${type}"; if (result->a.java_decl == "Generated") result->a.java_decl = "${type}"; if (result->a.idl_decl == "Generated") result->a.idl_decl = "${type}"; break; case UmlDependency: if (!result->a.cpp_decl.isEmpty()) { if (result->stereotype == "friend") result->a.cpp_decl = "${type}"; else if ((result->a.cpp_decl == "Generated") || (result->a.cpp_decl == "${type}")) result->a.cpp_decl = "#include in header"; else if ((result->a.cpp_decl == "#include in source") && (read_file_format() < 56)) IncludeToHeaderIfExternal.append(result); } break; default: break; } } k = read_keyword(st); AType t; if (!strcmp(k, "association_type") || !strcmp(k, "association_explicit_type")) { t.read(st, "association_type", "association_explicit_type", k); result->set_association(t); k = read_keyword(st); } return result; } else return 0; }
void ClassData::read(char * & st, char * & k) { if (!strcmp(k, "abstract")) { is_abstract = TRUE; k = read_keyword(st); } else is_abstract = FALSE; if (!strcmp(k, "active")) { is_active = TRUE; k = read_keyword(st); } else is_active = FALSE; if (!strcmp(k, "visibility")) { uml_visibility = ::visibility(read_keyword(st)); k = read_keyword(st); } else { // old non nested class uml_visibility = UmlPackageVisibility; } if (!strcmp(k, "stereotype")) { set_stereotype(read_string(st)); if (!strcmp(stereotype, "typedef")) { AType t; t.read(st, "base_type", "explicit_base_type"); set_base_type(t); } k = read_keyword(st); } unsigned n, i; if (!strcmp(k, "nformals")) { n = read_unsigned(st); set_n_formalparams(n); for (i = 0; i != n; i += 1) formals[i].read(st); k = read_keyword(st); } else set_n_formalparams(0); if (!strcmp(k, "nactuals")) { n = read_unsigned(st); BrowserClass * cl = 0; for (i = 0; i != n; i += 1) { ActualParamData * actual = ActualParamData::read(st); actuals.append(actual); if (actual->get_class() != cl) { cl = actual->get_class(); connect(cl->get_data(), SIGNAL(deleted()), this, SLOT(update_actuals())); connect(cl->get_data(), SIGNAL(changed()), this, SLOT(update_actuals())); } } k = read_keyword(st); } else { n = 0; actuals.clear(); } if (!strcmp(k, "constraint")) { constraint = read_string(st); k = read_keyword(st); } else constraint = QString::null; if (!strcmp(k, "cpp_external")) { cpp_external = TRUE; k = read_keyword(st); } else cpp_external = FALSE; if (!strcmp(k, "cpp_visibility")) { cpp_visibility = ::visibility(read_keyword(st)); k = read_keyword(st); } else cpp_visibility = UmlDefaultVisibility; if (!strcmp(k, "cpp_decl")) { cpp_decl = read_string(st); k = read_keyword(st); } else wrong_keyword(k, "cpp_decl"); if (!strcmp(k, "java_external")) { java_external = TRUE; k = read_keyword(st); } else java_external = FALSE; if (read_file_format() <= 33) { // old file if ((cpp_visibility == UmlDefaultVisibility) && (uml_visibility != UmlPublic) && (uml_visibility != UmlPackageVisibility)) cpp_visibility = uml_visibility; if (!strcmp(k, "public")) { uml_visibility = UmlPublic; k = read_keyword(st); } else uml_visibility = UmlPackageVisibility; } if (!strcmp(k, "final")) { java_final = TRUE; k = read_keyword(st); } else java_final = FALSE; if (!strcmp(k, "java_decl")) { java_decl = read_string(st); k = read_keyword(st); } else wrong_keyword(k, "java_decl"); if (!strcmp(k, "java_annotation")) { java_annotation = read_string(st); k = read_keyword(st); } else java_annotation = QString::null; if (!strcmp(k, "php_external")) { php_external = TRUE; k = read_keyword(st); } else php_external = FALSE; if (!strcmp(k, "php_final")) { php_final = TRUE; k = read_keyword(st); } else php_final = FALSE; if (!strcmp(k, "php_decl")) { php_decl = read_string(st); k = read_keyword(st); } else if (read_file_format() >= 44) wrong_keyword(k, "php_decl"); else php_decl = ""; if (!strcmp(k, "python_external")) { python_external = TRUE; k = read_keyword(st); } else python_external = FALSE; if (!strcmp(k, "python_2_2")) { python_2_2 = TRUE; k = read_keyword(st); } else python_2_2 = (read_file_format() < 51); if (!strcmp(k, "python_decl")) { python_decl = read_string(st); k = read_keyword(st); } else if (read_file_format() >= 51) wrong_keyword(k, "python_decl"); else python_decl = ""; if (!strcmp(k, "idl_external")) { idl_external = TRUE; k = read_keyword(st); } else idl_external = FALSE; if (!strcmp(k, "local")) { idl_local = TRUE; k = read_keyword(st); } else idl_local = FALSE; if (!strcmp(k, "custom")) { idl_custom = TRUE; k = read_keyword(st); } else idl_custom = FALSE; if (!strcmp(k, "idl_decl")) { idl_decl = read_string(st); k = read_keyword(st); } else wrong_keyword(k, "idl_decl"); AType t; t.read(st, "switch_type", "explicit_switch_type", k); set_switch_type(t); k = read_keyword(st); }
CodDirsCanvas * CodDirsCanvas::read(char *& st, UmlCanvas * canvas, char *& k) { if (!strcmp(k, "dirscanvas_ref")) return ((CodDirsCanvas *) dict_get(read_id(st), "dirs canvas", canvas)); else if (!strcmp(k, "dirscanvas")) { int id = read_id(st); double z; if (read_file_format() < 5) z = OLD_COL_MSG_Z; else { read_keyword(st, "z"); z = read_double(st); } k = read_keyword(st); CodDirsCanvas * result = new CodDirsCanvas(canvas, CodLinkCanvas::read(st, canvas, k), id); result->setZValue(z); result->link->set_dirs(result); result->link->update_pos(); // to place result k = read_keyword(st); result->settings.read(st, k); // updates k if (!strcmp(k, "forward_label")) { result->label = new LabelCanvas(read_string(st), canvas, 0, 0); if (read_file_format() < 5) { read_keyword(st, "xy"); read_xy(st, result->label); } else { read_keyword(st, "xyz"); read_xyz(st, result->label); } result->label->set_center100(); k = read_keyword(st); } if (!strcmp(k, "backward_label")) { result->backward_label = new LabelCanvas(read_string(st), canvas, 0, 0); if (read_file_format() < 5) { read_keyword(st, "xy"); read_xy(st, result->backward_label); } else { read_keyword(st, "xyz"); read_xyz(st, result->backward_label); } result->backward_label->set_center100(); k = read_keyword(st); } return result; } else return 0; }
PseudoStateCanvas * PseudoStateCanvas::read(char * & st, UmlCanvas * canvas, char * k) { if (!strcmp(k, "pseudostatecanvas_ref")) return ((PseudoStateCanvas *) dict_get(read_id(st), "PseudoStateCanvas", canvas)); else if (!strcmp(k, "pseudostatecanvas")) { int id = read_id(st); BrowserPseudoState * ps = BrowserPseudoState::read_ref(st); PseudoStateCanvas * result = new PseudoStateCanvas(canvas, id); result->browser_node = ps; connect(ps->get_data(), SIGNAL(changed()), result, SLOT(modified())); connect(ps->get_data(), SIGNAL(deleted()), result, SLOT(deleted())); connect(DrawingSettings::instance(), SIGNAL(changed()), result, SLOT(modified())); k = read_keyword(st); if (!strcmp(k, "horizontal")) { result->horiz = TRUE; k = read_keyword(st); } if (!strcmp(k, "xyzwh")) { read_xyzwh(st, result); result->manual_size = TRUE; } else if (strcmp(k, "xyz")) wrong_keyword(k, "xyz"); else read_xyz(st, result); if (!ps->allow_empty()) { result->label = new LabelCanvas(ps->get_name(), canvas, 0, 0); read_keyword(st, "label_xy"); read_xy(st, result->label); result->label->setZ(result->z()); result->label->set_center100(); } if (read_file_format() >= 58) { k = read_keyword(st); result->read_stereotype_property(st, k); // updates k if (strcmp(k, "end")) wrong_keyword(k, "end"); } result->set_xpm(); if (result->manual_size) { result->width_scale100 = result->width(); result->height_scale100 = result->height(); } result->set_center100(); result->show(); result->check_stereotypeproperties(); if (canvas->paste()) result->remove_if_already_present(); return result; } else return 0; }
UcClassCanvas * UcClassCanvas::read(char * & st, UmlCanvas * canvas, char * k) { if (!strcmp(k, "classcanvas_ref")) return ((UcClassCanvas *) dict_get(read_id(st), "classcanvas", canvas)); else if (!strcmp(k, "classcanvas")) { int id = read_id(st); BrowserNode * br = BrowserClass::read_ref(st); UcClassCanvas * result; if (read_file_format() < 52) { read_keyword(st, "xyz"); int x = (int) read_double(st); result = new UcClassCanvas(br, canvas, x, (int) read_double(st), id); result->setZ(read_double(st)); // move the actor in its initial position x = ACTOR_CANVAS_SIZE - result->width(); if (x < 0) result->Q3CanvasRectangle::moveBy(x/2, 0); k = read_keyword(st); read_double(st); read_double(st); if (!strcmp(k, "label_xyz")) // old version read_double(st); else if (strcmp(k, "label_xy")) wrong_keyword(k, "label_xy/label_xyz"); } else { result = new UcClassCanvas(canvas, id); result->browser_node = br; connect(br->get_data(), SIGNAL(changed()), result, SLOT(modified())); connect(br->get_data(), SIGNAL(deleted()), result, SLOT(deleted())); k = read_keyword(st); result->settings.read(st, k); // updates k read_color(st, "color", result->itscolor, k); // updates k if (strcmp(k, "xyz")) wrong_keyword(k, "xyz"); read_xyz(st, result); result->compute_size(); if ((read_file_format() < 72) && (result->used_view_mode == asInterface)) { result->settings.class_drawing_mode = asClass; result->compute_size(); } if (read_file_format() >= 58) { k = read_keyword(st); result->read_stereotype_property(st, k); if (strcmp(k, "end")) wrong_keyword(k, "end"); } } result->set_center100(); result->show(); result->check_stereotypeproperties(); return result; } else return 0; }
void SdMsgBaseCanvas::read(char * & st) { if (((itsType != UmlReturnMsg) && (itsType != UmlSelfReturnMsg)) || (read_file_format() >= 4)) { char * k = read_keyword(st); const OperationData * method = 0; QString expl; QString args; bool unspec = FALSE; if (!strcmp(k, "msg")) { if ((method = OperationData::read_ref(st)) == 0) expl = "<deleted operation>"; } else if (!strcmp(k, "explicitmsg")) expl = read_string(st); else if (strcmp(k, "unspecifiedmsg")) wrong_keyword(k, "msg/explicitmsg/unspecifiedmsg"); else unspec = TRUE; k = read_keyword(st); if (!strcmp(k, "stereotype")) { k = read_string(st); read_keyword(st, "xyz"); int x = (int) read_double(st); stereotype = new LabelCanvas(k, the_canvas(), x, (int) read_double(st)); stereotype->setZ(read_double(st)); stereotype->show(); k = read_keyword(st); } else stereotype = 0; if (!strcmp(k, "show_full_operations_definition")) { show_full_oper = state(read_keyword(st)); k = read_keyword(st); } if (!strcmp(k, "drawing_language")) { drawing_language = ::drawing_language(read_keyword(st)); k = read_keyword(st); } if (!strcmp(k, "show_context_mode")) { show_context_mode = ::context_mode(read_keyword(st)); k = read_keyword(st); } if (unspec) { unread_keyword(k, st); return; } if (!strcmp(k, "args")) { args = read_string(st); k = read_keyword(st); } set_msg(method, expl, args); if (strcmp(k, "label_xy")) wrong_keyword(k, "label_xy"); int lx = (int) read_double(st); label = new LabelCanvas(get_msg(TRUE), the_canvas(), lx, (int) read_double(st), FALSE, FALSE, FALSE, FALSE); label->show(); } }
FlowCanvas * FlowCanvas::read(char * & st, UmlCanvas * canvas, char * k) { if (!strcmp(k, "flowcanvas_ref")) return ((FlowCanvas *) dict_get(read_id(st), "flowcanvas", canvas)); else if (!strcmp(k, "flowcanvas")) { int id = read_id(st); BrowserFlow * br = BrowserFlow::read_ref(st); FlowData * tr = (FlowData *) br->get_data(); LineGeometry geo; bool fixed = FALSE; k = read_keyword(st); if (! strcmp(k, "geometry")) { geo = line_geometry(read_keyword(st)); k = read_keyword(st); if (! strcmp(k, "unfixed")) k = read_keyword(st); else { fixed = TRUE; } } else geo = NoGeometry; float dbegin; float dend; if (! strcmp(k, "decenter_begin")) { dbegin = read_double(st) / 1000; k = read_keyword(st); } else dbegin = -1; if (! strcmp(k, "decenter_end")) { dend = read_double(st) / 1000; k = read_keyword(st); } else dend = -1; unread_keyword(k, st); read_keyword(st, "from"); read_keyword(st, "ref"); DiagramItem * bi = dict_get(read_id(st), "canvas", canvas); BrowserNode * b = tr->get_start_node(); QString s = br->get_name(); FlowCanvas * first = 0; FlowCanvas * result; LabelCanvas * label; LabelCanvas * stereotype; double z; for (;;) { read_keyword(st, "z"); z = read_double(st); k = read_keyword(st); if ((label = LabelCanvas::read(st, canvas, k)) != 0) { // the flow name can't be empty label->setZ(z); k = read_keyword(st); } if (!strcmp(k, "stereotype")) { (void) read_string(st); read_keyword(st, "xyz"); int x = (int) read_double(st); int y = (int) read_double(st); if ((tr == 0) || (*(tr->get_stereotype()) == 0)) { stereotype = 0; read_double(st); // z } else { QString s = tr->get_short_stereotype(); if (s == "interrupt") s = LabelCanvas::Zigzag; else s = QString("<<") + toUnicode(s) + ">>"; stereotype = new LabelCanvas(s, canvas, x, y); stereotype->setZ(read_double(st)); } k = read_keyword(st); } else stereotype = 0; if (strcmp(k, "to")) wrong_keyword(k, "to"); DiagramItem * di; if (strcmp(k = read_keyword(st), "ref")) { di = ArrowPointCanvas::read(st, canvas, k); if (di == 0) unknown_keyword(k); } else di = dict_get(read_id(st), "activity node", canvas); // do not give data to not call update() result = new FlowCanvas(canvas, bi, di, b, id, dbegin, dend); result->geometry = geo; result->fixed_geometry = fixed; result->set_z(z); result->data = tr; connect(tr, SIGNAL(changed()), result, SLOT(modified())); connect(tr, SIGNAL(deleted()), result, SLOT(deleted())); if (first == 0) { first = result; if (read_file_format() == 30) // to remove redondant relation made by release 2.22 RelsToCheck.append(result); } if (label != 0) result->label = label; if (stereotype != 0) (result->stereotype = stereotype)->show(); result->show(); if (di->type() != UmlArrowPoint) break; bi = di; read_keyword(st, "line"); id = read_id(st); } k = read_keyword(st); result->settings.read(st, k); // updates k if (strcmp(k, "write_horizontally") != 0) wrong_keyword(k, "write_horizontally"); result->write_horizontally = state(read_keyword(st)); k = read_keyword(st); result->propagate_drawing_settings(); // to add label, stereotype ... if needed first->update(FALSE); if (first != result) result->update(FALSE); if (! strcmp(k, "selection")) { k = read_keyword(st); first->selection = InfoCanvas::read(st, canvas, k, first); k = read_keyword(st); } if (! strcmp(k, "transformation")) { k = read_keyword(st); first->transformation = InfoCanvas::read(st, canvas, k, first); k = read_keyword(st); } first->stereotypeproperties = StereotypePropertiesCanvas::read(st, canvas, k, first); if (first->stereotypeproperties != 0) k = read_keyword(st); first->check_sel_trans(); first->check_stereotypeproperties(); // manage case where the relation is deleted but present in the browser if (result->data->get_start()->deletedp()) RelsToDel.append(result); else result->update_geometry(); if (strcmp(k, "end")) wrong_keyword(k, "end"); return result; } else return 0; }
CodLinkCanvas * CodLinkCanvas::read(char * & st, UmlCanvas * canvas, char * & k) { if (!strcmp(k, "linkcanvas_ref")) return ((CodLinkCanvas *) dict_get(read_id(st), "link canvas", canvas)); else if (!strcmp(k, "linkcanvas")) { int id = read_id(st); float dbegin; float dend; k = read_keyword(st); if (! strcmp(k, "decenter_begin")) { dbegin = read_double(st) / 1000; k = read_keyword(st); } else dbegin = -1; if (! strcmp(k, "decenter_end")) { dend = read_double(st) / 1000; k = read_keyword(st); } else dend = -1; unread_keyword(k, st); read_keyword(st, "from"); read_keyword(st, "ref"); DiagramItem * bi = dict_get(read_id(st), "", canvas); CodLinkCanvas * result; for (;;) { double z = 0; if (read_file_format() >= 5) { read_keyword(st, "z"); z = read_double(st); } read_keyword(st, "to"); k = read_keyword(st); if (!strcmp(k, "ref")) break; DiagramItem * ap = ArrowPointCanvas::read(st, canvas, k); if (ap == 0) unknown_keyword(k); result = new CodLinkCanvas(canvas, bi, ap, id, dbegin, dend); if (read_file_format() >= 5) result->setZ(z); result->show(); bi = ap; read_keyword(st, "line"); id = read_id(st); } result = new CodLinkCanvas(canvas, bi, dict_get(read_id(st), "", canvas), id, dbegin, dend); result->show(); k = read_keyword(st); return result; } else return 0; }
CodClassInstCanvas * CodClassInstCanvas::read(char * & st, UmlCanvas * canvas, char * k) { if (!strcmp(k, "classinstance_ref")) return ((CodClassInstCanvas *) dict_get(read_id(st), "classinstance", canvas)); else if (!strcmp(k, "classinstance")) { // old release and graphic instance int id = read_id(st); BrowserClass * cl = BrowserClass::read_ref(st); CodClassInstCanvas * result = new CodClassInstCanvas(cl, canvas, 0, 0, id); result->ClassInstCanvas::read(st, k); if (read_file_format() < 74) result->show_context_mode = noContext; if (!strcmp(k, "xyz")) { read_double(st); read_double(st); read_double(st); k = read_keyword(st); } if (strcmp(k, "name")) wrong_keyword(k, "name"); result->iname = read_string(st); read_keyword(st, "xyz"); read_xyz(st, result); result->compute_size(); result->set_center100(); result->show(); return result; } else if (!strcmp(k, "classinstancecanvas")) { int id = read_id(st); BrowserClassInstance * icl = BrowserClassInstance::read_ref(st); read_keyword(st, "xyz"); int x = (int) read_double(st); CodClassInstCanvas * result = new CodClassInstCanvas(icl, canvas, x, (int) read_double(st), id); result->setZ(read_double(st)); result->ClassInstCanvas::read(st, k); // update k if (read_file_format() < 74) result->show_context_mode = noContext; result->read_stereotype_property(st, k); // updates k if (strcmp(k, "end")) wrong_keyword(k, "end"); if (result->get_type() != 0) { // not a deleted instance result->compute_size(); result->set_center100(); result->show(); result->check_stereotypeproperties(); } return result; } else return 0; }