summaryrefslogtreecommitdiffstats
path: root/umbrello/umbrello/autolayout/autolayouteradapter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'umbrello/umbrello/autolayout/autolayouteradapter.cpp')
-rw-r--r--umbrello/umbrello/autolayout/autolayouteradapter.cpp191
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;
+}