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); }
/** * 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(); }