private void uiBtnNew_Click(object sender, EventArgs e)
        {
            //create argument editing form
            frmAddArgument addArgumentForm = new frmAddArgument(_typeContext);

            addArgumentForm.ScriptContext = ScriptContext;
            addArgumentForm.ArgumentsCopy = _argumentsCopy;

            ExpandUserArgumentNode();

            //validate if user added argument
            if (addArgumentForm.ShowDialog() == DialogResult.OK)
            {
                //add newly edited node
                AddUserArgumentNode(_userArgumentParentNode, addArgumentForm.txtArgumentName.Text,
                                    (ScriptArgumentDirection)Enum.Parse(typeof(ScriptArgumentDirection), addArgumentForm.cbxDefaultDirection.Text),
                                    addArgumentForm.txtDefaultValue.Text, (Type)addArgumentForm.cbxDefaultType.Tag);
                LastModifiedArgumentName = addArgumentForm.txtArgumentName.Text;
                ResetArguments();
            }

            addArgumentForm.Dispose();
        }
        private void tvScriptArguments_DoubleClick(object sender, EventArgs e)
        {
            //handle double clicks outside
            if (tvScriptArguments.SelectedNode == null)
            {
                return;
            }

            //if parent was selected return
            if (tvScriptArguments.SelectedNode.Parent == null)
            {
                //user selected top parent
                return;
            }

            //top node check
            var topNode = GetSelectedTopNode();

            if (topNode.Text != "My Task Arguments")
            {
                return;
            }

            string argumentName, argumentValue;
            ScriptArgumentDirection argumentDirection;
            Type     argumentType;
            TreeNode parentNode;

            if (tvScriptArguments.SelectedNode.Nodes.Count == 0)
            {
                parentNode        = tvScriptArguments.SelectedNode.Parent;
                argumentName      = tvScriptArguments.SelectedNode.Parent.Text;
                argumentValue     = tvScriptArguments.SelectedNode.Parent.Nodes[0].Text.Replace(_leadingValue, "").Replace(_emptyValue, "");
                argumentDirection = (ScriptArgumentDirection)Enum.Parse(typeof(ScriptArgumentDirection), tvScriptArguments.SelectedNode.Parent.Nodes[1].Text.Replace(_leadingDirection, ""));
                argumentType      = (Type)tvScriptArguments.SelectedNode.Parent.Nodes[2].Tag;
            }
            else
            {
                parentNode        = tvScriptArguments.SelectedNode;
                argumentName      = tvScriptArguments.SelectedNode.Text;
                argumentValue     = tvScriptArguments.SelectedNode.Nodes[0].Text.Replace(_leadingValue, "").Replace(_emptyValue, "");
                argumentDirection = (ScriptArgumentDirection)Enum.Parse(typeof(ScriptArgumentDirection), tvScriptArguments.SelectedNode.Nodes[1].Text.Replace(_leadingDirection, ""));
                argumentType      = (Type)tvScriptArguments.SelectedNode.Nodes[2].Tag;
            }

            if (argumentName == "ProjectPath")
            {
                return;
            }

            //create argument editing form
            frmAddArgument addArgumentForm = new frmAddArgument(argumentName, argumentDirection, argumentValue, argumentType, _typeContext);

            addArgumentForm.ScriptContext = ScriptContext;
            addArgumentForm.ArgumentsCopy = _argumentsCopy;

            ExpandUserArgumentNode();

            //validate if user added argument
            if (addArgumentForm.ShowDialog() == DialogResult.OK)
            {
                //remove parent
                parentNode.Remove();

                //add newly edited node
                AddUserArgumentNode(_userArgumentParentNode, addArgumentForm.txtArgumentName.Text,
                                    (ScriptArgumentDirection)Enum.Parse(typeof(ScriptArgumentDirection), addArgumentForm.cbxDefaultDirection.Text),
                                    addArgumentForm.txtDefaultValue.Text, (Type)addArgumentForm.cbxDefaultType.Tag);
                LastModifiedArgumentName = addArgumentForm.txtArgumentName.Text;
                ResetArguments();
            }

            addArgumentForm.Dispose();
        }