コード例 #1
0
ファイル: Form1.cs プロジェクト: Legoless/DynamicWorkflow
        private List<Parameter> GetCommandParameters(string command)
        {
            // Just get parameters
            string parameters = command.Substring(command.IndexOf("(") + 1);
            parameters = parameters.Substring(0, parameters.LastIndexOf(")"));
            parameters = parameters.Trim();

            string[] paramList = parameters.Split(',');

            if (parameters.Length == 0)
            {
                paramList = new string[0];
            }

            MethodInfo method = GetCommandMethod(command);
            ParameterInfo[] methodParams = method.GetParameters();

            if (paramList.Length != methodParams.Length)
            {
                throw new Exception ("Parse error: Method \"" + method.Name + "\" does not accept " + paramList.Length + " parameters.");
            }

            List<Parameter> returnList = new List<Parameter>();

            for (int i = 0; i < paramList.Length; i++)
            {
                Parameter param = new Parameter();

                param.parameterType = methodParams[i].ParameterType;

                // Check for memory parameters
                if (paramList[i].StartsWith("Memory(") == true)
                {
                    try
                    {
                        string loc = paramList[i].Substring(paramList[i].IndexOf("(") + 1, paramList[i].IndexOf(")") - paramList[i].IndexOf("(") - 1);

                        param.isMemory = Convert.ToInt32(loc) - 1;

                        if (param.isMemory < 0)
                        {
                            throw new Exception("Non-positive memory location.");
                        }
                        else if (param.isMemory >= memory.Count)
                        {
                            throw new Exception("Memory overflow.");
                        }
                    }
                    catch (Exception)
                    {
                        Exception ex = new Exception("Parse error: Cannot convert method memory location parameter: \"" + paramList[i] + "\"");

                        throw ex;
                    }
                }
                else
                {
                    try
                    {
                        param.value = Convert.ChangeType(paramList[i], param.parameterType);

                        // String support, cut away double quotes
                        if (param.value.GetType() == typeof(string))
                        {
                            // BugFix - if it is string and no quotes = error

                            if ((((string)param.value).EndsWith("\"") == true) && (((string)param.value).StartsWith("\"") == true))
                            {
                                string rem = (string)param.value;

                                rem = rem.Substring(1);
                                rem = rem.Substring(0, rem.Length - 1);

                                param.value = rem;
                            }
                            else
                            {
                                if (((string)param.value).StartsWith("\"") == false)
                                {
                                    throw new Exception("Parse error: Expecting double quote on start of param: " + ((string)param.value)[0]);
                                }
                                else
                                {
                                    throw new Exception("Parse error: Expecting double quote on end of param: " + ((string)param.value)[((string)param.value).Length - 1]);
                                }
                            }
                        }

                    }
                    catch (Exception)
                    {
                        Exception ex = new Exception("Parse error: Cannot convert method parameter: \"" + paramList[i] + "\" to: " + param.parameterType.ToString());

                        throw ex;
                    }
                }

                returnList.Add(param);
            }

            return returnList;
        }
コード例 #2
0
ファイル: Form1.cs プロジェクト: Legoless/DynamicWorkflow
        private void textBox_DragDrop(object sender, DragEventArgs e)
        {
            // Handle method drag and drop
            if (e.Data.GetDataPresent("System.Windows.Forms.TreeNode", false))
            {
                TreeNode transferNode = (TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode");

                // Allow only methods to be transfered
                if (transferNode.Level != 2)
                {
                    return;
                }

                // Have to find correct method form now

                TreeNode classNode = transferNode.Parent;

                TreeNode assemblyNode = classNode.Parent;

                int foundAsm = -1;

                for (int i = 0; i < library.Count; i++)
                {
                    if (Path.GetFileName(library[i].Location) == assemblyNode.Text)
                    {
                        foundAsm = i;
                        break;
                    }
                }

                Assembly assembly = library[foundAsm];

                //
                // Get method info
                //

                foreach (Type type in assembly.GetTypes())
                {
                    if ((type.IsClass) && (type.Name == classNode.Text))
                    {
                        // Get class methods
                        foreach (MethodInfo method in type.GetMethods())
                        {
                            if (method.ToString() == transferNode.Text)
                            {
                                List<Parameter> list = new List<Parameter>();

                                for (int i = 0; i < method.GetParameters().Length; i++)
                                {
                                    Parameter param = new Parameter();
                                    param.parameterType = method.GetParameters()[i].ParameterType;

                                    /*
                                    if (param.parameterType == typeof(string))
                                    {
                                        param.value = "\"\"";
                                    }
                                    else
                                    {
                                        param.value = 0;
                                    }*/

                                    param.value = " ";

                                    list.Add(param);
                                }

                                int save = ((TextBox)tabControl1.SelectedTab.Controls[0]).SelectionStart;

                                string cmd = WriteCommand(type, method, list, -1);

                                ((TextBox)tabControl1.SelectedTab.Controls[0]).Text = ((TextBox)tabControl1.SelectedTab.Controls[0]).Text.Insert(((TextBox)tabControl1.SelectedTab.Controls[0]).SelectionStart, cmd);

                                if (list.Count > 0)
                                {
                                    ((TextBox)tabControl1.SelectedTab.Controls[0]).SelectionStart = ((TextBox)tabControl1.SelectedTab.Controls[0]).Text.IndexOf("(", save) + 1;

                                    int save2 = ((TextBox)tabControl1.SelectedTab.Controls[0]).SelectionStart;

                                    ((TextBox)tabControl1.SelectedTab.Controls[0]).Text = ((TextBox)tabControl1.SelectedTab.Controls[0]).Text.Insert(((TextBox)tabControl1.SelectedTab.Controls[0]).SelectionStart, " ");

                                    ((TextBox)tabControl1.SelectedTab.Controls[0]).SelectionStart = save2;
                                }
                                else
                                {
                                    ((TextBox)tabControl1.SelectedTab.Controls[0]).SelectionStart = save + cmd.Length;
                                }

                                return;
                            }
                        }

                        break;
                    }
                }
            }
            else if (e.Data.GetDataPresent("System.Windows.Forms.ListViewItem", false))
            {
                ListViewItem transferItem = (ListViewItem)e.Data.GetData("System.Windows.Forms.ListViewItem");

                int save = ((TextBox)tabControl1.SelectedTab.Controls[0]).SelectionStart;

                string txt = "Memory (" + Convert.ToInt32(transferItem.Text) + ")";

                ((TextBox)tabControl1.SelectedTab.Controls[0]).Text = ((TextBox)tabControl1.SelectedTab.Controls[0]).Text.Insert(((TextBox)tabControl1.SelectedTab.Controls[0]).SelectionStart, txt);

                ((TextBox)tabControl1.SelectedTab.Controls[0]).SelectionStart = save + txt.Length;
            }
        }