コード例 #1
0
ファイル: FormVariable.cs プロジェクト: hebskjcc/OpenR8-1
        private void FormVariable_Load(object sender, EventArgs e)
        {
            formMain = (FormMain)this.MdiParent;
            //comboBox1.DataSource = Enum.GetValues(typeof(Data.VariableType));
            //comboBox1.DataSource = R8.typeArray;
            int variableNum = R8.GetVariableNum();

            //MessageBox.Show("variableNum = " + variableNum);
            variableNum = R8.GetVariableNum();
            StringBuilder str = new StringBuilder(R7.STRING_SIZE);

            string[] typeArray;
            if (variableNum > 0)
            {
                typeArray = new string[variableNum];
                for (int i = 0; i < variableNum; i++)
                {
                    R8.GetVariableType(str, R7.STRING_SIZE, i);
                    typeArray[i] = str.ToString();
                    // MessageBox.Show("typeArray" + i + " = " + str);
                }
                comboBox1.DataSource = typeArray;
            }
            else
            {
                //如果沒讀到,用預設值
                comboBox1.DataSource = new string[] { "int", "bool", "float", "double", "string", "image", "json" };
            }

            //20170327 Variable 沒 SN ,不顯示視窗元件。
            if (variableSn == -1 || variableSn == 0)
            {
                comboBox1.Visible     = false;
                label1.Visible        = false;
                labelValue.Visible    = false;
                label3.Visible        = false;
                label4.Visible        = false;
                labelSn.Visible       = false;
                textBoxName.Visible   = false;
                label5.Visible        = false;
                textBoxRemark.Visible = false;
                buttonDelete.Visible  = false;
            }
            else
            {
                comboBox1.Visible     = true;
                label1.Visible        = true;
                labelValue.Visible    = true;
                label3.Visible        = true;
                label4.Visible        = true;
                labelSn.Visible       = true;
                textBoxName.Visible   = true;
                label5.Visible        = true;
                textBoxRemark.Visible = true;
                buttonDelete.Visible  = true;
            }

            str_Variable = R8.TranslationString(str_Variable);
            this.Text    = str_Variable;
        }
コード例 #2
0
ファイル: R8.cs プロジェクト: hebskjcc/OpenR8-1
        public static int getVariableTypeByString(string type)
        {
            int           res         = 0;
            int           variableNum = R8.GetVariableNum();
            StringBuilder str         = new StringBuilder(R7.STRING_SIZE);

            for (int i = 0; i < variableNum; i++)
            {
                R8.GetVariableType(str, R7.STRING_SIZE, i);
                if (str.ToString().Equals(type))
                {
                    res = i;
                    break;
                }
            }
            str.Clear();
            return(res);
        }
