public static void Copy(ApplicationContext applicationContext, BaseExperiment originalExperiment) { clipboardComponentGraph = CompositeComponentGraph.ConstructGraphFromSelectedNodes(originalExperiment); foreach (ExperimentNode node in clipboardComponentGraph.Vertices) { node.IsSelected = false; } BasicNodeControl componentControl; foreach (ExperimentNode originalNode in originalExperiment.Vertices) { foreach (ExperimentNode node in clipboardComponentGraph.Vertices) { if (originalNode.ID.Equals(node.ID)) { if (applicationContext.NodeControlFactory.TryGetNodeControl(originalNode, out componentControl)) { node.Data.X = componentControl.DisplayBox.X; node.Data.Y = componentControl.DisplayBox.Y; } } } } }
public static void Paste(BaseExperiment targetExperiment, double x, double y) { if (clipboardComponentGraph == null) return; targetExperiment.CopyAndAdd (clipboardComponentGraph, x, y); }
public static void Paste(ApplicationContext applicationContext, BaseExperiment targetExperiment, double x, double y) { if (clipboardComponentGraph == null) { return; } targetExperiment.CopyAndAdd(clipboardComponentGraph, x, y); }
/// <summary> /// Initializes a new instance of the <see cref="CompositeComponentGraph"/> class /// without reference to any node. /// </summary> /// <param name="componentGraph">The component graph.</param> public CompositeComponentGraph(BaseExperiment componentGraph) : base() { if (componentGraph == null) { throw new ArgumentException("Component graph cannot be null"); } CopyFrom(componentGraph); OwnerNode = null; //does not belong to any node }
// HERZUM SPRINT 3.1 TLAB-180 private void ConstructGraphFromSelectedScopeNodes(BaseExperiment experiment) { if (experiment == null) return; CompositeComponentGraph.CopyAndAdd (CompositeComponentGraph.ConstructGraphFromSelectedNodes (experiment), 200.0, 200.0); foreach (ExperimentNode node in experiment.Vertices) if (!node.IsSelected){ ScopeBaseMetadata scopeBaseMetadata = node.Data.Metadata as ScopeBaseMetadata; if (scopeBaseMetadata!= null && scopeBaseMetadata.ComponentGraph!=null) ConstructGraphFromSelectedScopeNodes(scopeBaseMetadata.ComponentGraph); } }
public static void Copy(BaseExperiment originalExperiment) { // HERZUM SPRINT 4: TLAB-215 if (clipboardComponentGraph != null) clipboardComponentGraph.Clear (); // END HERZUM SPRINT 4: TLAB-215 clipboardComponentGraph = CompositeComponentGraph.ConstructGraphFromSelectedNodes (originalExperiment); foreach (ExperimentNode node in clipboardComponentGraph.Vertices) node.IsSelected = false; }
/* * private ScopeNodeBase GetScopeUp(ExperimentNode experimentNode, BaseExperiment experiment, double x, double y){ * BasicNodeControl componentControl; * ScopeNodeBase scopeUp = null; * ExperimentCanvasPad pad = null; * if (experiment == null) * return null; * foreach (ExperimentNode node in experiment.Vertices) * if (node is ScopeNodeBase && !node.Equals(experimentNode)) * if(m_applicationContext.NodeControlFactory.TryGetNodeControl(node, out componentControl)){ * ScopeBaseMetadata scopeBaseMetadata = node.Data.Metadata as ScopeBaseMetadata; * int xMouse = 0; * int yMouse = 0; * BasicNodeControl internalComponentControl = null; * foreach (ExperimentNode internalNode in scopeBaseMetadata.ComponentGraph.Vertices){ * m_applicationContext.NodeControlFactory.TryGetNodeControl(internalNode, out internalComponentControl) ; * break; * } * if (internalComponentControl == null) * return null; * pad = ExperimentCanvasPadFactory.GetExperimentCanvasPad (m_applicationContext, componentControl); * if (pad == null) * return null; * pad.ExperimentCanvasWidget.GetPointer(out xMouse, out yMouse); * scopeUp = GetScopeUp(experimentNode, scopeBaseMetadata.ComponentGraph as BaseExperiment, xMouse, yMouse); * if (scopeUp != null) * return scopeUp; * ScopeNodeControl scopeNodeControl = componentControl as ScopeNodeControl; * if (scopeNodeControl.ContainsPoint (x, y)) * return node as ScopeNodeBase; * } * return null; * } */ // END HERZUM SPRINT 2.3 TLAB-60 public override ITool CreateFigureTool(IPrimaryToolDelegator mainTool, IDrawingEditor editor, ITool defaultTool, MouseEvent ev) { DragTool dragTool = defaultTool as DragTool; if (dragTool != null) { //when drag is completed update model data dragTool.DragCompleted += (object sender, EventArgs e) => { this.ExperimentNode.Data.X = this.DisplayBox.X; this.ExperimentNode.Data.Y = this.DisplayBox.Y; // HERZUM SPRINT 2.3 TLAB-60 int xMouse = 0; int yMouse = 0; ScopeNodeBase scopeNode = GetScopeUp(ExperimentNode, ExperimentNode.Owner as BaseExperiment, ExperimentNode.Data.X, ExperimentNode.Data.Y); if (scopeNode != null) { ScopeBaseMetadata scopeBaseMetadata = scopeNode.Data.Metadata as ScopeBaseMetadata; BaseExperiment experimentTarget = scopeBaseMetadata.ComponentGraph; BasicNodeControl componentControl = null; ExperimentCanvasPad pad = null; foreach (ExperimentNode node in scopeBaseMetadata.ComponentGraph.Vertices) { m_applicationContext.NodeControlFactory.TryGetNodeControl(node, out componentControl); break; } if (componentControl != null) { pad = ExperimentCanvasPadFactory.GetExperimentCanvasPad(m_applicationContext, componentControl); } if (pad != null) { pad.ExperimentCanvasWidget.GetPointer(out xMouse, out yMouse); // HERZUM SPRINT 2.4 TLAB-56 TLAB-57 TLAB-58 TLAB-59 CLASS //TraceLab.Core.Experiments.Clipboard.Cut(ExperimentNode.Owner as BaseExperiment); //TraceLab.Core.Experiments.Clipboard.Paste(experimentTarget,xMouse,yMouse); DragClipboard.Cut(m_applicationContext, ExperimentNode.Owner as BaseExperiment); DragClipboard.Paste(m_applicationContext, experimentTarget, xMouse, yMouse); // END HERZUM SPRINT 2.4 TLAB-56 TLAB-57 TLAB-58 TLAB-59 CLASS pad.DisplayAddedSubgraph(experimentTarget); } } // END HERZUM SPRINT 2.3 TLAB-60 }; } return(base.CreateFigureTool(mainTool, editor, defaultTool, ev)); }
public static void Copy(ApplicationContext applicationContext, BaseExperiment originalExperiment) { clipboardComponentGraph = CompositeComponentGraph.ConstructGraphFromSelectedNodes (originalExperiment); foreach (ExperimentNode node in clipboardComponentGraph.Vertices) node.IsSelected = false; BasicNodeControl componentControl; foreach (ExperimentNode originalNode in originalExperiment.Vertices) foreach (ExperimentNode node in clipboardComponentGraph.Vertices) if (originalNode.ID.Equals(node.ID)) if(applicationContext.NodeControlFactory.TryGetNodeControl(originalNode, out componentControl)) { node.Data.X = componentControl.DisplayBox.X; node.Data.Y = componentControl.DisplayBox.Y; } }
// HERZUM SPRINT 2.3 TLAB-60 private ScopeNodeBase GetScopeUp(ExperimentNode experimentNode, BaseExperiment experiment, double x, double y) { BasicNodeControl componentControl; foreach (ExperimentNode node in experiment.Vertices) { if (node is ScopeNodeBase && !node.Equals(experimentNode)) { if (m_applicationContext.NodeControlFactory.TryGetNodeControl(node, out componentControl)) { ScopeNodeControl scopeNodeControl = componentControl as ScopeNodeControl; if (scopeNodeControl.ContainsPoint(x, y)) { return(node as ScopeNodeBase); } } } } return(null); }
/// <summary> /// Initializes a new instance of the <see cref="ExperimentViewModel"/> class. /// </summary> /// <param name="experiment">The experiment that this ViewModel represents. This is intentionally NOT the interface</param> public ExperimentViewModel(BaseExperiment experiment) { if (experiment == null) { throw new ArgumentNullException("experiment"); } //determine if experiment is editable IEditableExperiment editableExperiment = experiment as IEditableExperiment; if (editableExperiment != null) { m_topLevel = new TopLevelEditableExperimentViewModel(editableExperiment); } else { m_topLevel = new TopLevelExperimentViewModel(experiment); } m_currentView = m_topLevel; OpenComponentGraph = new DelegateCommand(OpenComponentGraphFunc, CanOpenComponentGraph); RunExperiment = new DelegateCommand(RunExperimentFunc, CanRunExperimentFunc); StopExperiment = new DelegateCommand(StopExperimentFunc, CanStopExperimentFunc); AboutExperimentCommand = new DelegateCommand(DoAboutExperiment); PackExperiment = new DelegateCommand(PackExperimentFunc); //top level does not have parent id AddSubLevels(String.Empty, m_topLevel); experiment.NodeAdded += OnNodeAdded; experiment.NodeRemoved += OnNodeRemoved; experiment.NodeFinished += OnNodeFinished; experiment.NodeHasError += OnNodeHasError; experiment.ExperimentStarted += OnExperimentStarted; experiment.ExperimentCompleted += OnExperimentCompleted; }
/// <summary> /// Initializes a new instance of the <see cref="ExperimentViewModel"/> class. /// </summary> /// <param name="experiment">The experiment that this ViewModel represents. This is intentionally NOT the interface</param> public ExperimentViewModel(BaseExperiment experiment) { if (experiment == null) throw new ArgumentNullException("experiment"); //determine if experiment is editable IEditableExperiment editableExperiment = experiment as IEditableExperiment; if (editableExperiment != null) { m_topLevel = new TopLevelEditableExperimentViewModel(editableExperiment); } else { m_topLevel = new TopLevelExperimentViewModel(experiment); } m_currentView = m_topLevel; OpenComponentGraph = new DelegateCommand(OpenComponentGraphFunc, CanOpenComponentGraph); RunExperiment = new DelegateCommand(RunExperimentFunc, CanRunExperimentFunc); StopExperiment = new DelegateCommand(StopExperimentFunc, CanStopExperimentFunc); AboutExperimentCommand = new DelegateCommand(DoAboutExperiment); PackExperiment = new DelegateCommand(PackExperimentFunc); //top level does not have parent id AddSubLevels(String.Empty, m_topLevel); experiment.NodeAdded += OnNodeAdded; experiment.NodeRemoved += OnNodeRemoved; experiment.NodeFinished += OnNodeFinished; experiment.NodeHasError += OnNodeHasError; experiment.ExperimentStarted += OnExperimentStarted; experiment.ExperimentCompleted += OnExperimentCompleted; }
public static void Cut(ApplicationContext applicationContext, BaseExperiment originalExperiment) { Copy(applicationContext, originalExperiment); CutSelectedNodes(originalExperiment); }
/// <summary> /// Selects the decision and its scopes connected to the given exit node /// </summary> /// <param name="originalExperiment">The original experiment.</param> /// <param name="node">The exit decision node.</param> private static void SelectDecisionsScopesConnectedToExitNode(BaseExperiment originalExperiment, ExperimentNode exitDecisionNode) { //iterate throught all outcoming edges and delete successor nodes IEnumerable<ExperimentNodeConnection> edges; if (originalExperiment.TryGetInEdges(exitDecisionNode, out edges)) { //iterate over the copy of edges, as edges itself are going to be delete when nodes are deleted foreach (ExperimentNodeConnection edge in new List<ExperimentNodeConnection>(edges)) { //check if target is scope or exit, as there are might be old Decision nodes from old experiments //that do not have fixed connections to scopes if (edge.Source is ScopeNode || edge.Source is ExperimentDecisionNode) { if (!edge.Source.IsSelected) edge.Source.IsSelected = true; } } } }
/// <summary> /// Assures that all decision are selected with their scopes. /// If decision has been partially selected, meaning only decision with not all scopes was selected, /// or only some scopes were selected without decision node, this method will select all nodes /// to assure completeness of selection. /// </summary> /// <param name="originalExperiment">The original experiment.</param> private static void AssureCompleteDecisionSelection(BaseExperiment originalExperiment) { foreach (ExperimentNode node in originalExperiment.Vertices) { if (node.IsSelected) { //case 1. node is ExperimentDecisionNode if (node is ExperimentDecisionNode) { SelectDecisionsScopes(originalExperiment, node); } else if (node is ExitDecisionNode) { SelectDecisionsScopesConnectedToExitNode(originalExperiment, node); } else { //case 2. node is a scope node ScopeNode scopeNode = node as ScopeNode; if (scopeNode != null) { if (!scopeNode.DecisionNode.IsSelected) { scopeNode.DecisionNode.IsSelected = true; SelectDecisionsScopes(originalExperiment, scopeNode.DecisionNode); } } } } } }
/// <summary> /// Constructs the graph from selected nodes of the given experiment graph. /// </summary> /// <param name="graph">The graph.</param> /// <returns></returns> public static CompositeComponentGraph ConstructGraphFromSelectedNodes(BaseExperiment originalExperiment) { var compositeComponentGraph = new CompositeComponentGraph(); // Clone experiment info. compositeComponentGraph.ExperimentInfo = new ExperimentInfo(); AssureCompleteDecisionSelection(originalExperiment); //keep lookup from original node to its clone for later edge reproduction Dictionary<ExperimentNode, ExperimentNode> clonedNodeLookup = new Dictionary<ExperimentNode, ExperimentNode>(); // Clone vertices that are selected and add them to the composite component graph foreach (ExperimentNode node in originalExperiment.Vertices) { if (node.IsSelected) { var clonedNode = node.Clone(); clonedNodeLookup[node] = clonedNode; compositeComponentGraph.SetLogLevelSettings(clonedNode, compositeComponentGraph.Settings); compositeComponentGraph.AddVertex(clonedNode); if (clonedNode.ID == "Start" && compositeComponentGraph.StartNode == null) { compositeComponentGraph.StartNode = (ExperimentStartNode)clonedNode; } else if (clonedNode.ID == "End" && compositeComponentGraph.EndNode == null) { compositeComponentGraph.EndNode = (ExperimentEndNode)clonedNode; } } } // Clone edges foreach (ExperimentNodeConnection connection in originalExperiment.Edges) { ExperimentNode cloneSourceNode, cloneTargetNode; //add edges only if both source and target nodes has been found in clones lookup bool foundSourceNode = clonedNodeLookup.TryGetValue(connection.Source, out cloneSourceNode); bool foundTargetNode = clonedNodeLookup.TryGetValue(connection.Target, out cloneTargetNode); if (foundSourceNode && foundTargetNode) { ExperimentNodeConnection clonedConnection = new ExperimentNodeConnection(connection.ID, cloneSourceNode, cloneTargetNode, connection.IsFixed, connection.IsVisible); //copy also all route points clonedConnection.RoutePoints.CopyPointsFrom(connection.RoutePoints); compositeComponentGraph.AddEdge(clonedConnection); //perform fixes for scopes ScopeNodeHelper.TryFixScopeDecisionEntryAndExitNodes(cloneSourceNode, cloneTargetNode); } } ConnectNodesToStartAndEndNode(compositeComponentGraph); //move graph closer to the origin point TraceLab.Core.Utilities.ExperimentHelper.MoveGraphCloserToOriginPoint(compositeComponentGraph, 200, 200); if (originalExperiment.References != null) { if (!TraceLabSDK.RuntimeInfo.IsRunInMono) { compositeComponentGraph.References = new ObservableCollection<TraceLabSDK.PackageSystem.IPackageReference>(originalExperiment.References); } else { // Mono currently has not implemented constructor of ObservableCollection(IEnumerable<T> collection) // thus we have to add references manually compositeComponentGraph.References = new ObservableCollection<TraceLabSDK.PackageSystem.IPackageReference>(); foreach (TraceLabSDK.PackageSystem.IPackageReference reference in originalExperiment.References) { compositeComponentGraph.References.Add(reference); } } } compositeComponentGraph.OwnerNode = null; return compositeComponentGraph; }
// HERZUM SPRINT 2.3 TLAB-60 private ScopeNodeBase GetScopeUp(ExperimentNode experimentNode, BaseExperiment experiment, double x, double y){ BasicNodeControl componentControl; foreach (ExperimentNode node in experiment.Vertices) if (node is ScopeNodeBase && !node.Equals(experimentNode)) if(m_applicationContext.NodeControlFactory.TryGetNodeControl(node, out componentControl)){ ScopeNodeControl scopeNodeControl = componentControl as ScopeNodeControl; if (scopeNodeControl.ContainsPoint (x, y)) return node as ScopeNodeBase; } return null; }
public static void Cut(BaseExperiment originalExperiment) { Copy (originalExperiment); CutSelectedNodes (originalExperiment); }
private static void CutSelectedNodes(BaseExperiment originalExperiment) { originalExperiment.RemoveSelectedVertices (); }
public static void CutSelectedNodes(BaseExperiment originalExperiment) { originalExperiment.RemoveSelectedVertices(); }
public static void Cut(ApplicationContext applicationContext, BaseExperiment originalExperiment) { Copy (applicationContext, originalExperiment); CutSelectedNodes (originalExperiment); }
internal void DisplayAddedSubgraph(BaseExperiment experiment) { foreach(ExperimentNode node in experiment.Vertices) { BasicNodeControl componentControl = null; if (!m_applicationContext.NodeControlFactory.TryGetNodeControl (node, out componentControl)) m_experimentDrawer.DrawComponent(node, true); } foreach(ExperimentNodeConnection edge in experiment.Edges) { NodeConnectionControl componentControl = null; if (!m_applicationContext.NodeConnectionControlFactory.TryGetConnectionControl(edge, out componentControl)) m_experimentDrawer.DrawEdge(edge, true); } }
// HERZUM SPRINT 2.5 TLAB-157 private void ClearWidgets(BaseExperiment experiment) { if (experiment == null) return; foreach(ExperimentNode node in experiment.Vertices) { if (node is ScopeNodeBase) { BasicNodeControl componentControl = null; if (m_applicationContext.NodeControlFactory.TryGetNodeControl (node, out componentControl)){ ScopeNodeControl scopeNodeControl = componentControl as ScopeNodeControl; if (scopeNodeControl != null){ ClearWidgets((node.Data.Metadata as ScopeBaseMetadata).ComponentGraph); OnNodeRemoved (node); } } } if (node is CompositeComponentNode) ClearWidgets((node.Data.Metadata as CompositeComponentBaseMetadata).ComponentGraph); } }