/// <summary> /// Called after OpenXMLFileDialog has closed successfully. Clears then populates PulseTree based on contents of chosen XML File. /// </summary> void OpenXMLFile() { XmlTextReader XMLFile = new XmlTextReader(openXMLFileDialog.FileName); List <TreeNode> NodeList = new List <TreeNode>(); PulseTree.BeginUpdate(); PulseTree.Nodes.Clear(); while (XMLFile.Read()) { if (XMLFile.NodeType == XmlNodeType.Element) { if (XMLFile.Name.ToUpper() == "Pulse".ToUpper()) { LaserState State = CreateStateFromXMLLine(XMLFile); TreeNode Node = new TreeNode(); Node.Text = State.Name; Node.Tag = State; NodeList.Add(Node); } else if (XMLFile.Name.ToUpper() == "Loop".ToUpper()) { LoopState Loop = new LoopState(); while (XMLFile.MoveToNextAttribute()) { if (XMLFile.Name.ToUpper() == "LoopCount".ToUpper()) { Loop.LoopCount = System.Int32.Parse(XMLFile.Value); } else if (XMLFile.Name.ToUpper() == "Name".ToUpper()) { Loop.Name = XMLFile.Value; } else if (XMLFile.Name.ToUpper() == "FPGALoop".ToUpper()) { Loop.bIsFPGALoop = System.Boolean.Parse(XMLFile.Value); } } TreeNode Node = ReadLoopIntoNode(new TreeNode(), XMLFile); Node.Text = Loop.Name; Node.Text += " (Loop x" + Loop.LoopCount + ")"; Node.Tag = Loop; NodeList.Add(Node); } } } PulseTree.Nodes.AddRange(NodeList.ToArray()); PulseTree.CollapseAll(); PulseTree.EndUpdate(); XMLFile.Close(); }
private void CreateFromTemplateButton_Click(object sender, EventArgs e) { if (PulseTree.Nodes.Count == 0) { WriteMessage("Can't create pulse sequence: No laser states have been set", true); return; } RabiSelector myRabiSelector = new RabiSelector(PulseTree.Nodes); myRabiSelector.startExperimentButton.Enabled = false; myRabiSelector.ShowDialog(); // If user did not press OK, don't do anything else in this method if (myRabiSelector.DialogResult != DialogResult.OK) { return; } // Create new treeview object to build new pulse tree into TreeView newPulseTree = new TreeView(); // Grab sweep parameters from form int startLength = (int)myRabiSelector.startLengthSelect.Value; int stepSize = (int)myRabiSelector.stepSizeSelect.Value; int steps = (int)myRabiSelector.stepsSelect.Value; int repeats = (int)myRabiSelector.repeatsSelect.Value; int pulseLength = new int(); // Create the Rabi-type sequence using data from form LoopState[] myLoopStates = new LoopState[steps]; TreeNode[] myLoopNodes = new TreeNode[steps]; LaserState[] myLaserStates = new LaserState[steps]; TreeNode[] myLaserNodes = new TreeNode[steps]; // For each step for (int i = 0; i < steps; i++) { // Calculate pulse length pulseLength = startLength + i * stepSize; // Add a new loop with this pulse length addRabiLoop(newPulseTree, myLoopStates[i], myLoopNodes[i], myLaserStates[i], myLaserNodes[i], pulseLength, repeats); } // Create 'Stop Experiment' state LaserState stop = new LaserState(); stop.Name = "Stop Experiment"; stop.StateType = LaserState.PulseType.STOP; // Add 'Stop Experiment' state as a node to new pulse tree TreeNode stopNode = newPulseTree.Nodes.Add(stop.Name); stopNode.Tag = stop; // Disable redrawing while we update PulseTree.BeginUpdate(); // Clear old nodes from PulseTree PulseTree.Nodes.Clear(); // Clone nodes from newPulseTree into main PulseTree control for (int i = 0; i < newPulseTree.Nodes.Count; i++) { PulseTree.Nodes.Add((TreeNode)newPulseTree.Nodes[i].Clone()); } PulseTree.CollapseAll(); PulseTree.EndUpdate(); // Re-enable redrawing }