void Autolayout::AutolayouterAdapter::updateView( UMLView* view ) { if (! view) return ; UMLWidgetList list = view->getWidgetList(); UMLWidget* widget; Graph *g=getGraph(); if (! view||!g) return ; for ( widget = list.first(); widget; widget= list.next() ) if (widget->getBaseType() == Uml::wt_Class) { Node* n =g->getNode(widget->getID().c_str()); //printf("old values widgets %s x,y:%d,%d\n",widget->getID().c_str(),widget->getX(),widget->getY()); //int x_old=widget->getX(); //int x_calc=n.getX(); //int x_calc2=30 +n.getX()-widget->getWidth()/2; widget->setX(getCanvas()->getBaseX() +n->getX()-widget->getWidth()/2); //int x=widget->getX(); widget->setY(getCanvas()->getMaxY()/2-(n->getY()+(widget->getHeight()/2))); widget->updateWidget(); } }
UMLWidget *createWidget(UMLView *view, UMLObject *o) { QPoint pos = view->getPos(); int y = pos.y(); Uml::Diagram_Type diagramType = view->getType(); Uml::Object_Type type = o->baseType(); UMLWidget *newWidget = NULL; switch (type) { case Uml::ot_Actor: if (diagramType == Uml::dt_Sequence) { ObjectWidget *ow = new ObjectWidget(view, o, view->getLocalID()); ow->setDrawAsActor(true); y = ow->topMargin(); newWidget = ow; } else newWidget = new ActorWidget(view, static_cast<UMLActor*>(o)); break; case Uml::ot_UseCase: newWidget = new UseCaseWidget(view, static_cast<UMLUseCase*>(o)); break; case Uml::ot_Package: newWidget = new PackageWidget(view, static_cast<UMLPackage*>(o)); break; case Uml::ot_Component: newWidget = new ComponentWidget(view, static_cast<UMLComponent*>(o)); if (diagramType == Uml::dt_Deployment) { newWidget->setIsInstance(true); } break; case Uml::ot_Node: newWidget = new NodeWidget(view, static_cast<UMLNode*>(o)); break; case Uml::ot_Artifact: newWidget = new ArtifactWidget(view, static_cast<UMLArtifact*>(o)); break; case Uml::ot_Datatype: newWidget = new DatatypeWidget(view, static_cast<UMLClassifier*>(o)); break; case Uml::ot_Enum: newWidget = new EnumWidget(view, static_cast<UMLEnum*>(o)); break; case Uml::ot_Entity: newWidget = new EntityWidget(view, static_cast<UMLEntity*>(o)); break; case Uml::ot_Interface: if (diagramType == Uml::dt_Sequence || diagramType == Uml::dt_Collaboration) { ObjectWidget *ow = new ObjectWidget(view, o, view->getLocalID() ); if (diagramType == Uml::dt_Sequence) { y = ow->topMargin(); } newWidget = ow; } else { UMLClassifier *c = static_cast<UMLClassifier*>(o); ClassifierWidget* interfaceWidget = new ClassifierWidget(view, c); if (diagramType == Uml::dt_Component || diagramType == Uml::dt_Deployment) { interfaceWidget->setDrawAsCircle(true); } newWidget = interfaceWidget; } break; case Uml::ot_Class: //see if we really want an object widget or class widget if (diagramType == Uml::dt_Class || diagramType == Uml::dt_Component) { UMLClassifier *c = static_cast<UMLClassifier*>(o); ClassifierWidget *cw = new ClassifierWidget(view, c); if (diagramType == Uml::dt_Component) cw->setDrawAsCircle(true); newWidget = cw; } else { ObjectWidget *ow = new ObjectWidget(view, o, view->getLocalID() ); if (diagramType == Uml::dt_Sequence) { y = ow->topMargin(); } newWidget = ow; } break; case Uml::ot_Category: newWidget = new CategoryWidget(view, static_cast<UMLCategory*>(o)); break; default: uWarning() << "trying to create an invalid widget"; } if (newWidget) { newWidget->setX( pos.x() ); newWidget->setY( y ); } return newWidget; }