void SdMsgBaseCanvas::modified() { if (visible()) { hide(); QString s = get_msg(TRUE); if (s.isEmpty()) { // remove label if needed if (label != 0) { the_canvas()->del(label); label = 0; } } else if (label == 0) { // adds label label = new LabelCanvas(s, the_canvas(), 0, 0, FALSE, FALSE, FALSE, FALSE); default_label_position(); label->show(); } else if (label->get_name() != s) // update label label->set_name(s); else label->set_strikeout((msg != 0) && (msg->deletedp())); package_modified(); show(); canvas()->update(); } }
void AssocContainCanvas::menu(const QPoint&) { Q3PopupMenu m(0); Q3PopupMenu geo(0); ArrowCanvas * aplabel; ArrowCanvas * apstereotype; search_supports(aplabel, apstereotype); AssocContainCanvas * plabel = (AssocContainCanvas *) aplabel; AssocContainCanvas * pstereotype = (AssocContainCanvas *) apstereotype; MenuFactory::createTitle(m, TR("Association")); m.insertSeparator(); m.insertItem(TR("Edit"),1); if (pstereotype || plabel) { m.insertSeparator(); m.insertItem(TR("Select stereotype and label"), 2); m.insertItem(TR("Default stereotype and label position"), 3); if (plabel && (label == 0)) m.insertItem(TR("Attach label to this segment"), 4); if (pstereotype && (stereotype == 0)) m.insertItem(TR("Attach stereotype to this segment"), 5); } if (get_start() != get_end()) { m.insertSeparator(); init_geometry_menu(geo, 10); m.insertItem(TR("Geometry (Ctrl+l)"), &geo); } m.insertSeparator(); m.insertItem(TR("Remove from diagram"), 6); m.insertItem(TR("Delete from model"), 7); int rank = m.exec(QCursor::pos()); switch (rank) { case 1: open(); return; case 2: the_canvas()->unselect_all(); if (plabel) the_canvas()->select(plabel->label); if (pstereotype) the_canvas()->select(pstereotype->stereotype); return; case 3: if (plabel) plabel->default_label_position(); if (pstereotype) pstereotype->default_stereotype_position(); break; case 4: label = plabel->label; plabel->label = 0; default_label_position(); break; case 5: stereotype = pstereotype->stereotype; pstereotype->stereotype = 0; default_stereotype_position(); break; case 6: // not removed from the model : just hide it remove(FALSE); break; case 7: get_start()->unassociate(get_end()); // line will be deleted break; default: if (rank >= 10) { rank -= 10; if (rank == RecenterBegin) set_decenter(-1.0, decenter_end); else if (rank == RecenterEnd) set_decenter(decenter_begin, -1.0); else if (rank != (int) geometry) set_geometry((LineGeometry) rank, TRUE); else return; } else return; } package_modified(); }
void FlowCanvas::update(bool updatepos) { if (data) { QFontMetrics fm(the_canvas()->get_font(UmlNormalFont)); FlowCanvas * plabel; FlowCanvas * pstereotype; { ArrowCanvas * aplabel; ArrowCanvas * apstereotype; search_supports(aplabel, apstereotype); plabel = (FlowCanvas *) aplabel; pstereotype = (FlowCanvas *) apstereotype; } // manages relation's stereotype QString s = data->get_short_stereotype(); bool update_label = FALSE; if (s.isEmpty()) { // relation does not have stereotype if (pstereotype != 0) { // removes it the_canvas()->del(pstereotype->stereotype); pstereotype->stereotype = 0; pstereotype = 0; } } else { if (s == "interrupt") s = LabelCanvas::Zigzag; else if (s != LabelCanvas::Zigzag) s = QString("<<") + toUnicode(s) + ">>"; if ((pstereotype == 0) && (begin->type() != UmlArrowPoint)) { // adds relation's stereotype stereotype = new LabelCanvas(s, the_canvas(), 0, 0); update_label = (label != 0); stereotype_default_position(); } else if ((pstereotype != 0) && (pstereotype->stereotype->get_name() != s)) { // update name pstereotype->stereotype->set_name(s); if (auto_pos) pstereotype->stereotype_default_position(); } } // manages relation's name, guard and weight bool horiz = (write_horizontally == UmlDefaultState) ? ((BrowserActivityDiagram *) the_canvas()->browser_diagram()) ->get_write_label_horizontally() : (write_horizontally == UmlYes); used_settings = settings; ((BrowserActivityDiagram *) the_canvas()->browser_diagram()) ->get_activitydrawingsettings(used_settings); s = data->str(horiz, used_settings.drawing_language); QString n = data->get_start()->get_name(); if (! s.isEmpty()) { if (n != "<flow>") s = n + ((horiz) ? ' ' : '\n') + toUnicode(s); else s = toUnicode(s); } else if (n != "<flow>") s = n; if (s.isEmpty()) { if (plabel != 0) { // removes it the_canvas()->del(plabel->label); plabel->label = 0; } } else if ((plabel == 0) && (begin->type() != UmlArrowPoint)) { // adds relation's name label = new LabelCanvas(s, the_canvas(), 0, 0); default_label_position(); } else if ((plabel != 0) && (plabel->label->get_name() != s)) { // update it plabel->label->set_name(s); if (auto_pos || update_label) plabel->default_label_position(); } else if (update_label) plabel->default_label_position(); } if (updatepos) update_pos(); }
void FlowCanvas::menu(const QPoint &) { if ((data != 0) && !data->get_start()->in_edition()) { FlowCanvas * plabel; FlowCanvas * pstereotype; { ArrowCanvas * aplabel; ArrowCanvas * apstereotype; search_supports(aplabel, apstereotype); plabel = (FlowCanvas *) aplabel; pstereotype = (FlowCanvas *) apstereotype; } Q3PopupMenu m(0); Q3PopupMenu geo(0); Q3PopupMenu toolm(0); MenuFactory::createTitle(m, data->definition(FALSE, TRUE)); m.insertSeparator(); m.insertItem(TR("Edit"), 0); m.insertSeparator(); m.insertItem(TR("Select in browser"), 2); if (plabel || pstereotype) { m.insertSeparator(); m.insertItem(TR("Edit drawing settings"), 1); m.insertItem(TR("Select labels"), 3); m.insertItem(TR("Labels default position"), 4); if (plabel && (label == 0)) m.insertItem(TR("Attach flow label to this segment"), 5); if (pstereotype && (stereotype == 0)) m.insertItem(TR("Attach stereotype to this segment"), 6); } if (get_start() != get_end()) { m.insertSeparator(); init_geometry_menu(geo, 10); m.insertItem(TR("Geometry (Ctrl+l)"), &geo); } m.insertSeparator(); m.insertItem(TR("Remove from diagram"),7); if (data->get_start()->is_writable()) m.insertItem(TR("Delete from model"), 8); m.insertSeparator(); if (Tool::menu_insert(&toolm, itstype, 20)) m.insertItem(TR("Tool"), &toolm); int rank = m.exec(QCursor::pos()); switch (rank) { case 0: data->edit(); return; case 1: edit_drawing_settings(); return; case 2: data->get_start()->select_in_browser(); return; case 3: the_canvas()->unselect_all(); if (plabel) the_canvas()->select(plabel->label); if (pstereotype) the_canvas()->select(pstereotype->stereotype); return; case 4: if (plabel) plabel->default_label_position(); if (pstereotype) pstereotype->stereotype_default_position(); return; case 5: label = plabel->label; plabel->label = 0; default_label_position(); return; case 6: stereotype = pstereotype->stereotype; pstereotype->stereotype = 0; if (label != 0) default_label_position(); stereotype_default_position(); return; case 7: // not removed from the browser : just hide it remove(FALSE); break; case 8: data->delete_it(); // will delete the canvas break; default: if (rank >= 20) { ToolCom::run(Tool::command(rank - 20), data->get_start()); return; } else if (rank >= 10) { rank -= 10; if (rank == RecenterBegin) set_decenter(-1.0, decenter_end); else if (rank == RecenterEnd) set_decenter(decenter_begin, -1.0); else if (rank != (int) geometry) set_geometry((LineGeometry) rank, TRUE); else return; } else return; } package_modified(); } }
void SdSelfMsgCanvas::menu(const QPoint&) { Q3PopupMenu m(0); m.insertItem(new MenuTitle(TR("Message"), m.font()), -1); m.insertSeparator(); m.insertItem(TR("Upper"), 0); m.insertItem(TR("Lower"), 1); m.insertItem(TR("Go up"), 13); m.insertItem(TR("Go down"), 14); m.insertSeparator(); m.insertItem(TR("Edit"), 2); m.insertItem(TR("Edit drawing settings"), 3); m.insertSeparator(); if (msg != 0) m.insertItem(TR("Select operation in browser"), 8); m.insertItem(TR("Select linked items"), 4); if (label || stereotype) { m.insertSeparator(); m.insertItem(TR("Select stereotype and label"), 5); m.insertItem(TR("Default stereotype and label position"), 6); } if (((BrowserSeqDiagram *) the_canvas()->browser_diagram()) ->is_overlapping_bars()) { m.insertSeparator(); m.insertItem(TR("Go to new overlapping bar"), 9); if (dest->isOverlappingDuration()) m.insertItem(TR("Go to parent bar"), 10); } m.insertSeparator(); m.insertItem(TR("Remove from diagram"), 7); switch (m.exec(QCursor::pos())) { case 0: upper(); // force son reaffichage hide(); show(); break; case 1: lower(); // force son reaffichage hide(); show(); break; case 13: z_up(); // force son reaffichage hide(); show(); break; case 14: z_down(); // force son reaffichage hide(); show(); break; case 2: open(); break; case 3: edit_drawing_settings(); return; case 4: select_associated(); break; case 5: the_canvas()->unselect_all(); if (label) the_canvas()->select(label); if (stereotype) the_canvas()->select(stereotype); break; case 6: if (label) default_label_position(); if (stereotype) default_stereotype_position(); break; case 7: delete_it(); return; case 8: msg->get_browser_node()->select_in_browser(); return; case 9: ((SdDurationCanvas *) dest)->go_up(this, TRUE); break; case 10: ((SdDurationCanvas *) dest)->go_down(this); default: return; } package_modified(); canvas()->update(); }
void TransitionCanvas::update(bool updatepos) { if (data) { QFontMetrics fm(the_canvas()->get_font(UmlNormalFont)); TransitionCanvas * plabel; TransitionCanvas * pstereotype; { ArrowCanvas * aplabel; ArrowCanvas * apstereotype; search_supports(aplabel, apstereotype); plabel = (TransitionCanvas *) aplabel; pstereotype = (TransitionCanvas *) apstereotype; } // manages relation's stereotype QString s = data->get_short_stereotype(); bool update_label = FALSE; if (s.isEmpty()) { // relation does not have stereotype if (pstereotype != 0) { // removes it the_canvas()->del(pstereotype->stereotype); pstereotype->stereotype = 0; } } else { s = QString("<<") + toUnicode(s) + ">>"; if ((pstereotype == 0) && (begin->type() != UmlArrowPoint)) { // adds relation's stereotype stereotype = new LabelCanvas(s, the_canvas(), 0, 0); update_label = (label != 0); stereotype_default_position(); } else if ((pstereotype != 0) && (pstereotype->stereotype->get_name() != s)) { // update name pstereotype->stereotype->set_name(s); if (auto_pos) pstereotype->stereotype_default_position(); } } // manages relation's name BrowserStateDiagram * diagram = (BrowserStateDiagram *) the_canvas()->browser_diagram(); if ((show_definition == UmlDefaultState) ? diagram->get_show_trans_definition() : (show_definition == UmlYes)) { s = data->str((write_horizontally == UmlDefaultState) ? diagram->get_write_label_horizontally() : (write_horizontally == UmlYes), (drawing_language == DefaultDrawingLanguage) ? diagram->get_language() : drawing_language); s = toUnicode(s); } else if ((s = data->get_start()->get_name()) == "<transition>") s = QString::null; if (s.isEmpty()) { // relation does not have name if (plabel != 0) { // removes it the_canvas()->del(plabel->label); plabel->label = 0; } } else if ((plabel == 0) && (begin->type() != UmlArrowPoint)) { // adds relation's name label = new LabelCanvas(s, the_canvas(), 0, 0); default_label_position(); } else if ((plabel != 0) && (plabel->label->get_name() != s)) { // update name plabel->label->set_name(s); if (auto_pos || update_label) plabel->default_label_position(); } else if (update_label) plabel->default_label_position(); } if (updatepos) update_pos(); }