コード例 #3
0
ファイル: R8.cs プロジェクト: hebskjcc/OpenR8-1
        public R8(XElement xml)
        {
            XElement element = xml.Element("functionSnCount");
            //20170626 leo:加入舊版支援
            bool isOldVerson = false;

            if (element == null)
            {
                //此時判定為舊版
                isOldVerson = true;
                element     = xml.Element("intentSnCount");
                if (!Int32.TryParse(element.Value, out functionSnCount))
                {
                    functionSnCount = 0;
                }

                element = xml.Element("dataSnCount");
                if (!Int32.TryParse(element.Value, out variableSnCount))
                {
                    variableSnCount = 0;
                }

                element = xml.Element("intentSnMax");
                if (!Int32.TryParse(element.Value, out functionSnMax))
                {
                    functionSnMax = 0;
                }

                element = xml.Element("dataSnMax");
                if (!Int32.TryParse(element.Value, out variableSnMax))
                {
                    variableSnMax = 0;
                }
            }
            else
            {
                if (!Int32.TryParse(element.Value, out functionSnCount))
                {
                    functionSnCount = 0;
                }

                element = xml.Element("variableSnCount");
                if (!Int32.TryParse(element.Value, out variableSnCount))
                {
                    variableSnCount = 0;
                }

                element = xml.Element("functionSnMax");
                if (!Int32.TryParse(element.Value, out functionSnMax))
                {
                    functionSnMax = 0;
                }

                element = xml.Element("variableSnMax");
                if (!Int32.TryParse(element.Value, out variableSnMax))
                {
                    variableSnMax = 0;
                }
            }

            element = xml.Element("version");
            version = element.Value.ToString();


            int res;
            IEnumerable <XElement> variableElements;// = xml.Element("variables").Elements("variable");

            if (isOldVerson)
            {
                variableElements = xml.Element("datas").Elements("data");
            }
            else
            {
                variableElements = xml.Element("variables").Elements("variable");
            }
            Variable      variable;
            string        tempTypeString;
            int           variableNum = R8.GetVariableNum();
            StringBuilder str         = new StringBuilder(R7.STRING_SIZE);
            int           tempInt     = -1;

            for (int i = 0; i < variableElements.Count(); i++)
            {
                variable = new Variable();
                element  = variableElements.ElementAt(i);
                if (!Int32.TryParse(element.Element("sn").Value, out res))
                {
                    res = -1;
                }
                variable.sn = res;

                /*
                 * if (!Int32.TryParse(element.Element("type").Value, out res))
                 * {
                 *  res = -1;
                 * }
                 */

                tempTypeString = element.Element("type").Value;
                tempInt        = -1;
                for (int j = 0; j < variableNum; j++)
                {
                    R8.GetVariableType(str, R7.STRING_SIZE, j);
                    //統一轉小寫再比
                    if (str.ToString().ToLower().Equals(tempTypeString.ToLower()))
                    {
                        tempInt = j;
                        break;
                    }
                }
                //System.Console.WriteLine("type: " + tempTypeString + "  value:" + tempInt);
                if (tempInt != -1)
                {
                    variable.type = tempInt;
                }
                //Variable.VariableType.String;
                variable.value         = element.Element("value").Value;
                variable.name          = element.Element("name").Value;
                variable.remark        = element.Element("remark").Value;
                variables[variable.sn] = variable;
            }
            str.Clear();

            IEnumerable <XElement> functionElements;// = xml.Element("functions").Elements("function");

            if (isOldVerson)
            {
                functionElements = xml.Element("intents").Elements("intent");
            }
            else
            {
                functionElements = xml.Element("functions").Elements("function");
            }
            IEnumerable <XElement> variableSnElements = null;
            XElement subElement;
            Function function;

            for (int i = 0; i < functionElements.Count(); i++)
            {
                function = new Function();
                element  = functionElements.ElementAt(i);
                if (!Int32.TryParse(element.Element("sn").Value, out res))
                {
                    res = -1;
                }
                function.sn         = res;
                function.name       = element.Element("name").Value;
                function.remark     = element.Element("remark").Value;
                function.parameters = Function.getFunctionParameters(function.name);

                if (element.Element("enable") != null)
                {
                    if (element.Element("enable").Value.Equals("0"))
                    {
                        function.enable = false;
                    }
                    else
                    {
                        function.enable = true;
                    }
                }
                else
                {
                    function.enable = true;
                }

                if (R8.HAS_POS)
                {
                    if (!Int32.TryParse(element.Element("posX").Value, out res))
                    {
                        res = -1;
                    }
                    function.rectangle.X = res;
                    if (!Int32.TryParse(element.Element("posY").Value, out res))
                    {
                        res = -1;
                    }
                    function.rectangle.Y = res;
                }
                else
                {
                    function.rectangle.X = 0;
                    function.rectangle.Y = function.sn * 60;
                    //20170118 leo 新的 posY
                    if (!Int32.TryParse(element.Element("posY").Value, out res))
                    {
                        res = 0;
                    }
                    function.posY = res;
                }
                functions[function.sn] = function;

                //variableSn 不分 input/ output 了,由 Function.Parameter 定義 (以後要從 json 撈)
                if (isOldVerson)
                {
                    variableSnElements = element.Elements("dataSn");
                }
                else
                {
                    variableSnElements = element.Elements("variableSn");
                }
                int j = 0;
                //20170407 leo add: 就算 supportList 沒找到目標 function name,也把 parameters variable 補齊,避免 user 開不同版本運行後, program 壞掉。
                if (variableSnElements.Count() != function.parameters.Count && function.parameters.Count == 0)
                {
                    //MessageBox.Show("Warning: function [" + function.name + "] may not in support list.");

                    for (j = 0; j < variableSnElements.Count(); j++)
                    {
                        subElement = variableSnElements.ElementAt(j);
                        if (!Int32.TryParse(subElement.Value, out res))
                        {
                            res = -1;
                        }

                        int type = 0;
                        if (res != -1)
                        {
                            //parameter 名稱遺失了,但 variable 的 type 還是會有
                            //type = variables[res].type;
                            if (variables[res] != null)
                            {
                                type = variables[res].type;
                            }
                        }

                        Function.Parameter parameter = new Function.Parameter("unload", type);
                        parameter.option     = "IN";
                        parameter.variableSn = res;
                        function.parameters.Add(parameter);
                        // MessageBox.Show("Adding: " + parameter.name + " " + parameter.type);
                    }
                }
                //20170817 leo: 發現當版本不同時,如果同一個 function 名稱,新版的參數比舊版多,
                //然後用舊版 R8 開啟 .r6 檔案時,這邊會 error 。
                //修正:
                else if (variableSnElements.Count() != function.parameters.Count)
                {
                    for (j = 0; j < variableSnElements.Count() && j < function.parameters.Count; j++)
                    {
                        subElement = variableSnElements.ElementAt(j);
                        if (!Int32.TryParse(subElement.Value, out res))
                        {
                            res = -1;
                        }
                        function.parameters.ElementAt(j).variableSn = res;
                    }

                    for (j = function.parameters.Count; j < variableSnElements.Count(); j++)
                    {
                        subElement = variableSnElements.ElementAt(j);
                        if (!Int32.TryParse(subElement.Value, out res))
                        {
                            res = -1;
                        }

                        int type = 0;
                        if (res != -1)
                        {
                            //parameter 名稱遺失了,但 variable 的 type 還是會有
                            //type = variables[res].type;
                            if (variables[res] != null)
                            {
                                type = variables[res].type;
                            }
                        }

                        Function.Parameter parameter = new Function.Parameter("unload", type);
                        parameter.option     = "IN";
                        parameter.variableSn = res;
                        function.parameters.Add(parameter);
                        // MessageBox.Show("Adding: " + parameter.name + " " + parameter.type);
                    }
                }
                else
                {
                    //for (int j = 0; j < variableSnElements.Count() && j < function.parameters.Count; j++)
                    for (j = 0; j < variableSnElements.Count(); j++)
                    {
                        subElement = variableSnElements.ElementAt(j);
                        if (!Int32.TryParse(subElement.Value, out res))
                        {
                            res = -1;
                        }
                        function.parameters.ElementAt(j).variableSn = res;
                    }
                }

                //Console.WriteLine("sn = " + function.sn);
                //Console.WriteLine("name = " + function.name);
            }

            // Console.WriteLine("functionSnCount = " + functionSnCount);
        }