private int ResolutionBlocks(LMD_BLOCKS.BLOCK_JOINT.BASE_BLOCK block_next, LMD_GUI.LMD_BottomPanel info)
        {
            try
            {
                int    result  = 0;
                String str_lvl = "";

                for (int i = 0; i < level; i++)
                {
                    str_lvl += "---";
                }

                if (block_next.element != null)
                {
                    ME.AddItem(block_next, GetCodeParseBlock(block_next.element));
                }

                info.AddItemText("1>---" + str_lvl + "| Block[" + block_next.Type + "] Mode[" +
                                 block_next.Mode + "] Type element[" + block_next.element.GetType() + "] lvl[" + level + "]");

                if (block_next.Type == LMD_GUI.TYPE_BLOCK.condition)
                {
                    level += 2;
                    LMD_BLOCKS.BLOCK_JOINT.BASE_BLOCK block_next_1 = block_next.next_2;

                    ResolutionBlocks(block_next_1, info);
                }

                if (block_next.Mode == LMD_BLOCKS.BLOCK_JOINT.STATE_BLOCK.base_condition_false_end ||
                    block_next.Mode == LMD_BLOCKS.BLOCK_JOINT.STATE_BLOCK.base_condition_true_end)
                {
                    level--;

                    if (block_next.Mode == LMD_BLOCKS.BLOCK_JOINT.STATE_BLOCK.base_condition_false_end)
                    {
                        ME.AddItem(null, new String[] { "			"+ ML.GetElseCondition() });
                    }
                    else if (block_next.Mode == LMD_BLOCKS.BLOCK_JOINT.STATE_BLOCK.base_condition_true_end)
                    {
                        ME.AddItem(null, new String[] { "			"+ ML.GetCloseCondition() });
                    }
                }

                block_next = block_next.next_1;
                if (block_next != null)
                {
                    ResolutionBlocks(block_next, info);
                }

                return(result);
            }
            catch
            {
                info.AddItemText("Произошла ошибка собирания блоков");
                return(0);
            }
        }
