public void LoadDiagram(string filename) { DiagramModel model = xmlSettings.ModelFromSettings(filename); diagramViewModel.ClearDiagram(); using (var bm = new DiagramBatchMode(diagramViewModel)) { Dictionary <DiagramNodeBase, NodeBaseViewModel> nodeDictionary = new Dictionary <DiagramNodeBase, NodeBaseViewModel>(); foreach (var node in model.Nodes) { NodeBaseViewModel nodeViewModel = diagramViewModel.Definition.ModelToViewModel(node); if (nodeViewModel == null) { continue; } diagramViewModel.AddNode(nodeViewModel, node.Location); nodeDictionary.Add(node, nodeViewModel); } // Force rendering so we can have sizes of all nodes // diagramViewModel.ForceRedraw(); foreach (var edge in model.Edges) { diagramViewModel.AddConnection(nodeDictionary[edge.From], nodeDictionary[edge.To]); } // Render again so we can have sizes of attach descriptors diagramViewModel.ForceRedraw(); Console.WriteLine("Model loaded"); // dont need to call RaiseInitialize, it was allready called in AddNode //foreach (var node in diagramViewModel.Nodes) // node.RaiseInitialize(); foreach (var node in diagramViewModel.AttachDescriptors) { node.RaiseInitialize(); } diagramViewModel.ForceRedraw(); } foreach (var conn in diagramViewModel.Edges) { conn.UpdateConnection(); } }
public void QueryPossibleConnections(SelectionMenu menu, DiagramViewModel diagramViewModel, ConnectorViewModel startConnector, Vector2 mousePosition) { var currentGraph = InvertApplication.Container.Resolve <WorkspaceService>().CurrentWorkspace.CurrentGraph; var allowedFilterNodes = FilterExtensions.AllowedFilterNodes[currentGraph.CurrentFilter.GetType()]; foreach (var item in allowedFilterNodes) { if (item.IsInterface) { continue; } if (item.IsAbstract) { continue; } //if(item.FullName == "uFrame.MVVM.ViewNode") continue; var node = Activator.CreateInstance(item) as IDiagramNode; node.Repository = diagramViewModel.CurrentRepository; node.GraphId = currentGraph.Identifier; var vm = InvertGraphEditor.Container.GetNodeViewModel(node, diagramViewModel) as DiagramNodeViewModel; if (vm == null) { continue; } vm.IsCollapsed = false; var connectors = new List <ConnectorViewModel>(); vm.GetConnectors(connectors); var config = InvertGraphEditor.Container.Resolve <NodeConfigBase>(item.Name); var name = config == null ? item.Name : config.Name; foreach (var connector in connectors) { foreach (var strategy in InvertGraphEditor.ConnectionStrategies) { var connection = strategy.Connect(diagramViewModel, startConnector, connector); if (connection == null) { continue; } var node1 = node; var message = string.Format("Create {0}", name); //if (!string.IsNullOrEmpty(connector.Name)) //{ // message += string.Format(" and connect to {0}", connector.Name); //} var value = new KeyValuePair <IDiagramNode, ConnectionViewModel>(node1, connection); var qaItem = new SelectionMenuItem("Connect", message, () => { diagramViewModel.AddNode(value.Key, mousePosition); connection.Apply(value.Value as ConnectionViewModel); value.Key.IsSelected = true; value.Key.IsEditing = true; value.Key.Name = ""; }); menu.AddItem(qaItem); } } } }