void ObjectDiagramView::mousePressEvent(QMouseEvent * e) { if (!window()->frozen()) { QPoint diagramPoint(e->x(), e->y()); QPointF scenePoint = mapToScene(diagramPoint); if (e->button() == ::Qt::RightButton) DiagramView::mousePressEvent(e); else { UmlCode c = window()->buttonOn(); switch (c) { case UmlClass: { history_protected = FALSE; unselect_all(); window()->selectOn(); history_save(); BrowserNode * parent = ((BrowserNode *) window()->browser_diagram()->parent()); BrowserClass * b = BrowserClass::get_class(parent); if (b != 0) { BrowserClassInstance * i = new BrowserClassInstance("", b, parent); OdClassInstCanvas * cl = new OdClassInstCanvas(i, the_canvas(), scenePoint.x(), scenePoint.y(), 0); cl->show(); cl->upper(); window()->package_modified(); } } canvas()->update(); break; case UmlClassInstance: { history_protected = TRUE; unselect_all(); window()->selectOn(); history_save(); BrowserNode * parent = ((BrowserNode *) window()->browser_diagram()->parent()); BrowserClassInstance * b = BrowserClassInstance::get_classinstance(parent); if (b != 0) { OdClassInstCanvas * cl = new OdClassInstCanvas(b, the_canvas(), scenePoint.x(), scenePoint.y(), 0); cl->show(); cl->upper(); window()->package_modified(); } } canvas()->update(); history_protected = FALSE; break; default: DiagramView::mousePressEvent(e); break; } } } else DiagramView::mousePressEvent(e); }
void StateDiagramView::mousePressEvent(QMouseEvent * e) { QPoint diagramPoint(e->x(), e->y()); QPointF scenePoint = mapToScene(diagramPoint); if (!window()->frozen()) { UmlCode action = window()->buttonOn(); switch (action) { case UmlState: { history_protected = TRUE; unselect_all(); window()->selectOn(); history_save(); QGraphicsItem * ci = the_canvas()->collision(scenePoint.toPoint()); DiagramItem * di; bool specified = ((ci != 0) && ((di = QCanvasItemToDiagramItem(ci)) != 0) && (di->typeUmlCode() == UmlState) && ((BrowserState *)((StateCanvas *) di)->get_bn())->may_contains(action)); BrowserNode * parent; if (specified) { if ((parent = ((StateCanvas *) di)->pointed_region(scenePoint.toPoint())) == 0) parent = ((StateCanvas *) di)->get_bn(); } else parent = (BrowserNode *) window()->browser_diagram()->parent(); BrowserNode * b = BrowserState::get_state(parent); if (b != 0) { if (the_canvas()->already_drawn(b)) { msg_information("Douml", TR("already drawn")); history_protected = FALSE; return; } // may be added in a the state's region rather than the state StateCanvas * c = new StateCanvas(b, the_canvas(), scenePoint.x(), scenePoint.y()); c->show(); c->upper(); canvas()->update(); StateCanvas::force_inside(c, TRUE); canvas()->update(); history_protected = FALSE; window()->package_modified(); return; // canvas already updated } } break; case UmlRegion: { history_protected = TRUE; unselect_all(); window()->selectOn(); history_save(); QGraphicsItem * ci = the_canvas()->collision(scenePoint.toPoint()); DiagramItem * di; if ((ci != 0) && ((di = QCanvasItemToDiagramItem(ci)) != 0) && (di->typeUmlCode() == UmlState) && ((BrowserState *)((StateCanvas *) di)->get_bn())->may_contains(action)) { BrowserRegion::add_region(((StateCanvas *) di)->get_bn()); window()->package_modified(); } } break; case InitialPS: case EntryPointPS: case FinalPS: case TerminatePS: case ExitPointPS: case DeepHistoryPS: case ShallowHistoryPS: case JunctionPS: case ChoicePS: case ForkPS: case JoinPS: { history_protected = TRUE; unselect_all(); window()->selectOn(); history_save(); QGraphicsItem * ci = the_canvas()->collision(scenePoint.toPoint()); DiagramItem * di; bool specified = ((ci != 0) && ((di = QCanvasItemToDiagramItem(ci)) != 0) && (di->typeUmlCode() == UmlState) && ((BrowserState *)((StateCanvas *) di)->get_bn())->may_contains(action)); BrowserNode * parent; if (specified) { if ((parent = ((StateCanvas *) di)->pointed_region(scenePoint.toPoint())) == 0) parent = ((StateCanvas *) di)->get_bn(); } else parent = (BrowserNode *) window()->browser_diagram()->parent(); BrowserNode * b = BrowserPseudoState::get_pseudostate(parent, action); if (b != 0) { PseudoStateCanvas * c = // may be added in a the state's region rather than the state new PseudoStateCanvas(b, the_canvas(), scenePoint.x(), scenePoint.y()); c->show(); c->upper(); StateCanvas::force_inside(c, FALSE); window()->package_modified(); } } break; case UmlStateAction: case UmlSignalIn: case UmlSignalOut: { history_protected = TRUE; unselect_all(); window()->selectOn(); history_save(); QGraphicsItem * ci = the_canvas()->collision(scenePoint.toPoint()); DiagramItem * di; bool specified = ((ci != 0) && ((di = QCanvasItemToDiagramItem(ci)) != 0) && (di->typeUmlCode() == UmlState) && ((BrowserState *)((StateCanvas *) di)->get_bn())->may_contains(UmlStateAction)); BrowserNode * parent; if (specified) { if ((parent = ((StateCanvas *) di)->pointed_region(scenePoint.toPoint())) == 0) parent = ((StateCanvas *) di)->get_bn(); } else parent = (BrowserNode *) window()->browser_diagram()->parent(); BrowserNode * b = BrowserStateAction::add_stateaction(parent); switch (action) { case UmlSignalIn: ((StateActionData *) b->get_data())->set_stereotype("receive-signal"); break; case UmlSignalOut: ((StateActionData *) b->get_data())->set_stereotype("send-signal"); break; default: // to avoid warning break; } StateActionCanvas * c = // may be added in a the state's region rather than the state new StateActionCanvas(b, the_canvas(), scenePoint.x(), scenePoint.y()); c->show(); c->upper(); StateCanvas::force_inside(c, FALSE); window()->package_modified(); } break; default: DiagramView::mousePressEvent(e); return; } canvas()->update(); history_protected = FALSE; } else DiagramView::mousePressEvent(e); }
void SeqDiagramView::mousePressEvent(QMouseEvent * e) { if (!window()->frozen()) { if (e->button() == ::Qt::RightButton) DiagramView::mousePressEvent(e); else { QPoint diagramPoint(e->x(), e->y()); QPointF scenePoint = mapToScene(diagramPoint); UmlCode c = window()->buttonOn(); switch (c) { case UmlClass: { history_protected = FALSE; unselect_all(); window()->selectOn(); history_save(); BrowserNode * parent = ((BrowserNode *) window()->browser_diagram()->parent()); BrowserClass * b = BrowserClass::get_class(parent); if (b != 0) { SdClassInstCanvas * cli = new SdClassInstCanvas(b, the_canvas(), scenePoint.x(), 0); cli->show(); cli->moveBy(scenePoint.x() - cli->center().x(), 0); cli->upper(); window()->package_modified(); } } break; case UmlClassInstance: { history_protected = TRUE; unselect_all(); window()->selectOn(); history_save(); BrowserNode * parent = ((BrowserNode *) window()->browser_diagram()->parent()); BrowserClassInstance * b = BrowserClassInstance::get_classinstance(parent); if (b != 0) { SdClassInstCanvas * cli = new SdClassInstCanvas(b, the_canvas(), scenePoint.x(), 0); cli->show(); cli->moveBy(scenePoint.x() - cli->center().x(), 0); cli->upper(); window()->package_modified(); } } break; case UmlSyncSelfMsg: case UmlAsyncSelfMsg: case UmlSelfReturnMsg: { history_protected = TRUE; unselect_all(); window()->selectOn(); history_save(); QGraphicsItem * ci = the_canvas()->collision(scenePoint.toPoint()); if (ci != 0) { DiagramItem * i = QCanvasItemToDiagramItem(ci); if (i != 0) { QString err = i->may_start(c); if (!err.isEmpty()) msg_critical("Douml" , err); else { i->connexion(c, i, scenePoint.toPoint(), scenePoint.toPoint()); window()->package_modified(); } } } } break; case UmlContinuation: { history_protected = TRUE; unselect_all(); window()->selectOn(); history_save(); SdContinuationCanvas * cont = new SdContinuationCanvas(the_canvas(), scenePoint.x(), scenePoint.y(), 0); cont->show(); cont->upper(); window()->package_modified(); } break; default: DiagramView::mousePressEvent(e); return; } canvas()->update(); history_protected = FALSE; } } else DiagramView::mousePressEvent(e); }