public static ContractParameter ShowParamEditor(string paramType, string paramValue, bool paramTypeLocked)
 {
     using (InvokeContractParameterEditor dialog = new InvokeContractParameterEditor(paramType, paramValue, paramTypeLocked))
     {
         if (dialog.ShowDialog() == DialogResult.OK)
         {
             return(new ContractParameter
             {
                 Type = dialog.getSelectedParamType(),
                 Value = dialog.ParsedParameterValue(dialog.userNewParamValue())
             });
         }
     }
     return(null);
 }
示例#2
0
        /**
         * show the parameter editor dialog
         */
        private void InvokeParameterEditor()
        {
            TreeNode node = treeParamList.SelectedNode;

            string paramType            = null;
            string paramValue           = null;
            bool   paramIsRequiredField = false;
            bool   listItemExists       = node.Tag != null && node.Name != Strings.InvokeContractAddParam;

            if (node.Name.Equals(Strings.InvokeContractParamArray))
            {
                // ignore double clicks on param array node
                return;
            }

            // on a double click event, load the contract parameter editor form
            if (listItemExists)
            {
                // user has clicked into a value that already exists - setup to perform update
                listItemExists       = true;
                paramIsRequiredField = ParamNodeIsRequiredField(node);
                paramType            = node.Name.ToString();
                paramValue           = node.Text.Replace($"{paramType}=", "");
                if (paramValue.Equals(Strings.InvokeContractNullParamValue))
                {
                    paramValue = null;
                }
            }

            ContractParameter newParamData = InvokeContractParameterEditor.ShowParamEditor(paramType, paramValue, paramIsRequiredField);

            if (newParamData == null)
            {
                // dialog was probably cancelled
                return;
            }

            TreeNode newTreeNode;

            if (newParamData.Type.Equals(ContractParameterType.Array))
            {
                // add array as a new parent node
                newTreeNode = new TreeNode("Array", new TreeNode[] { AddParamNodeToTreeView() })
                {
                    Name = Strings.InvokeContractParamArray,
                    Tag  = new object[] {
                        RequiredParameters.Optional,
                        new List <ContractParameter>()
                    }
                };
                newTreeNode.Expand();
            }
            else
            {
                newTreeNode = CreateTreeNode(newParamData, RequiredParameters.Optional);
            }

            TreeNodeCollection parentNode = node.Parent.Nodes;
            int selectedNodeIndex         = parentNode.IndexOf(node);

            if (listItemExists)
            {
                // replace existing tree item with new one (incase user changes type)
                parentNode.RemoveAt(selectedNodeIndex);
            }
            parentNode.Insert(selectedNodeIndex, newTreeNode);

            // update the scripts bytecode to reflect parameter changes
            UpdateScript();
        }