Example #2
0
        public void AddItem(LMD_BLOCKS.BLOCK_JOINT.BASE_BLOCK block, String[] code)
        {
            BLOCK_CODE_CONTROL_ERROR b = new BLOCK_CODE_CONTROL_ERROR();

            b.block = block;
            b.code  = code;

            blocks.Add(b);
        }
 private int ResolutionBlocksSave(LMD_BLOCKS.BLOCK_JOINT.BASE_BLOCK block_next, LMD_GUI.LMD_BottomPanel info)
 {
     /*
      * int result = 0;
      * String str_lvl = "";
      *
      * FileManager.ManagerProjects.INFO_BLOCK b = new FileManager.ManagerProjects.INFO_BLOCK();
      * b.ID = block_next.ID;
      * if (block_next.next_1 != null)
      * {
      *      b.NextID = block_next.next_1.ID;
      * }
      * b.Type = block_next.Type;
      *
      * if (block_next.element != null)
      * {
      *      b.x = (float)System.Windows.Controls.Canvas.GetLeft(block_next.element);
      *      b.y = (float)System.Windows.Controls.Canvas.GetTop(block_next.element);
      * }
      * ListInfoBlocks.Add(b);
      *
      * info.AddItemText("1>--- ID[" + b.ID + "] NextID[" + b.NextID + "] Block[" + b.Type + "] ");
      *
      * for (int i = 0; i < level; i++)
      *      str_lvl += "---";
      *
      * if (block_next.element != null)
      *      ME.AddItem(block_next, GetCodeParseBlock(block_next.element));
      *
      * if (block_next.Type == LMD_GUI.TYPE_BLOCK.condition)
      * {
      *      level += 2;
      *      LMD_BLOCKS.BLOCK_JOINT.BASE_BLOCK block_next_1 = block_next.next_2;
      *
      *      ResolutionBlocksSave(block_next_1, info);
      * }
      *
      * if (block_next.Mode == LMD_BLOCKS.BLOCK_JOINT.STATE_BLOCK.base_condition_false_end ||
      *      block_next.Mode == LMD_BLOCKS.BLOCK_JOINT.STATE_BLOCK.base_condition_true_end)
      * {
      *      level--;
      *
      *      if (block_next.Mode == LMD_BLOCKS.BLOCK_JOINT.STATE_BLOCK.base_condition_false_end)
      *              ME.AddItem(null, new String[] { "			} else {" });
      *      else if (block_next.Mode == LMD_BLOCKS.BLOCK_JOINT.STATE_BLOCK.base_condition_true_end)
      *              ME.AddItem(null, new String[] { "			}" });
      * }
      *
      * block_next = block_next.next_1;
      * if (block_next != null)
      *      ResolutionBlocksSave(block_next, info);
      *
      * return result;
      */
     return(0);
 }
        public List <FileManager.ManagerProjects.INFO_BLOCK> GetInfoBlocks(List <LMD_BLOCKS.BLOCK_JOINT.BASE_BLOCK> blocks, LMD_GUI.LMD_BottomPanel info,
                                                                           LMD_GUI.LMD_FastInformationPanel fast_info)
        {
            info.ClearDate();
            List <FileManager.ManagerProjects.INFO_BLOCK> bl = new List <FileManager.ManagerProjects.INFO_BLOCK>();

            ListInfoBlocks.Clear();
            PrevTextCode.Clear();
            level = 0;
            ME.Clear();
            int count_block = blocks.Count;

            info.AddItemText("Сохранение проекта... " + count_block);

            String lang = "";

            switch (ML.PresentLanguage)
            {
            case Language.ManagerLanguage.LANGUAGE.C_PLUS_PLUS: lang = "C++"; break;

            case Language.ManagerLanguage.LANGUAGE.C_SHARP: lang = "C#"; break;

            case Language.ManagerLanguage.LANGUAGE.JAVA: lang = "Java"; break;

            case Language.ManagerLanguage.LANGUAGE.PASCALABC: lang = "Pascal"; break;
            }
            PrevTextCode.Add("Язык построения: " + lang);
            PrevTextCode.Add("");
            info.AddItemText("Язык построения: " + lang);

            LMD_BLOCKS.BLOCK_JOINT.BASE_BLOCK block_begin = null;
            for (int i = 0; i < count_block; i++)
            {
                blocks[i].ID = i;
                if (blocks[i].Type == LMD_GUI.TYPE_BLOCK.begin)
                {
                    block_begin = blocks[i];
                }
            }

            LMD_BLOCKS.BLOCK_JOINT.BASE_BLOCK block_next = block_begin;

            info.AddItemText("Построение последовательности блоков");

            ResolutionBlocksSave(block_next, info);

            info.AddItemText("Сохранение выполнено успешно");

            return(ListInfoBlocks);
        }
        public void RemoveBlock(UIElement element)
        {
            //	LMD_BLOCKS.BlockJoint joint = null;
            LMD_BLOCKS.BLOCK_JOINT.BASE_BLOCK bblock = null;

            for (int i = 0; i < blocks.Count; i++)
            {
                if (blocks[i].element == element)
                {
                    bblock = blocks[i];

                    //			for (int j = 0; j < joints.Count; j++)
                    //				if (joints[j].element_begin == blocks[i].element)
                    //				{
                    //					joint = joints[j];
                    //				}

                    break;
                }
            }

            //	Boolean block_yes = false;
            //	for (int i = 0; i < blocks.Count; i++)
            //	{
            //		if (blocks[i].next_1 != null)
            //			if (joint.element_end == blocks[i].next_1.element)
            //			{
            //				blocks[i].next_1 = null;
//
//						block_yes = true;
//					}
//
//				if (block_yes)
//					break;
//			}

//			joints.Remove(joint);
//			RemoveLine(joint);

            blocks.Remove(bblock);
            canvas.Children.Remove(element);
        }
        public void CreateJoint2()
        {
            if (selectJoint != null)
            {
                LMD_BLOCKS.BLOCK_JOINT.BASE_BLOCK b1 = null;
                LMD_BLOCKS.BLOCK_JOINT.BASE_BLOCK b2 = null;

                for (int i = 0; i < blocks.Count; i++)
                {
                    if (blocks[i].element == selectJoint.element_begin)
                    {
                        b1 = blocks[i];
                    }
                }
                for (int i = 0; i < blocks.Count; i++)
                {
                    if (blocks[i].element == selectJoint.element_end)
                    {
                        b2 = blocks[i];
                    }
                }
                b1.next_1 = b2;

                //	MessageBox.Show("b1[" + b1.Type + "] Mode[" + b1.Mode + "] b2[" + b2.Type + "] Mode[" + b2.Mode + "]");

                if (b1.Mode == LMD_BLOCKS.BLOCK_JOINT.STATE_BLOCK.base_condition_true)
                {
                    b2.Mode = LMD_BLOCKS.BLOCK_JOINT.STATE_BLOCK.base_condition_true;
                }
                else if (b1.Mode == LMD_BLOCKS.BLOCK_JOINT.STATE_BLOCK.base_condition_false)
                {
                    b2.Mode = LMD_BLOCKS.BLOCK_JOINT.STATE_BLOCK.base_condition_false;
                }

                selectJoint.Create(this.canvas);

                selectJoint = null;
            }
            joint_select = false;
        }
        public void RunCoreCompile(FileManager.INFO_PROJECT info_project, LMD_GUI.LMD_BottomPanel info, List <LMD_BLOCKS.BLOCK_JOINT.BASE_BLOCK> blocks,
                                   LMD_GUI.LMD_FastInformationPanel fast_info)
        {
            Language.ManagerLanguage.LANGUAGE old_language = ML.PresentLanguage;
            ML.SetLanguage(Language.ManagerLanguage.LANGUAGE.C_SHARP);

            level = 0;
            ME.Clear();

            LMD_BLOCKS.BLOCK_JOINT.BASE_BLOCK block_begin = null;
            for (int i = 0; i < blocks.Count; i++)
            {
                if (blocks[i].Type == LMD_GUI.TYPE_BLOCK.begin)
                {
                    block_begin = blocks[i];
                }
            }

            LMD_BLOCKS.BLOCK_JOINT.BASE_BLOCK block_next = block_begin;

            ResolutionBlocks(block_next, info);

            String res_code = "";
            List <Language.BLOCK_CODE_CONTROL_ERROR> BCCE = ME.GetItems();
            int lines = 0;

            for (int i = 0; i < BCCE.Count; i++)
            {
                for (int j = 0; j < BCCE[i].code.Length; j++)
                {
                    lines++;
                    info.AddItemText(BCCE[i].code[j]);
                    res_code += BCCE[i].code[j];
                    BCCE[i].lines.Add(lines);
                }
            }

            CompileCode(res_code, null, true);
            ML.SetLanguage(old_language);
        }
        /// <summary>
        /// Добавляет выборочно связь. Связь зависит от selectJoint
        /// и исходя из этого объекта сама выбирает какую форму она будет иметь
        /// </summary>
        /// <param name="element">UI связываемого блока. Привязывается к соединению</param>
        public void AddJoint(UIElement element)
        {
            joint_select = true;

            if (selectJoint == null)
            {
                selectJoint = new LMD_BLOCKS.BlockJoint(this);
                selectJoint.element_begin   = element;
                selectJoint.createNewJoint += selectJoint_createNewJoint;
                selectJoint.removeJoint    += selectJoint_removeJoint;
                selectJoint.type_line       = LMD_BLOCKS.TYPE_LINE.marshrut;
            }
            else if (selectJoint.type_line == LMD_BLOCKS.TYPE_LINE.marshrut)             // Прямая связь
            {
                if (selectJoint.element_begin == null)
                {
                    selectJoint.element_begin = element;
                }
                else if (selectJoint.element_end == null)
                {
                    selectJoint.element_end = element;

                    CreateJoint2();
                }
            }
            else if (selectJoint.type_line == LMD_BLOCKS.TYPE_LINE.line_block || selectJoint.type_line == LMD_BLOCKS.TYPE_LINE.condition)
            {
                if (selectJoint.type_line == LMD_BLOCKS.TYPE_LINE.line_block)
                {
                    selectJoint.element_end = element;
                    LMD_BLOCKS.BLOCK_JOINT.BASE_BLOCK b1 = null;
                    LMD_BLOCKS.BLOCK_JOINT.BASE_BLOCK b2 = null;

                    for (int i = 0; i < blocks.Count; i++)
                    {
                        if (blocks[i].element == selectJoint.element_begin)
                        {
                            b1 = blocks[i];
                        }
                    }
                    for (int i = 0; i < blocks.Count; i++)
                    {
                        if (blocks[i].element == selectJoint.element_end)
                        {
                            b2 = blocks[i];
                        }
                    }
                    b1.next_1 = b2;

                    //	MessageBox.Show(""+b1.Type + " | " + b2.Type);

                    selectJoint.CreateOldXYToBlock(this.canvas, element);
                }
                else if (selectJoint.type_line == LMD_BLOCKS.TYPE_LINE.condition)
                {
                    #region +
                    if (selectJoint.State == LMD_BLOCKS.BLOCK_JOINT.STATE_BLOCK.base_condition_true)                     // +
                    {
                        selectJoint.element_end = element;
                        LMD_BLOCKS.BLOCK_JOINT.BASE_BLOCK b1 = null;
                        LMD_BLOCKS.BLOCK_JOINT.BASE_BLOCK b2 = null;

                        for (int i = 0; i < blocks.Count; i++)
                        {
                            if (blocks[i].element == selectJoint.element_begin)
                            {
                                b1 = blocks[i];
                            }
                        }
                        for (int i = 0; i < blocks.Count; i++)
                        {
                            if (blocks[i].element == selectJoint.element_end)
                            {
                                b2 = blocks[i];
                            }
                        }
                        b1.next_1 = b2;
                        b2.Mode   = LMD_BLOCKS.BLOCK_JOINT.STATE_BLOCK.base_condition_true;

                        selectJoint.CreateOldXYToBlock(this.canvas, element);
                    }
                    #endregion
                    #region -
                    else if (selectJoint.State == LMD_BLOCKS.BLOCK_JOINT.STATE_BLOCK.base_condition_false)                     // -
                    {
                        selectJoint.element_end = element;
                        LMD_BLOCKS.BLOCK_JOINT.BASE_BLOCK b1 = null;
                        LMD_BLOCKS.BLOCK_JOINT.BASE_BLOCK b2 = null;

                        for (int i = 0; i < blocks.Count; i++)
                        {
                            if (blocks[i].element == selectJoint.element_begin)
                            {
                                b1 = blocks[i];
                            }
                        }
                        for (int i = 0; i < blocks.Count; i++)
                        {
                            if (blocks[i].element == selectJoint.element_end)
                            {
                                b2 = blocks[i];
                            }
                        }
                        b1.next_2 = b2;
                        b2.Mode   = LMD_BLOCKS.BLOCK_JOINT.STATE_BLOCK.base_condition_false;

                        selectJoint.CreateOldXYToBlock(this.canvas, element);
                    }
                    #endregion
                }
                else
                {
                    selectJoint.CreateOldXYToBlock(this.canvas, element);
                }
                joint_select = false;
                selectJoint  = null;
            }
        }
        public void AddBlock(TYPE_BLOCK type)
        {
            canvas.Children.Remove(SelectUIElement);
            SelectUIElement = null;
            selectTypeBlock = TYPE_BLOCK.none;
            date_select     = true;
            selectTypeBlock = type;
            LMD_BLOCKS.BLOCK_JOINT.BASE_BLOCK b_b = null;

            switch (type)
            {
            case TYPE_BLOCK.begin:
                LMD_BLOCKS.BlockBegin bb = new LMD_BLOCKS.BlockBegin();
                bb.expanderClickItem += bb_expanderClickItem;
                SelectUIElement       = bb;
                b_b = new LMD_BLOCKS.BLOCK_JOINT.BEGIN();
                break;

            case TYPE_BLOCK.end:
                LMD_BLOCKS.BlockEnd be = new LMD_BLOCKS.BlockEnd();
                be.expanderClickItem += bb_expanderClickItem;
                SelectUIElement       = be;
                b_b = new LMD_BLOCKS.BLOCK_JOINT.END();
                break;

            case TYPE_BLOCK.input:
                LMD_BLOCKS.BlockInput bi = new LMD_BLOCKS.BlockInput();
                bi.expanderClickItem += bb_expanderClickItem;
                SelectUIElement       = bi;
                b_b = new LMD_BLOCKS.BLOCK_JOINT.INPUT();
                break;

            case TYPE_BLOCK.output:
                LMD_BLOCKS.BlockOutput bo = new LMD_BLOCKS.BlockOutput();
                bo.expanderClickItem += bb_expanderClickItem;
                SelectUIElement       = bo;
                b_b = new LMD_BLOCKS.BLOCK_JOINT.OUTPUT();
                break;

            case TYPE_BLOCK.calculate:
                LMD_BLOCKS.BlockCalculate bca = new LMD_BLOCKS.BlockCalculate();
                bca.expanderClickItem += bb_expanderClickItem;
                SelectUIElement        = bca;
                b_b = new LMD_BLOCKS.BLOCK_JOINT.CALCULATE();
                break;

            case TYPE_BLOCK.condition:
                LMD_BLOCKS.BlockCondition bco = new LMD_BLOCKS.BlockCondition();
                bco.expanderClickItem += bb_expanderClickItem;
                bco.clickJoint        += bco_clickJoint;
                SelectUIElement        = bco;
                b_b = new LMD_BLOCKS.BLOCK_JOINT.CONDITION();
                break;

            case TYPE_BLOCK.camera:  break;

            case TYPE_BLOCK.joint: joint_select = true; break;
            }

            b_b.element             = SelectUIElement;
            b_b.element.MouseEnter += element_MouseEnter;
            b_b.element.MouseLeave += element_MouseLeave;
            blocks.Add(b_b);

            SelectUIElement.Opacity = 0.5;
            canvas.Children.Add(SelectUIElement);

            Canvas.SetLeft(SelectUIElement, -500);
            Canvas.SetTop(SelectUIElement, -500);
        }
        public int Run(List <LMD_BLOCKS.BLOCK_JOINT.BASE_BLOCK> blocks, LMD_GUI.LMD_BottomPanel info,
                       LMD_GUI.LMD_FastInformationPanel fast_info)
        {
            info.ClearDate();
            fast_info.SetCurrentText("Начато построение");
            PrevTextCode.Clear();
            level = 0;
            ME.Clear();
            int count_block = blocks.Count;

            // Set setting from projects to compile
            FileManager.INFO_PROJECT info_project = FileManager.ManagerProjects.GetPresentProjectInfo();
            ML.SetLanguage(info_project.Language);

            info.AddItemText("Информация о проекте: ");
            info.AddItemText("Название: " + info_project.name);
            info.AddItemText("Путь: " + Environment.CurrentDirectory + "\\" + info_project.path);
            info.AddItemText("Тип проекта: " + info_project.Type);

            info.AddItemText("Колличество блоков: " + count_block);
            fast_info.ProgressBar.Value = 20;
            String lang = "";

            switch (ML.PresentLanguage)
            {
            case Language.ManagerLanguage.LANGUAGE.C_PLUS_PLUS: lang = "C++"; break;

            case Language.ManagerLanguage.LANGUAGE.C_SHARP: lang = "C#"; break;

            case Language.ManagerLanguage.LANGUAGE.JAVA: lang = "Java"; break;

            case Language.ManagerLanguage.LANGUAGE.PASCALABC: lang = "Pascal"; break;
            }
            PrevTextCode.Add("Язык построения: " + lang);
            PrevTextCode.Add("");
            info.AddItemText("Язык построения: " + lang);

            LMD_BLOCKS.BLOCK_JOINT.BASE_BLOCK block_begin = null;
            for (int i = 0; i < count_block; i++)
            {
                if (blocks[i].Type == LMD_GUI.TYPE_BLOCK.begin)
                {
                    block_begin = blocks[i];
                }
            }

            LMD_BLOCKS.BLOCK_JOINT.BASE_BLOCK block_next = block_begin;

            info.AddItemText("Построение последовательности блоков");

            ResolutionBlocks(block_next, info);
            fast_info.ProgressBar.Value = 60;
            info.AddItemText("Собирается код");
            String res_code = "";
            List <Language.BLOCK_CODE_CONTROL_ERROR> BCCE = ME.GetItems();
            int lines = 0;

            for (int i = 0; i < BCCE.Count; i++)
            {
                for (int j = 0; j < BCCE[i].code.Length; j++)
                {
                    lines++;
                    PrevTextCode.Add(BCCE[i].code[j]);
                    info.AddItemText(BCCE[i].code[j]);
                    res_code += BCCE[i].code[j];
                    BCCE[i].lines.Add(lines);
                }
            }
            fast_info.ProgressBar.Value = 80;
            switch (info_project.Type)
            {
            case FileManager.TYPE_PROJECT.DLL: this.name_project = info_project.name + ".dll"; CompileCode(res_code, info, false); break;

            case FileManager.TYPE_PROJECT.EXE: this.name_project = info_project.name + ".exe"; RunCoreCompile(info_project, info, blocks, fast_info); break;

            case FileManager.TYPE_PROJECT.NONE: break;

            case FileManager.TYPE_PROJECT.TXT: FileManager.ManagerProjects.CreateTXTCode(res_code); break;
            }

            info.AddItemText("Собирание проекта завершено");
            fast_info.SetCurrentText("Готово");
            fast_info.ProgressBar.Value = 100;
            return(0);
        }