/*************************************************************************** * copyright (C) 2005 * * Umbrello UML Modeller Authors * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "autolayouteradapter.h" namespace Autolayout { AutolayouterAdapter::AutolayouterAdapter() : Autolayout::Autolayouter() {} AutolayouterAdapter::~AutolayouterAdapter() {}} void Autolayout::AutolayouterAdapter::addRelationship( AssociationWidget * a ) { int weight; switch (a->getAssocType()) { case Uml::at_Generalization:; case Uml::at_Realization: { if (genralizationAsEdges)weight=generalizationWeight; else return; break; } case Uml::at_Dependency: { if (dependenciesAsEdges) weight=dependenciesWeight; else return; break; } case Uml::at_Anchor: { if (anchorsAsEdges) weight=anchorsWeight; else return; break; } case Uml::at_Aggregation:; case Uml::at_Association:; case Uml::at_Containment:; case Uml::at_Composition:; default: return; /*case Uml::at_Association_Self:; case Uml::at_Activity:; case Uml::at_Relationship:; case Uml::at_Coll_Message:; case Uml::at_Seq_Message:; case Uml::at_Coll_Message_Self:; case Uml::at_Seq_Message_Self:; case Uml::at_Containment:; case Uml::at_Composition:; case Uml::at_Realization:; case Uml::at_UniAssociation:; case Uml::at_State:; case Uml::at_Unknown:; */ }; getGraph()->addEdge(a->getWidgetID(Uml::A).c_str(),a->getWidgetID(Uml::B).c_str(),weight); } void Autolayout::AutolayouterAdapter::setAssociationWeight( int i ) { associationWeight=i; } void Autolayout::AutolayouterAdapter::setDependenciesWeight( int i ) { dependenciesWeight=i; } void Autolayout::AutolayouterAdapter::setGeneralizationWeight( int i ) { generalizationWeight=i; } void Autolayout::AutolayouterAdapter::setGeneralizationAsEdges( bool b ) { genralizationAsEdges=b; } void Autolayout::AutolayouterAdapter::setDependenciesAsEdges( bool b ) { dependenciesAsEdges=b; } void Autolayout::AutolayouterAdapter::setAssociationAsEdges( bool b ) { associationAsEdges=b; } void Autolayout::AutolayouterAdapter::setCompressShapes( bool b ) { compressShapes=b; } void Autolayout::AutolayouterAdapter::setCenterDiagram( bool b ) { centerDiagram=b; } void Autolayout::AutolayouterAdapter::setClusterizeHierarchies( bool b ) { clusterizeHierarchies=b; } void Autolayout::AutolayouterAdapter::setShapeSeparation( int i ) { shapeSeparation=i; } Autolayout::Graph * Autolayout::AutolayouterAdapter::setGraph( UMLView * view ) { if (! view) return 0; Autolayout::Graph * g=getGraph(); if (g&&g->empty()) { UMLWidgetList list = view->getWidgetList(); UMLWidget* widget; for ( widget = list.first(); widget; widget= list.next() ) { if (widget->getBaseType() == Uml::wt_Class) { g->addNode(widget->getID().c_str(),widget->getWidth(), widget->getHeight()); } } AssociationWidgetList as_list=view->getAssociationList(); AssociationWidget* assoc; AssociationWidgetListIt it(as_list); while ( (assoc = it.current()) != 0 ) { ++it; addRelationship(assoc); } } return g; } 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(); } } Autolayout::Canvas * Autolayout::AutolayouterAdapter::setCanvas( UMLView* view ) { return canvas=new Autolayout::SimpleCanvas(view->getCanvasWidth(),view->getCanvasHeight()); } void Autolayout::AutolayouterAdapter::setNoteConnectionWeight( int i ) { noteConnectionWeight=i; } void Autolayout::AutolayouterAdapter::setNoteConnectionsAsEdges( bool b ) { noteConnectionAsEdges=b; }