private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
        {
            int indexOfWait = contextMenuStrip1.Items.IndexOf(waitTimeoutLabel);

            if (waitTimeEditor != null)
            {
                if (contextMenuStrip1.Items.Contains(waitTimeEditor))
                {
                    contextMenuStrip1.Items.Remove(waitTimeEditor);
                }
                waitTimeEditor = null;
            }

            waitTimeEditor = new ToolStripNumericOrVariableEditor(StepData.RetriggerOptions.RetriggerTimeout, true);
            if (StepData.RetriggerOptions.WaitForRetrigger)
            {
                waitTimeEditor.Enabled   = true;
                waitTimeoutLabel.Enabled = true;
                negativeRetriggerEdgeOrValueToolStripMenuItem.Enabled = true;
                edgeRetriggerToolStripMenuItem.Enabled = true;
            }
            else
            {
                waitTimeoutLabel.Enabled = false;
                waitTimeEditor.Enabled   = false;
                negativeRetriggerEdgeOrValueToolStripMenuItem.Enabled = false;
                edgeRetriggerToolStripMenuItem.Enabled = false;
            }

            contextMenuStrip1.Items.Insert(indexOfWait + 1, waitTimeEditor);
        }
        private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
        {
            int indexOfWait = contextMenuStrip1.Items.IndexOf(waitTimeoutLabel);
            if (waitTimeEditor != null)
            {
                if (contextMenuStrip1.Items.Contains(waitTimeEditor))
                    contextMenuStrip1.Items.Remove(waitTimeEditor);
                waitTimeEditor = null;
            }

            waitTimeEditor = new ToolStripNumericOrVariableEditor(StepData.RetriggerOptions.RetriggerTimeout, true);
            if (StepData.RetriggerOptions.WaitForRetrigger)
            {
                waitTimeEditor.Enabled = true;
                waitTimeoutLabel.Enabled = true;
                negativeRetriggerEdgeOrValueToolStripMenuItem.Enabled = true;
                edgeRetriggerToolStripMenuItem.Enabled = true;
            }
            else
            {
                waitTimeoutLabel.Enabled = false;
                waitTimeEditor.Enabled = false;
                negativeRetriggerEdgeOrValueToolStripMenuItem.Enabled = false;
                edgeRetriggerToolStripMenuItem.Enabled = false;
            }

            contextMenuStrip1.Items.Insert(indexOfWait + 1, waitTimeEditor);
        }
        /// <summary>
        /// This method programatically builds the drop-down UI for timestep group editing
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void timestepGroupsToolStripMenuItem_DropDownOpening(object sender, EventArgs e)
        {
            timestepGroupsToolStripMenuItem.DropDownItems.Clear();
            foreach (TimestepGroup tsg in Storage.sequenceData.TimestepGroups)
            {
                ToolStripMenuItem item = new ToolStripMenuItem();

                item.Tag = tsg;
                item.Checked = tsg.GroupEnabled;
                item.CheckOnClick = true;
                item.Text = tsg.TimestepGroupName;
                item.CheckedChanged += new EventHandler(timestepGroupItemCheckChanged);

                ToolStripTextBox nameBox = new ToolStripTextBox();
                nameBox.Tag = item;
                nameBox.Text = tsg.TimestepGroupName;
                nameBox.TextChanged += new EventHandler(nameEditBox_TextChanged);

                ToolStripMenuItem deleteGroup = new ToolStripMenuItem();
                deleteGroup.Text = "Delete group.";
                deleteGroup.Tag = tsg;
                deleteGroup.Click += new EventHandler(deleteTimestepGroupClick);

                ToolStripSeparator sep = new ToolStripSeparator();
                ToolStripSeparator sep2 = new ToolStripSeparator();

                ToolStripMenuItem usageCount = new ToolStripMenuItem();
                int i=0;
                foreach (TimeStep step in Storage.sequenceData.TimeSteps)
                {
                    if (step.MyTimestepGroup == tsg)
                        i++;
                }
                usageCount.Text = i.ToString() +  " timestep(s) assigned to this group.";

                ToolStripMenuItem deleteTimestepsAndGroup = new ToolStripMenuItem();
                if (i == 0)
                    deleteTimestepsAndGroup.Enabled = false;
                deleteTimestepsAndGroup.Tag = tsg;
                deleteTimestepsAndGroup.Text = "Delete group and member timesteps.";
                deleteTimestepsAndGroup.Click += new EventHandler(deleteTimestepsAndGroup_Click);

                ToolStripMenuItem loopTsGroup = new ToolStripMenuItem();
                loopTsGroup.Enabled = Storage.sequenceData.TimestepGroupIsLoopable(tsg);
                loopTsGroup.Text = "Loop timestep group.";
                loopTsGroup.Tag = tsg;
                if (loopTsGroup.Enabled)
                {
                    loopTsGroup.Checked = tsg.LoopTimestepGroup;
                    loopTsGroup.CheckOnClick = true;
                    loopTsGroup.CheckedChanged += new EventHandler(loopTsGroup_CheckedChanged);

                    ToolStripMenuItem ph = new ToolStripMenuItem();
                    loopTsGroup.DropDownItems.Add("Number of times to loop:");
                    ToolStripNumericOrVariableEditor lced = new ToolStripNumericOrVariableEditor(tsg.LoopCount, false);
                    loopTsGroup.DropDownItems.Add(lced);
                    lced.valueChanged += new EventHandler(lced_valueChanged);
                }

                item.DropDownItems.Add(nameBox);
                item.DropDownItems.Add(deleteGroup);
                item.DropDownItems.Add(sep);
                item.DropDownItems.Add(usageCount);
                item.DropDownItems.Add(deleteTimestepsAndGroup);
                item.DropDownItems.Add(sep2);
                item.DropDownItems.Add(loopTsGroup);

                timestepGroupsToolStripMenuItem.DropDownItems.Add(item);
            }
            timestepGroupsToolStripMenuItem.DropDownItems.Add(timestepGroupMenuSeparator);
            timestepGroupsToolStripMenuItem.DropDownItems.Add(createNewTimestepGroupButton);
            timestepGroupsToolStripMenuItem.DropDownItems.Add(assignAllMarkedTimestepsToGroupToolStripMenuItem);
            if (markedTimesteps().Count == 0)
            {
                assignAllMarkedTimestepsToGroupToolStripMenuItem.Enabled = false;
                assignMarkedStepsToGroupComboBox.Enabled = false;
                assignToolStripMenuItemAssignButton.Enabled = false;
            }
            else
            {
                assignAllMarkedTimestepsToGroupToolStripMenuItem.Enabled = true;
                assignMarkedStepsToGroupComboBox.Enabled = true;
                assignToolStripMenuItemAssignButton.Enabled = true;
            }
        }