public void DeleteShapesForElement(DomainModelLink element) { if (element == null) { return; } DomainModelLink link = element; DiagramDomainDataDirectory data = link.Store.DomainDataAdvDirectory.ResolveExtensionDirectory <DiagramDomainDataDirectory>(); DomainModelElement m = DomainRoleInfo.GetSourceRolePlayer(link) as DomainModelElement; List <Guid> shapes = data.GetShapeTypesForElement(m.GetDomainClassId()); if (shapes == null) { return; } foreach (Guid g in shapes) { if (data.MappingRelationshipShapeInfos.ContainsKey(g)) { this.DeleteShapesForElement(m.Store, m.Id, g); return; } } }
public virtual void AddRSShapesForElement(DomainModelLink modelElement) { if (modelElement == null) { return; } DiagramDomainDataDirectory data = modelElement.Store.DomainDataAdvDirectory.ResolveExtensionDirectory <DiagramDomainDataDirectory>(); if (data == null) { throw new ArgumentNullException("DiagramDomainDataDirectory"); } List <Guid> shapes = data.GetShapeTypesForElement(modelElement.GetDomainClassId()); if (shapes != null) { if (shapes.Count > 0) { DomainModelElement source = DomainRoleInfo.GetSourceRolePlayer(modelElement) as DomainModelElement; DomainModelElement target = DomainRoleInfo.GetTargetRolePlayer(modelElement) as DomainModelElement; foreach (Guid shape in shapes) { AddRSShapesForElement(source, target, modelElement, shape); } } } }
public void DeleteShapesForElement(DomainModelElement element) { if (element == null) return; DeleteShapesForElement(element.Store, element.Id); }
public virtual void AddMappingRSShapesForElement(DomainModelElement modelElement) { if (modelElement == null) return; DiagramDomainDataDirectory data = modelElement.Store.DomainDataAdvDirectory.ResolveExtensionDirectory<DiagramDomainDataDirectory>(); if (data == null) throw new ArgumentNullException("DiagramDomainDataDirectory"); List<Guid> shapes = data.GetShapeTypesForElement(modelElement.GetDomainClassId()); if (shapes == null) return; foreach (Guid g in shapes) if (data.MappingRelationshipShapeInfos.ContainsKey(g)) { MappingRelationshipShapeInfo info = data.MappingRelationshipShapeInfos[g]; // see if the required relationships exist ReadOnlyCollection<ElementLink> colSource = DomainRoleInfo.GetElementLinks<ElementLink>(modelElement, info.SourceDomainRole); if (colSource.Count != 1) return; ReadOnlyCollection<ElementLink> colTarget = DomainRoleInfo.GetElementLinks<ElementLink>(modelElement, info.TargetDomainRole); if (colTarget.Count != 1) return; DomainModelElement source = DomainRoleInfo.GetTargetRolePlayer(colSource[0]) as DomainModelElement; DomainModelElement target = DomainRoleInfo.GetTargetRolePlayer(colTarget[0]) as DomainModelElement; AddRSShapesForElement(source, target, modelElement, g); } }
public virtual void AddShapesForElement(DomainModelElement modelElement) { DomainModelElement parent = modelElement.GetDomainModelServices().ElementParentProvider.GetEmbeddingParent(modelElement) as DomainModelElement; DomainModelElement child = modelElement; AddShapesForElement(parent, child); }
/// <summary> /// Called whenever a model element is deleted from the store. /// </summary> /// <param name="sender">ViewModelStore</param> /// <param name="args">Event Arguments for notification of the removal of an ModelElement.</param> private void OnElementDeleted(object sender, ElementDeletedEventArgs args) { if (args.ModelElement is DomainModelElement) { DomainModelElement modelElement = args.ModelElement as DomainModelElement; List <Guid> shapes = GraphicalDependencyShapeStore.GetFromStore(modelElement.Id); if (shapes != null) { if (shapes.Count > 0) { modelElement.Store.UndoManager.UndoState = UndoState.DisabledNoFlush; using (Transaction t = modelElement.Store.TransactionManager.BeginTransaction("", true)) { for (int i = shapes.Count - 1; i >= 0; i--) { ShapeElement shape = modelElement.Store.ElementDirectory.FindElement(shapes[i]) as ShapeElement; if (shape != null) { shape.Delete(); } } t.Commit(); } modelElement.Store.UndoManager.UndoState = UndoState.Enabled; GraphicalDependencyShapeStore.RemoveFromStore(modelElement.Id); } } } }
public virtual void AddRootShapesForElement(DomainModelElement modelElement)//, bool bIgnoreVisualizationBehavior) { DiagramDomainDataDirectory data = modelElement.Store.DomainDataAdvDirectory.ResolveExtensionDirectory <DiagramDomainDataDirectory>(); IDomainModelServices topMost = modelElement.GetDomainModelServices().TopMostService; List <Guid> shapeIds = data.GetRootShapeTypesForElement(modelElement.GetDomainClassId()); if (shapeIds != null) { foreach (Guid shapeId in shapeIds) { ShapeClassInfo shapeInfo = data.ShapeClassInfos[shapeId]; ReadOnlyCollection <ModelElement> diagrams = modelElement.Store.ElementDirectory.FindElements(shapeInfo.DiagramClassType); if (diagrams.Count == 0) { continue; } foreach (Diagram d in diagrams) { if (d.IsVisible && d.CanHostShape(shapeId)) { if (!DiagramHelper.IsElementDisplayedOn(d, shapeId, modelElement.Id)) { NodeShape shape = topMost.ShapeProvider.CreateShapeForElement(shapeId, modelElement) as NodeShape; d.Children.Add(shape); DiagramsShapeStore.AddToStore(shape.Element.Id, shape.Id); shape.FixUpMissingLinkShapes(); } } } } } }
/// <summary> /// Called whenever a model element is beeing deleted. /// </summary> /// <param name="e"></param> public override void ElementDeleting(ElementDeletingEventArgs e) { base.ElementDeleting(e); DomainModelElement modelElement = e.ModelElement as DomainModelElement; if (modelElement == null) { return; } List <Guid> shapes = GraphicalDependencyShapeStore.GetFromStore(modelElement.Id); if (shapes != null) { modelElement.Store.UndoManager.UndoState = UndoState.DisabledNoFlush; using (Transaction t = modelElement.Store.TransactionManager.BeginTransaction("", true)) { for (int i = shapes.Count - 1; i >= 0; i--) { ShapeElement shape = modelElement.Store.ElementDirectory.FindElement(shapes[i]) as ShapeElement; if (shape != null) { shape.Delete(); } } t.Commit(); } modelElement.Store.UndoManager.UndoState = UndoState.Enabled; } }
public virtual void AddRootShapesForElement(DomainModelElement modelElement)//, bool bIgnoreVisualizationBehavior) { DiagramDomainDataDirectory data = modelElement.Store.DomainDataAdvDirectory.ResolveExtensionDirectory<DiagramDomainDataDirectory>(); IDomainModelServices topMost = modelElement.GetDomainModelServices().TopMostService; List<Guid> shapeIds = data.GetRootShapeTypesForElement(modelElement.GetDomainClassId()); if (shapeIds != null) foreach (Guid shapeId in shapeIds) { ShapeClassInfo shapeInfo = data.ShapeClassInfos[shapeId]; ReadOnlyCollection<ModelElement> diagrams = modelElement.Store.ElementDirectory.FindElements(shapeInfo.DiagramClassType); if (diagrams.Count == 0) continue; foreach (Diagram d in diagrams) { if (d.IsVisible && d.CanHostShape(shapeId)) { if (!DiagramHelper.IsElementDisplayedOn(d, shapeId, modelElement.Id)) { NodeShape shape = topMost.ShapeProvider.CreateShapeForElement(shapeId, modelElement) as NodeShape; d.Children.Add(shape); DiagramsShapeStore.AddToStore(shape.Element.Id, shape.Id); shape.FixUpMissingLinkShapes(); } } } } }
/* * /// <summary> * /// Tries to find a free position on parent and update the location of the shape to that location. * /// </summary> * /// <returns> * /// Coordinates of a free position. * /// </returns> * /// <remarks> * /// Needs to be called within a modeling transaction. * /// </remarks> * public virtual void SetAtFreePositionOnParent() * { * IList<NodeShape> shapes; * if (this.Parent == null) * { * // free position on diagram * Diagram diagram = this.Diagram; * shapes = diagram.Children; * } * else * { * if (this.IsRelativeChildShape) * { * float width = (float)this.Bounds.Width; * float height = (float)this.Bounds.Height; * * float parentWidth = (float)this.Parent.Bounds.Width; * float parentHeight = (float)this.Parent.Bounds.Height; * * Dictionary<PortPlacement, int> dict = new Dictionary<PortPlacement, int>(); * dict.Add(PortPlacement.Left, 0); * dict.Add(PortPlacement.Top, 0); * dict.Add(PortPlacement.Bottom, 0); * dict.Add(PortPlacement.Right, 0); * for (int i = 0; i < this.Parent.RelativeChildren.Count; i++) * { * if (this.Parent.RelativeChildren[i] == this) * continue; * * dict[this.Parent.RelativeChildren[i].PlacementSide]++; * } * List<KeyValuePair<PortPlacement, int>> myList = new List<KeyValuePair<PortPlacement, int>>(dict); * myList.Sort((firstPair, nextPair) => * { * return firstPair.Value.CompareTo(nextPair.Value); * }); * * foreach (KeyValuePair<PortPlacement, int> p in myList) * { * RectangleF rectH; * switch (p.Key) * { * case PortPlacement.Left: * rectH = new RectangleF(-width / 2, 0, width, parentHeight); * break; * * case PortPlacement.Top: * rectH = new RectangleF(0, -height / 2, parentWidth, height); * break; * * case PortPlacement.Right: * rectH = new RectangleF(parentWidth - width / 2, 0, width, parentHeight); * break; * * case PortPlacement.Bottom: * rectH = new RectangleF(0, parentHeight - height / 2, parentWidth, height); * break; * * default: * throw new NotSupportedException(); * } * * if (SetPortAtFreePositionOnParent(p.Key, rectH)) * { * return; * } * } * * this.SetLocation(NodeShape.CorrectPortLocation(this.Parent, this, new PointD(0, 0))); * return; * } * * // free position on parent shape * shapes = this.Parent.NestedChildren; * } * * // trivial algo.. TODO: find something good * RectangleF rect = new RectangleF(0, 0, (float)this.Size.Width, (float)this.Size.Height); * * // find area that is already filled * RectangleF completeBounds = new RectangleF(0, 0, 0, 0); * for (int i = 0; i < shapes.Count; i++) * { * if (shapes[i] == this) * continue; * * if (i == 0) * completeBounds = shapes[i].Bounds.ToRectangleF(); * else * { * RectangleF f = shapes[i].Bounds.ToRectangleF(); * if (completeBounds.X > f.X) * completeBounds.X = f.X; * if (completeBounds.Y > f.Y) * completeBounds.Y = f.Y; * * if (completeBounds.Right < f.Right) * completeBounds.Width = f.Right - completeBounds.X; * * if (completeBounds.Bottom < f.Bottom) * completeBounds.Height = f.Bottom - completeBounds.Y; * } * } * * /* * // see if we can insert shape somewhere in that area * // if not, add shape right at the edge of that area * for (int i = 0; i < shapes.Count; i++) * { * if (shapes[i] == this) * continue; * * // TODO ... (not necessaraly required) * } * * // could not add shape in the completeBounds are, so add it outside of it */ /* * if( completeBounds.Width < completeBounds.Height ) * this.SetLocation(new PointD(completeBounds.Right + 5, 5)); * else * this.SetLocation(new PointD(5, completeBounds.Bottom + 5)); * this.UpdateAbsoluteLocation(); * } * * private bool SetPortAtFreePositionOnParent(PortPlacement side, RectangleF freeRectangle) * { * List<RectangleF> freeRectangles = new List<RectangleF>(); * freeRectangles.Add(freeRectangle); * * for (int i = 0; i < this.Parent.RelativeChildren.Count; i++) * { * if (this.Parent.RelativeChildren[i] == this) * continue; * * if (this.Parent.RelativeChildren[i].PlacementSide != side) * continue; * * RectangleF s = this.Parent.RelativeChildren[i].Bounds.ToRectangleF(); * for (int y = freeRectangles.Count - 1; y >= 0; y--) * { * RectangleF r = freeRectangles[y]; * RectangleF t = r; * r.Intersect(s); * * if (!r.IsEmpty) * { * // remove r from freeRectangley[y] --> yields <=2 rects * // add 2 rects to freeRectangles * freeRectangles.RemoveAt(y); * * switch (side) * { * case PortPlacement.Left: * case PortPlacement.Right: * if (t.Y < r.Y) * { * // first r * RectangleF r1 = new RectangleF(t.X, t.Y, t.Width, r.Y - t.Y); * freeRectangles.Add(r1); * } * * if (r.Bottom < t.Bottom) * { * // second r * RectangleF r2 = new RectangleF(t.X, r.Bottom, t.Width, t.Bottom - r.Bottom); * freeRectangles.Add(r2); * } * break; * * case PortPlacement.Top: * case PortPlacement.Bottom: * if (t.X < r.X) * { * // first r * RectangleF r1 = new RectangleF(t.X, t.Y, r.X-t.X, t.Height); * freeRectangles.Add(r1); * } * * if (r.Right < t.Right) * { * // second r * RectangleF r2 = new RectangleF(r.Right, t.Y, t.Right-r.Right, t.Height); * freeRectangles.Add(r2); * } * break; * } * * } * } * } * * // try to place at a fitting free rectangle * foreach (RectangleF r in freeRectangles) * { * if (r.Width >= this.Bounds.Width && r.Height >= this.Bounds.Height) * { * this.Location = new PointD(r.X, r.Y); * this.PlacementSide = side; * this.UpdateAbsoluteLocation(); * return true; * } * } * * return false; * } */ /// <summary> /// Create missing shapes. /// </summary> public virtual void FixUpMissingShapes() { if (this.Element == null) { return; } DomainModelElement e = this.Element as DomainModelElement; IDomainModelServices topMost = e.GetDomainModelServices().TopMostService; DiagramDomainDataDirectory data = this.Store.DomainDataAdvDirectory.ResolveExtensionDirectory <DiagramDomainDataDirectory>(); List <EmbeddingRelationshipAdvancedInfo> infos = this.Store.DomainDataAdvDirectory.FindDomainClassSourceEmbeddings(e.GetDomainClassId()); if (infos != null) { foreach (EmbeddingRelationshipAdvancedInfo info in infos) { List <Guid> shapes = data.GetShapeTypesForElement(info.TargetElementDomainClassId); if (shapes == null) { continue; } if (shapes.Count == 0) { continue; } ReadOnlyCollection <ElementLink> instances = DomainRoleInfo.GetElementLinks <ElementLink>(this.Element, info.SourceRoleId); foreach (ElementLink link in instances) { DomainModelElement child = DomainRoleInfo.GetTargetRolePlayer(link) as DomainModelElement; if (child == null) { continue; } // see if we need to add shape foreach (Guid elementShapeId in data.GetShapeTypesForElement(child.GetDomainClassId(), this.GetDomainClassId())) { if (!DiagramHelper.IsElementDisplayedOn(this, elementShapeId, child.Id)) { NodeShape shape = topMost.ShapeProvider.CreateShapeForElement(elementShapeId, child) as NodeShape; if (shape.IsRelativeChildShape) { this.AddRelativeChild(shape); } else { this.AddNestedChild(shape); } shape.FixUpMissingShapes(); } } } } } }
/// <summary> /// Called whenever a model element is beeing deleted. /// </summary> /// <param name="e"></param> public override void ElementDeleting(ElementDeletingEventArgs e) { base.ElementDeleting(e); DomainModelElement modelElement = e.ModelElement as DomainModelElement; deletionHelper.DeleteShapesForElement(modelElement); }
public void DeleteShapesForElement(DomainModelElement element) { if (element == null) { return; } DeleteShapesForElement(element.Store, element.Id); }
public virtual void AddRSShapesForElement(DomainModelLink modelElement) { if (modelElement == null) { return; } DomainModelElement m = DomainRoleInfo.GetSourceRolePlayer(modelElement) as DomainModelElement; AddMappingRSShapesForElement(m); }
/// <summary> /// Constuctor. /// </summary> /// <param name="viewModelStore">The store this view model belongs to.</param> /// <param name="element">Element.</param> protected ModalDesignerSurfaceViewModel(ViewModelStore viewModelStore, DomainModelElement element) : base(viewModelStore, null, viewModelStore.ModelData.CurrentModelContext.Name, false) { this.modelElement = element; this.nameExtension = Guid.NewGuid(); this.PreInitialize(); this.Initialize(); // if the hosted element is deleted, we have to close this this.EventManager.GetEvent <ModelElementDeletedEvent>().Subscribe(this.modelElement.Id, OnModelElementDeleted); }
/// <summary> /// Callback from SelectionChangedEvent. /// </summary> /// <param name="eventArgs">SelectionChangedEventArgs.</param> private void ReactOnViewSelection(SelectionChangedEventArgs eventArgs) { this.selectedModelElement = null; if (eventArgs.SelectedItems != null) { if (eventArgs.SelectedItems.Count == 1) { this.selectedModelElement = eventArgs.SelectedItems[0] as DomainModelElement; } } }
/// <summary> /// Adds shapes for a given element. /// </summary> /// <param name="con"></param> internal void AddShapesForElement(DomainModelLink con) { if (con == null) { return; } DomainModelElement parent = DomainRoleInfo.GetSourceRolePlayer(con) as DomainModelElement; DomainModelElement child = DomainRoleInfo.GetTargetRolePlayer(con) as DomainModelElement; AddShapesForElement(parent, child); }
/// <summary> /// Constuctor. /// </summary> /// <param name="viewModelStore">The store this view model belongs to.</param> /// <param name="element">Element.</param> protected ModalDesignerSurfaceViewModel(ViewModelStore viewModelStore, DomainModelElement element) : base(viewModelStore, null, viewModelStore.ModelData.CurrentModelContext.Name, false) { this.modelElement = element; this.nameExtension = Guid.NewGuid(); this.PreInitialize(); this.Initialize(); // if the hosted element is deleted, we have to close this this.EventManager.GetEvent<ModelElementDeletedEvent>().Subscribe(this.modelElement.Id, OnModelElementDeleted); }
public void DeleteShapesForElement(DomainModelElement modelElement) { if (modelElement != null) { List<Guid> shapes = DiagramsShapeStore.GetFromStore(modelElement.Id); if (shapes != null) for (int i = shapes.Count - 1; i >= 0; i--) { NodeShape shape = modelElement.Store.ElementDirectory.FindElement(shapes[i]) as NodeShape; if (shape != null) shape.Delete(); } } }
public virtual void AddMappingRSShapesForElement(DomainModelElement modelElement) { if (modelElement == null) { return; } DiagramDomainDataDirectory data = modelElement.Store.DomainDataAdvDirectory.ResolveExtensionDirectory <DiagramDomainDataDirectory>(); if (data == null) { throw new ArgumentNullException("DiagramDomainDataDirectory"); } List <Guid> shapes = data.GetShapeTypesForElement(modelElement.GetDomainClassId()); if (shapes == null) { return; } foreach (Guid g in shapes) { if (data.MappingRelationshipShapeInfos.ContainsKey(g)) { MappingRelationshipShapeInfo info = data.MappingRelationshipShapeInfos[g]; // see if the required relationships exist ReadOnlyCollection <ElementLink> colSource = DomainRoleInfo.GetElementLinks <ElementLink>(modelElement, info.SourceDomainRole); if (colSource.Count != 1) { return; } ReadOnlyCollection <ElementLink> colTarget = DomainRoleInfo.GetElementLinks <ElementLink>(modelElement, info.TargetDomainRole); if (colTarget.Count != 1) { return; } DomainModelElement source = DomainRoleInfo.GetTargetRolePlayer(colSource[0]) as DomainModelElement; DomainModelElement target = DomainRoleInfo.GetTargetRolePlayer(colTarget[0]) as DomainModelElement; AddRSShapesForElement(source, target, modelElement, g); } } }
/// <summary> /// Clean up. /// </summary> protected override void OnDispose() { if (this.modelElement != null) { this.EventManager.GetEvent <ModelElementDeletedEvent>().Unsubscribe(this.modelElement.Id, OnModelElementDeleted); BaseModelElementViewModel v = this.modelElementVM; this.modelElementVM = null; OnPropertyChanged("HostedElementVM"); v.Dispose(); this.modelElement = null; } base.OnDispose(); }
/// <summary> /// Adds shapes for a given element. /// </summary> /// <param name="parent">Model element.</param> /// <param name="child"></param> internal void AddShapesForElement(DomainModelElement parent, DomainModelElement child) { if (parent == null || child == null) { return; } DiagramDomainDataDirectory data = child.Store.DomainDataAdvDirectory.ResolveExtensionDirectory <DiagramDomainDataDirectory>(); IDomainModelServices topMost = child.GetDomainModelServices().TopMostService; // find parent shapes List <Guid> shapeIds = DiagramsShapeStore.GetFromStore(parent.Id); if (shapeIds != null) { foreach (Guid shapeId in shapeIds) { // see if each parent shape has a child shape already added to it NodeShape parentShape = child.Store.ElementDirectory.FindElement(shapeId) as NodeShape; if (parentShape == null) { continue; } foreach (Guid elementShapeId in data.GetShapeTypesForElement(child.GetDomainClassId(), parentShape.GetDomainClassId())) { if (!DiagramHelper.IsElementDisplayedOn(parentShape, elementShapeId, child.Id)) { NodeShape shape = topMost.ShapeProvider.CreateShapeForElement(elementShapeId, child) as NodeShape; if (shape.IsRelativeChildShape) { parentShape.AddRelativeChild(shape); } else { parentShape.AddNestedChild(shape); } shape.SetAtFreePositionOnParent(); } } } } //AddRootShapesForElement(child, false); AddRootShapesForElement(child); }
public void DeleteShapesForElement(DomainModelElement modelElement) { if (modelElement != null) { List <Guid> shapes = DiagramsShapeStore.GetFromStore(modelElement.Id); if (shapes != null) { for (int i = shapes.Count - 1; i >= 0; i--) { NodeShape shape = modelElement.Store.ElementDirectory.FindElement(shapes[i]) as NodeShape; if (shape != null) { shape.Delete(); } } } } }
public virtual void AddRSShapesForElement(DomainModelElement sourceElement, DomainModelElement targetElement, ModelElement con, Guid shapeType) { List <Guid> shapeIdsSource = DiagramsShapeStore.GetFromStore(sourceElement.Id); List <Guid> shapeIdsTarget = DiagramsShapeStore.GetFromStore(targetElement.Id); if (shapeIdsSource == null || shapeIdsTarget == null) { return; } if (shapeIdsSource.Count == 0 || shapeIdsTarget.Count == 0) { return; } IDomainModelServices topMost = sourceElement.GetDomainModelServices().TopMostService; foreach (Guid sourceShapeId in shapeIdsSource) { NodeShape sourceShape = con.Store.ElementDirectory.FindElement(sourceShapeId) as NodeShape; if (sourceShape == null) { continue; } foreach (Guid targetShapeId in shapeIdsTarget) { NodeShape targetShape = con.Store.ElementDirectory.FindElement(targetShapeId) as NodeShape; if (targetShape != null) { if (sourceShape.Diagram == targetShape.Diagram) { if (!DiagramHelper.IsLinkDisplayedOn(sourceShape.Diagram, shapeType, con.Id, sourceShape.Id, targetShape.Id)) { LinkShape shape = topMost.ShapeProvider.CreateShapeForElementLink(shapeType, con, sourceShape, targetShape) as LinkShape; sourceShape.Diagram.LinkShapes.Add(shape); shape.Layout(FixedGeometryPoints.None); } } } } } }
/// <summary> /// Restore the VM based on stored information. /// </summary> /// <param name="element">Info.</param> /// <returns> /// True if the restore process was successful. False otherwise. /// </returns> public virtual bool Restore(XElement element) { try { string nameExtensionValue = element.Element("NameExtenstion").Value; string elementIdValue = element.Element("HostedElementId").Value; this.nameExtension = new Guid(nameExtensionValue); Guid elementId = new Guid(elementIdValue); DomainModelElement e = this.Store.ElementDirectory.FindElement(elementId) as DomainModelElement; if (e != null) { this.modelElement = e; this.Initialize(); return(true); } } catch { } return(false); }
/// <summary> /// Clean up. /// </summary> protected override void OnDispose() { if (this.modelElement != null) { this.EventManager.GetEvent<ModelElementDeletedEvent>().Unsubscribe(this.modelElement.Id, OnModelElementDeleted); BaseModelElementViewModel v = this.modelElementVM; this.modelElementVM = null; OnPropertyChanged("HostedElementVM"); v.Dispose(); this.modelElement = null; } base.OnDispose(); }
/// <summary> /// Adds shapes for a given element. /// </summary> /// <param name="parent">Model element.</param> /// <param name="child"></param> internal void AddShapesForElement(DomainModelElement parent, DomainModelElement child) { if (parent == null || child == null) return; DiagramDomainDataDirectory data = child.Store.DomainDataAdvDirectory.ResolveExtensionDirectory<DiagramDomainDataDirectory>(); IDomainModelServices topMost = child.GetDomainModelServices().TopMostService; // find parent shapes List<Guid> shapeIds = DiagramsShapeStore.GetFromStore(parent.Id); if (shapeIds != null) foreach (Guid shapeId in shapeIds) { // see if each parent shape has a child shape already added to it NodeShape parentShape = child.Store.ElementDirectory.FindElement(shapeId) as NodeShape; if (parentShape == null) continue; foreach (Guid elementShapeId in data.GetShapeTypesForElement(child.GetDomainClassId(), parentShape.GetDomainClassId())) { if (!DiagramHelper.IsElementDisplayedOn(parentShape, elementShapeId, child.Id)) { NodeShape shape = topMost.ShapeProvider.CreateShapeForElement(elementShapeId, child) as NodeShape; if (shape.IsRelativeChildShape) parentShape.AddRelativeChild(shape); else parentShape.AddNestedChild(shape); shape.SetAtFreePositionOnParent(); } } } //AddRootShapesForElement(child, false); AddRootShapesForElement(child); }
public virtual void AddRSShapesForElement(DomainModelElement sourceElement, DomainModelElement targetElement, ModelElement con, Guid shapeType) { List<Guid> shapeIdsSource = DiagramsShapeStore.GetFromStore(sourceElement.Id); List<Guid> shapeIdsTarget = DiagramsShapeStore.GetFromStore(targetElement.Id); if (shapeIdsSource == null || shapeIdsTarget == null) return; if (shapeIdsSource.Count == 0 || shapeIdsTarget.Count == 0) return; IDomainModelServices topMost = sourceElement.GetDomainModelServices().TopMostService; foreach (Guid sourceShapeId in shapeIdsSource) { NodeShape sourceShape = con.Store.ElementDirectory.FindElement(sourceShapeId) as NodeShape; if (sourceShape == null) continue; foreach (Guid targetShapeId in shapeIdsTarget) { NodeShape targetShape = con.Store.ElementDirectory.FindElement(targetShapeId) as NodeShape; if( targetShape != null ) if (sourceShape.Diagram == targetShape.Diagram) { if (!DiagramHelper.IsLinkDisplayedOn(sourceShape.Diagram, shapeType, con.Id, sourceShape.Id, targetShape.Id)) { LinkShape shape = topMost.ShapeProvider.CreateShapeForElementLink(shapeType, con, sourceShape, targetShape) as LinkShape; sourceShape.Diagram.LinkShapes.Add(shape); shape.Layout(FixedGeometryPoints.None); } } } } }
/// <summary> /// Restore the VM based on stored information. /// </summary> /// <param name="element">Info.</param> /// <returns> /// True if the restore process was successful. False otherwise. /// </returns> public virtual bool Restore(XElement element) { try { string nameExtensionValue = element.Element("NameExtenstion").Value; string elementIdValue = element.Element("HostedElementId").Value; this.nameExtension = new Guid(nameExtensionValue); Guid elementId = new Guid(elementIdValue); DomainModelElement e = this.Store.ElementDirectory.FindElement(elementId) as DomainModelElement; if (e != null) { this.modelElement = e; this.Initialize(); return true; } } catch { } return false; }
/// <summary> /// Not required. /// </summary> /// <param name="element"></param> /// <returns></returns> public override bool IsInsertableRootItem(DomainModelElement element) { throw new NotImplementedException(); }
/// <summary> /// Constructor. The view model constructed this way does not react on model changes, as such DoHookUpEvents is false. /// </summary> /// <param name="viewModelStore">The store this view model belongs to.</param> /// <param name="element">Element represented by this view model.</param> public ExampleElementViewModel(ViewModelStore viewModelStore, DomainModelElement element) : base(viewModelStore, element) { LocalChildrenCount = element.GetLocalChildren().Count.ToString(); ChildrenCount = element.GetChildren().Count.ToString(); }