コード例 #1
0
ファイル: Form1.cs プロジェクト: igorek240101/MIND
        /// <summary>
        /// Создание основной формы
        /// </summary>
        /// <param name="s">Путь к файлу, который открывается в программе</param>
        public Form1(string s)
        {
            InitializeComponent();
            timer.Interval = 150;
            timer.Tick    += new EventHandler(timer_Tick);

            splitContainer1.Panel1.Location  = new Point(0, 0);
            splitContainer1.Panel2.Location  = new Point(Size.Width / 2, 0);
            splitContainer1.SplitterDistance = Width / 2;

            redactorToolStripMenuItem.Image = mark;
            visorToolStripMenuItem.Image    = mark;

            textBox1.Location = new Point(5, 5);
            textBox1.Size     = new Size(splitContainer1.Panel1.Width - 25, 29);
            main = this;

            if (s != null)
            {
                file          = s;
                textBox1.Text = File.ReadAllText(file);
            }

            LinesStruct.MainSearch(textBox1.Text, 0, linesTexts, splitContainer1.Panel2, 0, this);
            int lastY = 10;

            for (int i = 0; i < linesTexts.Count; i++)
            {
                linesTexts[i].value.Location = new Point(10, lastY);
                lastY += linesTexts[i].value.Height;
            }
        }
コード例 #2
0
ファイル: Form1.cs プロジェクト: igorek240101/MIND
 /// <summary>
 /// Пересборка разметки
 /// </summary>
 private void MyResetText()
 {
     if (selected != -1)
     {
         textBox1.SelectionStart = selected; selected = -1;
     }
     if (linesTexts.Count > 1)
     {
         int countOfDelete, countOfEnter;
         if (countOfLine > textBox1.Lines.Length)
         {
             countOfDelete = countOfLine - textBox1.Lines.Length;
         }
         else
         {
             countOfDelete = 0;                                                                                                //Количество удаленных строк
         }
         if (countOfLine < textBox1.Lines.Length)
         {
             countOfEnter = textBox1.Lines.Length - countOfLine;
         }
         else
         {
             countOfEnter = 0;                                                                                         // Количество добавленных строк
         }
         int  start       = textBox1.Text.Substring(0, textBox1.SelectionStart).Split('\r').Length - 1 - countOfEnter; // Первая строка изменений
         int  end         = 0;                                                                                         // Последняя строка изменений
         int  startString = 0;                                                                                         // Первый изменяемый элемент визуализации
         int  endString   = 0;                                                                                         // Последний изменяемый элемент визуализации
         bool tr          = true;
         for (int i = 0; i < linesTexts.Count; i++)
         {
             if (linesTexts[i].startString > start) //Если мы нашли первую строку изменений
             {
                 for (int j = i; j < linesTexts.Count; j++)
                 {
                     if (start + 1 <= linesTexts[j].startString - countOfDelete + countOfEnter)     //
                     {
                         if (start + 1 == linesTexts[j].startString - countOfDelete + countOfEnter) // Если строка граничит со следующим абзацем
                         {
                             endString = j;                                                         // Следующий абзац последний на персбоку
                             if (j + 1 < linesTexts.Count)                                          // Определение последний строки этого абзаца
                             {
                                 end = linesTexts[j + 1].startString - 1 - countOfDelete + countOfEnter;
                             }
                             else
                             {
                                 end = textBox1.Lines.Length - 1;
                             }
                         }
                         else
                         {
                             endString = j - 1; // Последний абзац на персборку - предыдущий
                             end       = linesTexts[j].startString - 1 - countOfDelete + countOfEnter;
                         }
                         tr = false;
                         break;
                     }
                 }
                 if (tr)
                 {
                     end       = textBox1.Lines.Length - 1; // Последняя строка текста
                     endString = linesTexts.Count - 1;;     // Последний блок
                     tr        = false;
                 }
                 if (i - 2 >= 0) // Если старт не в первом блоке
                 {
                     if (linesTexts[i - 1].startString != start)
                     {
                         start       = linesTexts[i - 1].startString;
                         startString = i - 1;
                     }
                     else
                     {
                         start       = linesTexts[i - 2].startString; // Первая строка блока текста для которого будет проводиться сборка
                         startString = i - 2;                         // Индекс первого блока визуализации
                     }
                 }
                 else
                 {
                     start = 0; startString = 0;
                 }
                 break;
             }
         }
         if (tr)
         {
             if (linesTexts.Count > 1 && linesTexts[linesTexts.Count - 1].startString == start)
             {
                 startString = linesTexts.Count - 2;
                 start       = linesTexts[linesTexts.Count - 2].startString; // Первая строка блока текста для которого будет проводиться сборка
                 end         = textBox1.Lines.Length - 1;
                 endString   = linesTexts.Count - 1;
             }
             else
             {
                 startString = linesTexts.Count - 1;
                 start       = linesTexts[linesTexts.Count - 1].startString; // Первая строка блока текста для которого будет проводиться сборка
                 end         = textBox1.Lines.Length - 1;
                 endString   = linesTexts.Count - 1;
             }
         }
         for (int i = startString; i <= endString; i++) // удаление всех пересобираеммых элементов визуализации
         {
             splitContainer1.Panel2.Controls.Remove(linesTexts[startString].value);
             linesTexts.RemoveAt(startString);
         }
         for (int i = startString; i < linesTexts.Count; i++) // Сдвиг старотвых строк для находящихся ниже элементов визуализации
         {
             linesTexts[i].startString += countOfEnter - countOfDelete;
         }
         string s = "";
         for (int i = start; i <= end; i++) // Подготовка текста для преобразования
         {
             s += textBox1.Lines[i] + "\r\n";
         }
         try
         {
             LinesStruct.MainSearch(s.Substring(0, s.Length - 2), start, linesTexts, splitContainer1.Panel2, startString, this);
         }
         catch { LinesStruct.MainSearch("", start, linesTexts, splitContainer1.Panel2, startString, this); }
         // Смещение визуализации
         int lastY = 10;
         if (start > 0)
         {
             lastY = linesTexts[startString - 1].value.Location.Y + linesTexts[startString - 1].value.Height + 10;
         }
         for (int i = startString; i < linesTexts.Count; i++)
         {
             linesTexts[i].value.Location = new Point(10, lastY);
             lastY += linesTexts[i].value.Height + 10;
         }
     }
     else
     {
         splitContainer1.Panel2.Controls.Clear();
         linesTexts.RemoveAt(0);
         LinesStruct.MainSearch(textBox1.Text, 0, linesTexts, splitContainer1.Panel2, 0, this);
         int lastY = 10;
         for (int i = 0; i < linesTexts.Count; i++)
         {
             linesTexts[i].value.Location = new Point(10, lastY);
             lastY += linesTexts[i].value.Height;
         }
     }
     countOfLine = textBox1.Lines.Length;
 }