diff options
Diffstat (limited to 'umbrello/umbrello/autolayout/autolayouteradapter.cpp')
-rw-r--r-- | umbrello/umbrello/autolayout/autolayouteradapter.cpp | 191 |
1 files changed, 191 insertions, 0 deletions
diff --git a/umbrello/umbrello/autolayout/autolayouteradapter.cpp b/umbrello/umbrello/autolayout/autolayouteradapter.cpp new file mode 100644 index 00000000..0673fde1 --- /dev/null +++ b/umbrello/umbrello/autolayout/autolayouteradapter.cpp @@ -0,0 +1,191 @@ +/*************************************************************************** + * copyright (C) 2005 * + * Umbrello UML Modeller Authors <uml-devel @uml.sf.net> * + * * + * 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; +} |