Exemplo n.º 1
0
        /// <summary>
        /// DeleteRule: typeof(DiagramDisplayHasDiagramOrder), FireTime=LocalCommit, Priority=FrameworkDomainModel.BeforeDelayValidateRulePriority;
        /// Make sure that deletion of a diagram order results in a reorder
        /// </summary>
        private static void DiagramOrderDeletedRule(ElementDeletedEventArgs e)
        {
            DiagramDisplayHasDiagramOrder link = (DiagramDisplayHasDiagramOrder)e.ModelElement;
            Diagram diagram = link.Diagram;

            if (!diagram.IsDeleted)
            {
                Store store = diagram.Store;
                if (diagram.Partition == store.DefaultPartition)                 // This should never happen, but it is easy to check
                {
                    if (null == DiagramDisplayHasDiagramOrder.GetDiagramDisplay(diagram))
                    {
                        DiagramDisplay displayContainer = link.DiagramDisplay;
                        if (displayContainer.IsDeleted)
                        {
                            ReadOnlyCollection <DiagramDisplay> displays = store.ElementDirectory.FindElements <DiagramDisplay>(false);
                            displayContainer = (displays.Count != 0) ? displays[0] : new DiagramDisplay(store);
                        }
                        new DiagramDisplayHasDiagramOrder(displayContainer, diagram);
                    }
                }
            }
            else
            {
                DiagramDisplay displayContainer = link.DiagramDisplay;
                if (!displayContainer.IsDeleted && displayContainer.OrderedDiagramCollection.Count == 0)
                {
                    // No more diagrams, don't need the container
                    displayContainer.Delete();
                }
            }
        }
Exemplo n.º 2
0
            /// <summary>
            /// Process diagram items to make sure they have a current ordering representation
            /// </summary>
            protected sealed override void ProcessElement(Diagram element, Store store, INotifyElementAdded notifyAdded)
            {
                DiagramDisplayHasDiagramOrder link = DiagramDisplayHasDiagramOrder.GetLinkToDiagramDisplay(element);
                DiagramDisplay container           = myDiagramDisplay;

                if (container == null)
                {
                    if (link != null)
                    {
                        container = link.DiagramDisplay;
                    }

                    // Make sure we only have one container, use the one we've already grabbed
                    ReadOnlyCollection <DiagramDisplay> containers = store.ElementDirectory.FindElements <DiagramDisplay>(false);
                    int containerCount = containers.Count;
                    for (int i = containerCount - 1; i >= 0; --i)
                    {
                        DiagramDisplay testContainer = containers[i];
                        if (container != null)
                        {
                            if (testContainer != container)
                            {
                                testContainer.Delete();
                            }
                        }
                        else if (i == 0)
                        {
                            container = testContainer;
                        }
                        else
                        {
                            testContainer.Delete();
                        }
                    }
                    if (container == null)
                    {
                        container = new DiagramDisplay(store);
                        notifyAdded.ElementAdded(container, false);
                    }
                    myDiagramDisplay = container;
                    if (link != null)
                    {
                        // There is nothing else to do, the element has been validated
                        if (link.IsActiveDiagram)
                        {
                            if (mySeenActive)
                            {
                                link.IsActiveDiagram = false;
                            }
                            else
                            {
                                mySeenActive = true;
                            }
                        }
                        return;
                    }
                }
                if (link == null)
                {
                    // This will add to the end of the existing collection
                    link = new DiagramDisplayHasDiagramOrder(container, element);
                    notifyAdded.ElementAdded(link, false);
                }
                else
                {
                    if (link.DiagramDisplay != container)
                    {
                        link.DiagramDisplay = container;
                    }
                    if (link.IsActiveDiagram)
                    {
                        if (mySeenActive)
                        {
                            link.IsActiveDiagram = false;
                        }
                        else
                        {
                            mySeenActive = true;
                        }
                    }
                }
            }