コード例 #1
0
        public HashSet <UML.Diagrams.DiagramElement> createDiagramElements
            (List <UML.Classes.Kernel.Element> elements, Diagram diagram)
        {
            HashSet <UML.Diagrams.DiagramElement> returnedDiagramElements =
                new HashSet <UML.Diagrams.DiagramElement>();

            foreach (UML.Classes.Kernel.Element element in elements)
            {
                UML.Diagrams.DiagramElement diagramElement = null;
                if (element is ConnectorWrapper)
                {
                    diagramElement = new DiagramLinkWrapper
                                         (this.model as Model, element as ConnectorWrapper, diagram);
                    // don't return isHidden relations
                    if (((DiagramLinkWrapper)diagramElement).isHidden)
                    {
                        diagramElement = null;
                    }
                }
                else if (element is ElementWrapper)
                {
                    diagramElement = new DiagramObjectWrapper
                                         (this.model as Model, element as ElementWrapper, diagram);
                }
                if (diagramElement != null)
                {
                    returnedDiagramElements.Add(diagramElement);
                }
            }
            return(returnedDiagramElements);
        }
コード例 #2
0
        /// <summary>
        /// adds an element to the diagram
        /// </summary>
        /// <param name="element">the element to add</param>
        /// <returns>the new diagramElement</returns>
        public UML.Diagrams.DiagramElement addToDiagram(UML.Classes.Kernel.Element element)
        {
            UML.Diagrams.DiagramElement diagramElement = null;
            if (element != null)
            {
                //first check whether this element is not already added to this diagram
                diagramElement = this.getDiagramElement(element);
                if (diagramElement == null)
                {
                    if (element is EA.ElementWrapper)
                    {
                        //first save the diagram to make sure we don't lose any unsaved changes
                        this.model.saveOpenedDiagram(this);
                        global::EA.DiagramObject newDiagramObject = this.wrappedDiagram.DiagramObjects.AddNew("", "") as global::EA.DiagramObject;
                        diagramElement         = ((Factory)this.model.factory).createDiagramElement(newDiagramObject);
                        diagramElement.element = element;
                        //save the element diagramObject
                        ((DiagramObjectWrapper)diagramElement).save();
                        // now refresh to make sure we see the new element on the diagram
                        this.reFresh();
                    }

                    else if (!(element.owner is UML.Classes.Kernel.Package))
                    {
                        diagramElement = this.addToDiagram(element.owner);
                    }
                }
            }
            return(diagramElement);
        }
 /// <summary>
 /// update the given diagrams with the schema elements that don't appear ont he diagram yet.
 /// </summary>
 /// <param name="schema">the schema that should be visualised</param>
 /// <param name="subsetDiagrams">list of diagrams to update</param>
 void updateExistingDiagrams(Schema schema, HashSet <UML.Diagrams.Diagram> subsetDiagrams)
 {
     //add all elements to all diagrams in the same package as the messageElement
     foreach (UML.Diagrams.Diagram diagram in subsetDiagrams)
     {
         int xPos = 10;
         int yPos = 10;
         foreach (SchemaElement schemaElement in schema.elements)
         {
             if (this.shouldElementBeOnDiagram(schemaElement.subsetElement) &&
                 !diagram.contains(schemaElement.subsetElement))
             {
                 UML.Diagrams.DiagramElement diagramElement = diagram.addToDiagram(schemaElement.subsetElement);
                 if (diagramElement != null)
                 {
                     //save before changing the element position
                     diagramElement.save();
                     diagramElement.xPosition = xPos;
                     diagramElement.yPosition = yPos;
                     diagramElement.save();
                     xPos += 50;
                     yPos += 20;
                 }
             }
         }
         //show the diagram
         diagram.reFresh();
         diagram.open();
     }
 }
コード例 #4
0
        public void selectItem(UML.Extended.UMLItem itemToSelect)
        {
            if (itemToSelect is Operation)
            {
                bool found = false;
                //if the item is a relation or an operation then search through the links first
                foreach (DiagramLinkWrapper diagramLinkWrapper in this.diagramLinkWrappers)
                {
                    if (itemToSelect is Operation &&
                        diagramLinkWrapper.relation is Message)
                    {
                        Message message = (Message)diagramLinkWrapper.relation;
                        if (itemToSelect.Equals(message.calledOperation))
                        {
                            this.wrappedDiagram.SelectedConnector = message.wrappedConnector;
                            found = true;
                            //done, no need to loop further
                            break;
                        }
                    }
                }
                //The operation could also be called in an Action.
                if (!found)
                {
                    List <UML.Actions.BasicActions.CallOperationAction> actions = ((Operation)itemToSelect).getDependentCallOperationActions().ToList();
                    List <UML.Diagrams.DiagramElement> diagramObjects           = this.diagramObjectWrappers.ToList();

                    foreach (Action action in actions)
                    {
                        //try to find an diagramObjectwrapper that refrences the action
                        UML.Diagrams.DiagramElement diagramObject = diagramObjects.Find(
                            x => x.element.Equals(action));
                        if (diagramObject != null)
                        {
                            //found it, select the action and break out of for loop
                            this.selectItem(action);
                            found = true;
                            break;
                        }
                    }
                }
                if (!found)
                {
                    //can't find a message on this diagram that calls the operation.
                    //then we try it with the operations parent
                    this.selectItem(((Operation)itemToSelect).owner);
                }
            }
            else if (itemToSelect is ConnectorWrapper)
            {
                this.wrappedDiagram.SelectedConnector = ((ConnectorWrapper)itemToSelect).wrappedConnector;
                //check if it worked
                if (wrappedDiagram.SelectedConnector == null &&
                    itemToSelect is Message)
                {
                    this.selectItem(((Message)itemToSelect).calledOperation);
                }
            }
            else if (itemToSelect is ElementWrapper)
            {
                ElementWrapper elementToSelect = (ElementWrapper)itemToSelect;
                this.wrappedDiagram.SelectedObjects.AddNew(elementToSelect.wrappedElement.ElementID.ToString(),
                                                           elementToSelect.wrappedElement.Type);
            }
        }