/// <summary> /// Constructor. This view model constructed with 'bHookUpEvents=true' does react on model changes. /// </summary> /// <param name="viewModelStore">The store this view model belongs to.</param> /// <param name="embeddingDiagramNode">Element represented by this view model.</param> public EmbeddingDiagramNodeViewModel(ViewModelStore viewModelStore, EmbeddingDiagramNode embeddingDiagramNode, EmbeddingDiagramNodeViewModel parent) : base(viewModelStore, embeddingDiagramNode) { this.parent = parent; this.embeddingNodeVMs = new ObservableCollection<EmbeddingDiagramNodeViewModel>(); this.embeddingNodeVMsRO = new ReadOnlyObservableCollection<EmbeddingDiagramNodeViewModel>(this.embeddingNodeVMs); if (this.EmbeddingDiagramNode != null) { foreach (EmbeddingDiagramNode node in this.EmbeddingDiagramNode.EmbeddingDiagramNodes) this.AddEmbeddingDiagramNode(node); this.EventManager.GetEvent<ModelElementPropertyChangedEvent>().Subscribe(this.EmbeddingDiagramNode.Id, new Action<ElementPropertyChangedEventArgs>(OnElementPropertyChanged)); this.EventManager.GetEvent<ModelElementLinkAddedEvent>().Subscribe(this.Store.DomainDataDirectory.GetDomainRelationship(EmbeddingDiagramNodeHasEmbeddingDiagramNodes.DomainClassId), true, this.EmbeddingDiagramNode.Id, new Action<ElementAddedEventArgs>(OnEmbeddingDiagramNodeAdded)); this.EventManager.GetEvent<ModelElementLinkDeletedEvent>().Subscribe(this.Store.DomainDataDirectory.GetDomainRelationship(EmbeddingDiagramNodeHasEmbeddingDiagramNodes.DomainClassId), true, this.EmbeddingDiagramNode.Id, new Action<ElementDeletedEventArgs>(OnEmbeddingDiagramNodeRemoved)); this.EventManager.GetEvent<ModelRolePlayerMovedEvent>().Subscribe(this.Store.DomainDataDirectory.GetDomainRelationship(EmbeddingDiagramNodeHasEmbeddingDiagramNodes.DomainClassId), this.EmbeddingDiagramNode.Id, new Action<RolePlayerOrderChangedEventArgs>(OnEmbeddingDiagramNodeMoved)); this.EventManager.GetEvent<ModelRolePlayerChangedEvent>().Subscribe(this.Store.DomainDataDirectory.GetDomainRole(EmbeddingDiagramNodeHasEmbeddingDiagramNodes.SourceEmbeddingDiagramNodeDomainRoleId), new Action<RolePlayerChangedEventArgs>(OnEmbeddingDiagramNodeChanged)); } expandCollapseTreeCommand = new DelegateCommand(ExpandCollapseTreeCommand_Executed); }
/// <summary> /// Constructor. This view model constructed with 'bHookUpEvents=true' does react on model changes. /// </summary> /// <param name="viewModelStore">The store this view model belongs to.</param> /// <param name="embeddingDiagramNode">Element represented by this view model.</param> public EmbeddingDiagramNodeViewModel(ViewModelStore viewModelStore, EmbeddingDiagramNode embeddingDiagramNode, EmbeddingDiagramNodeViewModel parent) : base(viewModelStore, embeddingDiagramNode) { this.parent = parent; this.embeddingNodeVMs = new ObservableCollection <EmbeddingDiagramNodeViewModel>(); this.embeddingNodeVMsRO = new ReadOnlyObservableCollection <EmbeddingDiagramNodeViewModel>(this.embeddingNodeVMs); if (this.EmbeddingDiagramNode != null) { foreach (EmbeddingDiagramNode node in this.EmbeddingDiagramNode.EmbeddingDiagramNodes) { this.AddEmbeddingDiagramNode(node); } this.EventManager.GetEvent <ModelElementPropertyChangedEvent>().Subscribe(this.EmbeddingDiagramNode.Id, new Action <ElementPropertyChangedEventArgs>(OnElementPropertyChanged)); this.EventManager.GetEvent <ModelElementLinkAddedEvent>().Subscribe(this.Store.DomainDataDirectory.GetDomainRelationship(EmbeddingDiagramNodeHasEmbeddingDiagramNodes.DomainClassId), true, this.EmbeddingDiagramNode.Id, new Action <ElementAddedEventArgs>(OnEmbeddingDiagramNodeAdded)); this.EventManager.GetEvent <ModelElementLinkDeletedEvent>().Subscribe(this.Store.DomainDataDirectory.GetDomainRelationship(EmbeddingDiagramNodeHasEmbeddingDiagramNodes.DomainClassId), true, this.EmbeddingDiagramNode.Id, new Action <ElementDeletedEventArgs>(OnEmbeddingDiagramNodeRemoved)); this.EventManager.GetEvent <ModelRolePlayerMovedEvent>().Subscribe(this.Store.DomainDataDirectory.GetDomainRelationship(EmbeddingDiagramNodeHasEmbeddingDiagramNodes.DomainClassId), this.EmbeddingDiagramNode.Id, new Action <RolePlayerOrderChangedEventArgs>(OnEmbeddingDiagramNodeMoved)); this.EventManager.GetEvent <ModelRolePlayerChangedEvent>().Subscribe(this.Store.DomainDataDirectory.GetDomainRole(EmbeddingDiagramNodeHasEmbeddingDiagramNodes.SourceEmbeddingDiagramNodeDomainRoleId), new Action <RolePlayerChangedEventArgs>(OnEmbeddingDiagramNodeChanged)); } expandCollapseTreeCommand = new DelegateCommand(ExpandCollapseTreeCommand_Executed); }
public static void UnparentShape(ShapeClass shapeClass) { EmbeddingDiagramNode node = shapeClass.DiagramTreeNode as EmbeddingDiagramNode; if (node == null) { return; } if (shapeClass != null) { shapeClass.Parent.Children.Remove(shapeClass); //shapeClass.DiagramTreeNode = null; } RootDiagramNode rootNode = new RootDiagramNode(shapeClass.Store); List <EmbeddingDiagramNode> nodesToMove = new List <EmbeddingDiagramNode>(); foreach (EmbeddingDiagramNode n in node.EmbeddingDiagramNodes) { nodesToMove.Add(n); } foreach (EmbeddingDiagramNode n in nodesToMove) { n.SourceEmbeddingDiagramNode = rootNode; } shapeClass.DiagramTreeNode = rootNode; shapeClass.DiagramClass.DiagramClassView.RootDiagramNodes.Add(rootNode); }
private static void FixUpDiagramView(LibraryModelContext model) { foreach (DiagramClass diagramClass in model.DiagramClasses) { DiagramClassView vm = new DiagramClassView(model.Store); vm.IsExpanded = true; vm.DiagramClass = diagramClass; // add shapes views foreach (PresentationElementClass p in diagramClass.PresentationElements) { if (p is ShapeClass) { ShapeClass shapeClass = p as ShapeClass; if (shapeClass.Parent == null) { RootDiagramNode node = new RootDiagramNode(p.Store); node.PresentationElementClass = p; vm.RootDiagramNodes.Add(node); } else { EmbeddingDiagramNode newNode = new EmbeddingDiagramNode(model.Store); newNode.PresentationElementClass = p; } } else { RootDiagramNode node = new RootDiagramNode(p.Store); node.PresentationElementClass = p; vm.RootDiagramNodes.Add(node); } } foreach (PresentationElementClass p in diagramClass.PresentationElements) { if (p is ShapeClass) { ShapeClass shapeClass = p as ShapeClass; if (shapeClass.Parent != null) { EmbeddingDiagramNode source = shapeClass.Parent.DiagramTreeNode as EmbeddingDiagramNode; EmbeddingDiagramNode target = p.DiagramTreeNode as EmbeddingDiagramNode; if (source != null && target != null) { new EmbeddingDiagramNodeHasEmbeddingDiagramNodes(source, target); } } } } model.ViewContext.DiagramView.DiagramClassViews.Add(vm); } }
/// <summary> /// Deletes the view model that is hosting the given node. /// </summary> /// <param name="node">Node.</param> public void DeleteEmbeddingDiagramNode(EmbeddingDiagramNode node) { for (int i = this.embeddingNodeVMs.Count - 1; i >= 0; i--) { if (this.embeddingNodeVMs[i].EmbeddingDiagramNode.Id == node.Id) { this.embeddingNodeVMs[i].Dispose(); this.embeddingNodeVMs.RemoveAt(i); } } foreach (EmbeddingDiagramNodeViewModel vm in this.embeddingNodeVMs) { vm.UpdateNodePosition(); } OnPropertyChanged("HasEmbeddingNodes"); }
/// <summary> /// Adds a new embedding view model for the given node. /// </summary> /// <param name="node">Node.</param> public void AddEmbeddingDiagramNode(EmbeddingDiagramNode node) { // verify that node hasnt been added yet foreach (EmbeddingDiagramNodeViewModel viewModel in this.embeddingNodeVMs) { if (viewModel.EmbeddingDiagramNode.Id == node.Id) { return; } } EmbeddingDiagramNodeViewModel vm = new EmbeddingDiagramNodeViewModel(this.ViewModelStore, node, this); this.embeddingNodeVMs.Add(vm); foreach (EmbeddingDiagramNodeViewModel viewModel in this.embeddingNodeVMs) { viewModel.UpdateNodePosition(); } OnPropertyChanged("HasEmbeddingNodes"); }
/// <summary> /// ReparentCommand executed. /// </summary> private void ReparentCommand_Executed() { if (this.SelectedItems.Count == 0) return; if (!(this.SelectedItems[0] is EmbeddingDiagramNodeViewModel)) return; EmbeddingDiagramNodeViewModel vm = this.SelectedItems[0] as EmbeddingDiagramNodeViewModel; EmbeddingDiagramNode node = vm.EmbeddingDiagramNode; ShapeClass shapeClass = node.PresentationElementClass as ShapeClass; if (node == null || shapeClass == null) return; List<ShapeClass> sortedClasses = new List<ShapeClass>(); foreach (PresentationElementClass p in shapeClass.DiagramClass.PresentationElements) if (p is ShapeClass && p != shapeClass) { // lets see if this element is child of node.PresentationElementClass if (shapeClass.Parent == p) continue; if (!shapeClass.ContainsChild(p as ShapeClass)) sortedClasses.Add(p as ShapeClass); } sortedClasses.Sort(CompareShapeClassesByName); List<SelectableViewModel> vms = new List<SelectableViewModel>(); foreach (ShapeClass d in sortedClasses) vms.Add(new SelectableViewModel(this.ViewModelStore, d)); SelectionViewModel selectionVM = new SelectionViewModel(this.ViewModelStore, vms); bool? result = this.GlobalServiceProvider.Resolve<IUIVisualizerService>().ShowDialog("TargetSelectorForm", selectionVM); if (result == true) { if (selectionVM.SelectedViewModel != null) { ShapeClass selectedShapeClass = selectionVM.SelectedViewModel.Element as ShapeClass; using (Transaction transaction = Store.TransactionManager.BeginTransaction("Unparent")) { // move element shapeClass.Parent = selectedShapeClass; EmbeddingDiagramNode embeddingNode = new EmbeddingDiagramNode(this.Store); List<EmbeddingDiagramNode> nodesToMove = new List<EmbeddingDiagramNode>(); foreach (EmbeddingDiagramNode n in node.EmbeddingDiagramNodes) nodesToMove.Add(n); foreach (EmbeddingDiagramNode n in nodesToMove) { n.SourceEmbeddingDiagramNode = embeddingNode; } embeddingNode.SourceEmbeddingDiagramNode = selectedShapeClass.DiagramTreeNode as EmbeddingDiagramNode; shapeClass.DiagramTreeNode = embeddingNode; node.Delete(); transaction.Commit(); } } } selectionVM.Dispose(); GC.Collect(); }
/// <summary> /// AddNewShapeClass command executed. /// </summary> private void AddNewShapeClassCommand_Executed() { using (Transaction transaction = Store.TransactionManager.BeginTransaction("Add new shape class")) { foreach (BaseModelElementViewModel vm in this.SelectedItems) if (vm is DiagramClassViewModel) { ShapeClass shape = DiagramTreeOperations.CreateShapeClass((vm as DiagramClassViewModel).DiagramClassView.DiagramClass); RootDiagramNode node = new RootDiagramNode(this.Store); node.PresentationElementClass = shape; (vm as DiagramClassViewModel).DiagramClassView.RootDiagramNodes.Add(node); } else if (vm is EmbeddingDiagramNodeViewModel) { ShapeClass orgShape = (vm as EmbeddingDiagramNodeViewModel).EmbeddingDiagramNode.PresentationElementClass as ShapeClass; ShapeClass shape = DiagramTreeOperations.CreateShapeClass(orgShape.DiagramClass); EmbeddingDiagramNode newNode = new EmbeddingDiagramNode(this.Store); newNode.PresentationElementClass = shape; orgShape.Children.Add(shape); if (orgShape.DiagramTreeNode is EmbeddingDiagramNode) newNode.SourceEmbeddingDiagramNode = orgShape.DiagramTreeNode as EmbeddingDiagramNode; } transaction.Commit(); } }
/// <summary> /// Deletes the view model that is hosting the given node. /// </summary> /// <param name="node">Node.</param> public void DeleteEmbeddingDiagramNode(EmbeddingDiagramNode node) { for (int i = this.embeddingNodeVMs.Count - 1; i >= 0; i--) if (this.embeddingNodeVMs[i].EmbeddingDiagramNode.Id == node.Id) { this.embeddingNodeVMs[i].Dispose(); this.embeddingNodeVMs.RemoveAt(i); } foreach (EmbeddingDiagramNodeViewModel vm in this.embeddingNodeVMs) vm.UpdateNodePosition(); OnPropertyChanged("HasEmbeddingNodes"); }
/// <summary> /// Adds a new embedding view model for the given node. /// </summary> /// <param name="node">Node.</param> public void AddEmbeddingDiagramNode(EmbeddingDiagramNode node) { // verify that node hasnt been added yet foreach (EmbeddingDiagramNodeViewModel viewModel in this.embeddingNodeVMs) if (viewModel.EmbeddingDiagramNode.Id == node.Id) return; EmbeddingDiagramNodeViewModel vm = new EmbeddingDiagramNodeViewModel(this.ViewModelStore, node, this); this.embeddingNodeVMs.Add(vm); foreach (EmbeddingDiagramNodeViewModel viewModel in this.embeddingNodeVMs) viewModel.UpdateNodePosition(); OnPropertyChanged("HasEmbeddingNodes"); }
private static void FixUpDiagramView(LibraryModelContext model) { foreach (DiagramClass diagramClass in model.DiagramClasses) { DiagramClassView vm = new DiagramClassView(model.Store); vm.IsExpanded = true; vm.DiagramClass = diagramClass; // add shapes views foreach (PresentationElementClass p in diagramClass.PresentationElements) { if (p is ShapeClass) { ShapeClass shapeClass = p as ShapeClass; if (shapeClass.Parent == null) { RootDiagramNode node = new RootDiagramNode(p.Store); node.PresentationElementClass = p; vm.RootDiagramNodes.Add(node); } else { EmbeddingDiagramNode newNode = new EmbeddingDiagramNode(model.Store); newNode.PresentationElementClass = p; } } else { RootDiagramNode node = new RootDiagramNode(p.Store); node.PresentationElementClass = p; vm.RootDiagramNodes.Add(node); } } foreach (PresentationElementClass p in diagramClass.PresentationElements) { if (p is ShapeClass) { ShapeClass shapeClass = p as ShapeClass; if (shapeClass.Parent != null) { EmbeddingDiagramNode source = shapeClass.Parent.DiagramTreeNode as EmbeddingDiagramNode; EmbeddingDiagramNode target = p.DiagramTreeNode as EmbeddingDiagramNode; if (source != null && target != null) new EmbeddingDiagramNodeHasEmbeddingDiagramNodes(source, target); } } } model.ViewContext.DiagramView.DiagramClassViews.Add(vm); } }