123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669 |
- using System.IO;
- using System.Linq;
- using System.Windows;//using System.IO.Pipes; using System.Threading;
- using FarsiLibrary.Win;
- using FastColoredTextBoxNS;
- using System.Windows.Input;
- using System.Windows.Controls;
- using System.Text.RegularExpressions;
- namespace MPE
- {
- public partial class MainWindow : Window
- {
- bool startTimer = false, fileBeAded = false;
- readonly Properties.Settings param = Properties.Settings.Default;
- Settings settings; replaceWindow rw; findWindow fw; SpecInput si;
- readonly static string taskList = DataHelper.workDir + "taskList.txt", backUpDir = Directory.GetCurrentDirectory() + "\\Backups\\";
- readonly System.Windows.Forms.OpenFileDialog ofd = new System.Windows.Forms.OpenFileDialog() { Title = "Открытие шаблона", Filter = "Текстовый документ (.txt)|*.txt" };
- readonly System.Windows.Forms.SaveFileDialog sfd = new System.Windows.Forms.SaveFileDialog() { Title = "Создание нового шаблона", Filter = "Текстовый документ (.txt)|*.txt" };
- readonly System.Windows.Threading.DispatcherTimer checkErrorTimer = new System.Windows.Threading.DispatcherTimer() { Interval = System.TimeSpan.FromMilliseconds(100), IsEnabled = false };
- static readonly System.Windows.Forms.MenuItem[] mi = new System.Windows.Forms.MenuItem[] { new System.Windows.Forms.MenuItem("Копировать Ctrl+C"), new System.Windows.Forms.MenuItem("Вставить Ctrl+V"), new System.Windows.Forms.MenuItem("Вырезать Ctrl+X"), new System.Windows.Forms.MenuItem("Выделить параметр", SelectParam_Click), new System.Windows.Forms.MenuItem("Закомментировать код Ctrl+E"), new System.Windows.Forms.MenuItem("Раскомментировать код Ctrl+Shift+E"), new System.Windows.Forms.MenuItem("Специальная вставка") };
- readonly Regex beOpened = new Regex(@"\*.+");
- readonly System.Collections.Generic.List<string> taskListLines = new System.Collections.Generic.List<string>();
- //Thread serverThread; NamedPipeServerStream pipeServer = new NamedPipeServerStream("MPE_pipe1", PipeDirection.InOut, 6); bool miss = false; public async void StartServer() { StreamReader sr = new StreamReader(pipeServer); StreamWriter sw = new StreamWriter(pipeServer); do try { pipeServer.WaitForConnection(); await System.Threading.Tasks.Task.Run(() => { if (!miss) { miss = true; } else { string line = sr.ReadLine(); if (line != null && line.Length > 0) { string[] arguments = line.Split(new char[] { ' ' }); if (arguments.Length > 1) for (int i = 0; i < arguments.Length; i++) if (arguments[i] == "-o") {/* Паредан ключ для открытия файлов*/ do if (i + 1 < arguments.Length) { i++; Tabs.BeginInvoke((InvokeDelegate)delegate { bool good = true; if (File.Exists(arguments[i])) good = CreateTab(arguments[i]); this.Activate(); field.Focus(); }, arguments[i]).AsyncWaitHandle.WaitOne(); } while (i + 1 < arguments.Length); } } } }); } catch (System.Exception ex) { MessageBox.Show("Возникла ошибка: " + ex.Message); pipeServer.Dispose(); pipeServer = new NamedPipeServerStream("MPE_pipe1", PipeDirection.InOut, 6); sr = new StreamReader(pipeServer); sw = new StreamWriter(pipeServer); } finally { if (pipeServer.IsConnected) { pipeServer.Disconnect(); } } while (true); }delegate void InvokeDelegate(string s);
- /*Проверяем есть ли уже запущенный экземпляр программы*///if (DataHelper.TryConnect()) {/* Этот экземпляр приложения является клиентом => если нужно открыть файлы, то отправляем их серверу; если нет файлов, то передаём фокус серверу и завершаю работу этого экземпляра*/ if (arguments.Length > 1) { string send = ""; for (int i = 1; i < arguments.Length; i++) { if (arguments[i] == "-o") {/* Паредан ключ для открытия файла*/ do if (File.Exists(arguments[i])) send += ' ' + arguments[i]; while (++i < arguments.Length); } else if (File.Exists(arguments[i])) send += ' ' + arguments[i]; } if (send.Length > 0) DataHelper.SendToServer("-o" + send); } DataHelper.DisposeService(); pipeServer.Dispose(); if (serverThread != null) serverThread.Abort(); System.Environment.Exit(0); } else {/* Этот экземпляр приложения является сервером => запускаем сервер и продолжаем нормальную загрузку*/ serverThread = new Thread(new ThreadStart(StartServer)); serverThread.Start(); }
- public MainWindow()
- {
- InitializeComponent();
- if (ToolTipUpdater.getToolTips() != null)
- MessageBox.Show("good");
- return;
- string[] arguments = System.Environment.GetCommandLineArgs();
- Title = ("MiniPoster Editor v" + param.version).Replace(",", ".");
- if (!Directory.Exists(DataHelper.workDir)) Directory.CreateDirectory(DataHelper.workDir);
- checkErrorTimer.Tick += CheckErrorTimer_Tick;
- mi[0].Click += fieldCopySelectedText; mi[1].Click += fieldPasteText; mi[2].Click += fieldCutSelectedText; mi[4].Click += TextCommenting; mi[5].Click += DellTextCommenting; mi[6].Click += specInsert;
- DataHelper.Init(ref Tabs, ref commandsToolTip, ref commandTipsCB, ref commandsControl, ref commandCB, ref checkErrorTimer, ref codeMapCB, ref fieldProvider, ref stateGrid, ref codeMapProvider, ref stateLineCB, ref syntaxHighlighting);
- if (param.isCheckUpdates) Updater.FindNewVersion();//Если проверка обновлений включена => проверить новую версию
- if (arguments.Length > 1) for (int i = 1; i < arguments.Length; i++)
- if (arguments[i] == "-o" && i + 1 < arguments.Length)
- {// Паредан ключ для открытия файла
- do
- {
- if (File.Exists(arguments[++i]))
- CreateTab(arguments[i]);
- }
- while (i + 1 < arguments.Length);
- }
- else if (File.Exists(arguments[i]))
- CreateTab(arguments[i]);
- if (param.isSaveWindowSize)
- {// Восстановление предыдущего разрешения экрана
- Width = param.lastWindowSize.Width < 400 ? 800 : param.lastWindowSize.Width;
- Height = param.lastWindowSize.Height < 200 ? 771 : param.lastWindowSize.Height;
- }
- if (File.Exists(taskList))
- {
- taskListLines = File.ReadAllLines(taskList).ToList();
- int d = 0;
- while (d < taskListLines.Count)
- {
- for (int i = d; i < taskListLines.Count; i++)
- {// Обрабатываем ранее открытые файлы
- if (File.Exists(taskListLines[i]))
- {// просто добавить в список ранее открытых
- if (!delDublicatMenuItems(taskListLines[i]))
- {
- MenuItem mi = new System.Windows.Controls.MenuItem() { Header = taskListLines[i] };
- mi.Click += Item_Click; oldTasks.Items.Add(mi);
- }
- }
- else if (param.isOpenLastFile && beOpened.Match(taskListLines[i]).Success)
- {// *путь - нужно открыть
- string header = taskListLines[i].Remove(0, 1);
- if (File.Exists(header))
- {
- if (!delDublicatMenuItems(header))
- {
- MenuItem mi = new System.Windows.Controls.MenuItem() { Header = header };
- mi.Click += Item_Click; oldTasks.Items.Add(mi);
- }
- CreateTab(header);
- }
- else taskListLines.RemoveAt(i);
- }
- else taskListLines.RemoveAt(i);
- d++;
- }
- }
- Save_taskList();
- }
- else File.Create(taskList).Close();
- if (Tabs.Controls.Count == 0) CreateTab(null, true);
- LineNumbersCB_Click(null, null);//Предыдущее состояние нумерации строк
- ShowErrorsCB_Click(null, null);//Предыдущее состояние проверки ошибок
- ShowCurrlineColorCB_Click(null, null);
- DataHelper.SetColorsForAllTabs();
- //ErrorChecker.initTimer();
- fileBeAded = startTimer = true; DataHelper.SetColors(field.Range);// Field_TextChanged(null, null);// new FastColoredTextBoxNS.TextChangedEventArgs(field.Range));
- field.IsChanged = false; needSaveL.Visibility = Visibility.Hidden;
- }
- static System.Drawing.Point p;// Точка указывает где нужно искать параметры функции
- static void SelectParam_Click(object sender, System.EventArgs e) { if (p != null) DataHelper.Field_MouseDoubleClick(p); }
- bool nowClosingTab = false;
- void removeTabFromTaskListLines(object tab)
- {//Удаляет закрытую вкладку из списка
- if (taskListLines.Contains("*" + tab as string))
- {
- taskListLines.Remove("*" + tab as string);
- Save_taskList();
- }
- }
- void Tabs_TabStripItemClosing(TabStripItemClosingEventArgs e)
- {
- object tab = e.Item.Tag;
- nowClosingTab = true;
- removeTabFromTaskListLines(tab);
- if (Tabs.Items.Count == 1)
- {//Закрывается последняя вкладка
- e.Cancel = true;
- Tabs.SelectedItem.Tag = field.Text = "";
- Tabs.SelectedItem.Title = "[new1]";
- field.IsChanged = false;
- needSaveL.Visibility = Visibility.Hidden;
- }
- nowClosingTab = false;
- }
- void Tabs_TabStripItemSelectionChanged(FarsiLibrary.Win.TabStripItemChangedEventArgs e)
- {
- if (fileBeAded && !nowClosingTab)
- {
- Title = "Edit - " + currentFile;
- UpdateDocumentMap();
- Tabs.SelectedItem.Controls[0].Focus();
- errorCount.Visibility = Visibility.Hidden;
- if (param.isSyntaxHighlighting)
- DataHelper.SetColors(field.Range);
- else field.Range.ClearStyle(StyleIndex.All);
- // if (param.isErrorList && param.isErrorTimer) ErrorChecker.needCheckErrors(ref errorCount);
- if ((Tabs.SelectedItem.Controls[0] as FastColoredTextBox).IsChanged)
- needSaveL.Visibility = Visibility.Visible;
- else needSaveL.Visibility = Visibility.Hidden;
- }
- }
- static readonly System.Windows.Forms.ContextMenu MouseMenu = new System.Windows.Forms.ContextMenu(mi);
- bool CreateTab(string fileName, bool empty = false)
- {
- if (!empty)
- if (fileName == null) return false;
- var tb = new FastColoredTextBox { Font = param.fieldFont, Dock = System.Windows.Forms.DockStyle.Fill, BorderStyle = System.Windows.Forms.BorderStyle.None, LeftPadding = 17, HighlightingRangeType = HighlightingRangeType.ChangedRange, AllowMacroRecording = false };
- var tab = new FATabStripItem(fileName != null ? Path.GetFileName(fileName) : "[new]", tb);
- tab.Tag = fileName;
- if (fileName != null && !IsFileAlreadyOpen(fileName) && File.Exists(fileName))
- tb.OpenFile(fileName, System.Text.Encoding.Default);
- else if (fileName != null) return false;
- tb.BackColor = DataHelper.getColorFromHex(DataHelper.getThemeColor(0));
- tb.ForeColor = DataHelper.getColorFromHex(DataHelper.getThemeColor(1));
- tb.LineNumberColor = DataHelper.getColorFromHex(DataHelper.getThemeColor(2));
- tb.IndentBackColor = DataHelper.getColorFromHex(DataHelper.getThemeColor(3));
- tb.SelectionColor = DataHelper.getColorFromHex(DataHelper.getThemeColor(4));
- tb.ChangedLineColor = DataHelper.getColorFromHex(DataHelper.getThemeColor(12));
- tb.CaretColor = DataHelper.getColorFromHex(DataHelper.getThemeColor(13));
- tb.CurrentLineColor = DataHelper.getColorFromHex(DataHelper.getThemeColor(14));
- tb.Font = param.fieldFont;
- AutoCompleete.Init(tb);
- tb.ContextMenu = MouseMenu;
- tb.MouseUp += Field_MouseUp;
- tb.KeyUp += Field_KeyUp;
- tb.ToolTipNeeded += getToolTip;
- tb.AutoIndentNeeded += Field_AutoIndentNeeded;
- tb.MouseDoubleClick += Field_MouseDoubleClick;
- tb.VisibleRangeChanged += Tb_VisibleRangeChanged;
- tb.TextChanged += Field_TextChanged;
- Tabs.AddTab(tab, true);
- codeMap.Target = tb;
- tb.Focus();
- if (fileName != null)
- {
- checkNeedMakeBackUp(ref fileName);
- if (taskListLines.Contains(fileName))
- taskListLines.Remove(fileName);
- addFileToTaskList();
- Save_taskList();
- if (param.isSyntaxHighlighting && fileBeAded)
- DataHelper.SetColors(field.Range);
- field.IsChanged = false;
- if (param.isErrorList && fileBeAded) ErrorChecker.needCheckErrors(ref errorCount);
- }
- return true;
- }
- void Tb_VisibleRangeChanged(object sender, System.EventArgs e) => codeMap.Refresh();
- void CreateTab() => CreateTab(null);
- FastColoredTextBox field
- {
- get => Tabs.SelectedItem.Controls[0] as FastColoredTextBox;
- set { Tabs.SelectedItem = (value.Parent as FATabStripItem); value.Focus(); }
- }
- string currentFile
- {
- get
- {
- if (Tabs.SelectedItem != null) return Tabs.SelectedItem.Tag as string;
- return "";
- }
- }
- string fName => Tabs.SelectedItem.Tag != null ? (Tabs.SelectedItem.Tag as string).Split(new char[] { '\\' }).Last() : "";
- bool IsFileAlreadyOpen(string fileName)
- {
- foreach (FATabStripItem tab in Tabs.Items)
- if (tab.Tag as string == fileName)
- {
- Tabs.SelectedItem = tab;
- return true;
- }
- return false;
- }
- void UpdateDocumentMap()
- {
- if (Tabs.SelectedItem != null)
- {
- codeMap.Target = field;
- codeMap.Refresh();
- }
- }
- bool delDublicatMenuItems(string header)
- {
- bool find = false;
- int d = 0;
- while (d < oldTasks.Items.Count)
- {
- find = false;
- foreach (System.Windows.Controls.MenuItem item in oldTasks.Items)
- {
- d++;
- if (find && item.Header.ToString() == header) { oldTasks.Items.Remove(item); break; }
- if (item.Header.ToString() == header) { find = true; continue; }
- }
- }
- return find;
- }
- void addFileToTaskList()
- {// Добавляет файл в начало списка
- if (!taskListLines.Contains("*" + currentFile))
- {
- if (!taskListLines.Contains(currentFile))
- taskListLines.Add(currentFile);
- taskListLines.Add("*" + currentFile);
- if (!delDublicatMenuItems(currentFile))
- {
- System.Windows.Controls.MenuItem mi = new System.Windows.Controls.MenuItem() { Header = currentFile };
- mi.Click += Item_Click; oldTasks.Items.Insert(0, mi);
- }
- if (oldTasks.Items.Count > 10) oldTasks.Items.RemoveAt(oldTasks.Items.Count - 1);//Показываем только последние 10 файлов
- }
- }
- void CheckErrorTimer_Tick(object sender, System.EventArgs e)
- { checkErrorTimer.IsEnabled = false; ErrorChecker.needCheckErrors(ref errorCount); }
- void checkNeedMakeBackUp(ref string file)
- {// Создание резервной копии файла, если включено в настройках
- if (file == null) return;
- if (!File.Exists(file)) return;
- if (!param.isMakeBackUp) return;
- if (!Directory.Exists(backUpDir)) Directory.CreateDirectory(backUpDir);
- if (!File.Exists(backUpDir + fName))
- File.Create(backUpDir + fName).Close();
- File.WriteAllText(backUpDir + fName, File.ReadAllText(file));
- }
- bool isNeedSave()
- {
- foreach (FATabStripItem item in Tabs.Items)
- if ((item.Controls[0] as FastColoredTextBox).IsChanged)
- {
- Tabs.SelectedItem = item;
- if (System.Windows.MessageBox.Show("В текущем файле есть изменения, сохранить?", "Сохранить вашу работу?", MessageBoxButton.YesNo) == MessageBoxResult.Yes) Save_file(null, null);
- (item.Controls[0] as FastColoredTextBox).IsChanged = false;
- }
- return false;
- }
- void CodeMapCB_Click(object sender, RoutedEventArgs e) => DataHelper.CodeMapCB_Click();// Показываем/скрываем карту кода
- void CommandCB_Click(object sender, RoutedEventArgs e) => DataHelper.CommandCB_Click();// Показываем/скрываем боковую панель
- void CommandTips_Click(object sender, RoutedEventArgs e) => DataHelper.CommandTips_Click();// Показываем/скрываем блок подсказок на боковой панеле
- void Create_Click(object sender, RoutedEventArgs e)
- {// Создание нового шаблона
- if (param.taskFoler.Length > 0) sfd.InitialDirectory = param.taskFoler;
- if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
- {
- File.Create(sfd.FileName).Close();
- CreateTab(sfd.FileName);
- }
- }
- void Exit_Click(object sender, RoutedEventArgs e) { if (isNeedSave()) { e.Handled = true; return; } param.Save(); Close(); }
- void Field_AutoIndentNeeded(object sender, AutoIndentEventArgs e)
- {
- string trimedLineText = e.LineText.Trim();
- string[] str = trimedLineText.Split(new string[] { "]" }, System.StringSplitOptions.None);
- string clearedWord = str.Length > 1 ? str[0] + "]" : str[0];
- if ((param.indentBools[0] == '1' && clearedWord == "[IF]") || (param.indentBools[1] == '1' && trimedLineText == "[ELSE]"))
- {// Делаем отступ для следующей строки если текущая [IF] или [ELSE]
- e.ShiftNextLines = e.TabLength;
- }
- else if (trimedLineText == "[ENDIF]")
- {// Сдвигаем текущую и последующие строки влево, если текущая [ENDIF]
- e.Shift = -e.TabLength; e.ShiftNextLines = -e.TabLength;
- }
- }
- void Field_TextChanged(object sender, FastColoredTextBoxNS.TextChangedEventArgs e)
- {// Подсветка синтаксиса
- field.IsChanged = true;
- needSaveL.Visibility = Visibility.Visible;
- if (fileBeAded && param.isErrorList && startTimer && param.isErrorTimer) checkErrorTimer.IsEnabled = true;
- if (e != null)
- {
- e.ChangedRange.ClearFoldingMarkers();
- e.ChangedRange.SetFoldingMarkers(@"\[IF\].*", @".*\[ENDIF\]");
- if (fileBeAded && param.isSyntaxHighlighting) DataHelper.SetColors(e.ChangedRange);
- }
- if (codeMap != null && codeMapCB.IsChecked) codeMap.Refresh();
- }
- void fieldCopySelectedText(object sender, System.EventArgs e) => field.Copy();// Копирование текста
- void fieldCutSelectedText(object sender, System.EventArgs e) => field.Cut();// Вырезание текста
- void FieldFormatter_Click(object sender, RoutedEventArgs e) => DataHelper.FieldFormatter();// Выравнивание кода
- void fieldPasteText(object sender, System.EventArgs e) => field.Paste();// Вставка текста
- void getToolTip(object sender, ToolTipNeededEventArgs e) => ToolTips.getToolTip(ref sender, ref e);
- void InsertWord(object sender, RoutedEventArgs e) => DataHelper.InsertWord(ref sender);// Вставка функции без параметров
- void InsertOneBracketsWord(object sender, RoutedEventArgs e) => DataHelper.InsertOneBracketsWord(ref sender);// Вставка функции с 1-м параметром
- void InsertTwoBracketsWord(object sender, RoutedEventArgs e) => DataHelper.InsertTwoBracketsWord(ref sender);// Вставка функции с 2-я параметрами
- void InsertThreeBracketsWord(object sender, RoutedEventArgs e) => DataHelper.InsertThreeBracketsWord(ref sender);// Вставка функции с 3-я параметрами
- void Item_Click(object sender, RoutedEventArgs e)
- {
- if (oldTasks.Items.Count > 10) oldTasks.Items.RemoveAt(oldTasks.Items.Count - 1);//Изменение положения файла в списке
- string header = (sender as System.Windows.Controls.MenuItem).Header.ToString();
- if (File.Exists(header))
- {
- foreach (System.Windows.Controls.MenuItem item in oldTasks.Items) if (item.Header.ToString() == header) { oldTasks.Items.Remove(item); break; }
- System.Windows.Controls.MenuItem mi = new System.Windows.Controls.MenuItem() { Header = header };
- mi.Click += Item_Click; oldTasks.Items.Insert(0, mi);
- if (!taskListLines.Contains(header) && !taskListLines.Contains("[" + header + "]")) taskListLines.Add(header);
- CreateTab(header);
- }
- else { System.Windows.MessageBox.Show("Выбраный файл не существует!"); oldTasks.Items.RemoveAt(oldTasks.Items.IndexOf(sender)); }
- Save_taskList();
- }
- void LineNumbersCB_Click(object sender, RoutedEventArgs e) { DataHelper.ShowLineNumbers(param.isLineNumeric = lineNumbersCB.IsChecked); param.Save(); }
- void Open_Click(object sender, RoutedEventArgs e)
- {// Открытие шаблона
- if (param.taskFoler.Length > 0) ofd.InitialDirectory = param.taskFoler;
- if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
- CreateTab(ofd.FileName);
- }
- void Save_file(object sender, RoutedEventArgs e)
- {
- FATabStripItem tab = Tabs.SelectedItem;
- if (tab == null) return;
- FastColoredTextBox tb = tab.Controls[0] as FastColoredTextBox;
- if (tab.Tag == null)
- {
- if (sfd.ShowDialog() != System.Windows.Forms.DialogResult.OK) return;
- tab.Title = Path.GetFileName(sfd.FileName);
- tab.Tag = sfd.FileName;
- }
- string filePath = (string)tab.Tag;
- addFileToTaskList();
- if (filePath.Length > 0)
- {
- File.WriteAllText(filePath, tb.Text, System.Text.Encoding.Default);
- needSaveL.Visibility = Visibility.Hidden;
- field.Range.ClearStyle(StyleIndex.Style10);
- field.IsChanged = false;
- if (param.isErrorList) ErrorChecker.needCheckErrors(ref errorCount);
- }
- else
- {
- Save_as_Click(null, null);
- }
- }
- void Save_taskList()
- {// Сохранаяем список ранее открытых файлов
- string[] lines = new string[taskListLines.Count];
- if (taskListLines.Count > 0)
- {
- lines = new string[taskListLines.Count];
- for (int i = 0; i < lines.Length; i++) lines[i] = taskListLines[i]/*(oldTasks.Items[i] as System.Windows.Controls.MenuItem).Header.ToString()*/;
- }
- File.WriteAllLines(taskList, lines);
- }
- void ShowCurrlineColorCB_Click(object sender, RoutedEventArgs e)
- {
- param.isFieldCurrLineColored = showCurrlineColorCB.IsChecked;
- DataHelper.MakeCurrendLineColored(param.isFieldCurrLineColored);
- }
- void FindWindow_Click(object sender, RoutedEventArgs e) { fw = new findWindow() { Owner = this }; fw.Show(); }// Окно поиска
- void ReplaceWindow_Click(object sender, RoutedEventArgs e) { rw = new replaceWindow() { Owner = this }; rw.Show(); }// Окно замены
- void Field_MouseDoubleClick(object sender, System.Windows.Forms.MouseEventArgs e) { if (e.Button == System.Windows.Forms.MouseButtons.Left) DataHelper.Field_MouseDoubleClick(e.Location); }
- void ShowErrorsCB_Click(object sender, RoutedEventArgs e)
- {// Вкл/выкл анализатор ошибок
- field.ClearHints();
- if ((param.isErrorList = showErrorsCB.IsChecked) && startTimer) ErrorChecker.needCheckErrors(ref errorCount);
- else { checkErrorTimer.Stop(); }; param.Save();
- }
- void StateLineCB_Click(object sender, RoutedEventArgs e) => DataHelper.StateLineCB_Click();// Показываем/скрываем строку состояния
- void TextCommenting(object sender, System.EventArgs e)
- {// Комментирование кода
- Place beginLine = field.Selection.Start, endLine = field.Selection.End;
- if (beginLine > endLine) { Place swap = beginLine; beginLine = endLine; endLine = swap; }//Если выделен весь текст
- field.BeginUpdate();
- string output = field.Selection.Text;
- if (output.Length == 0)
- {
- Range currLine = field.GetLine(beginLine.iLine);
- output += "{{ " + currLine.Text + " }}";
- field.Selection.Start = new Place(0, beginLine.iLine); field.Selection.End = new Place(field.GetLineLength(endLine.iLine), endLine.iLine);
- field.InsertText(output);
- }
- else
- {
- if (beginLine.iLine == endLine.iLine)//Однострочное
- field.InsertText("{{ " + output + " }}");
- else
- {//Многострочное
- output = "{{ " + new Range(field, beginLine.iChar, beginLine.iLine, field.GetLineLength(beginLine.iLine), beginLine.iLine).Text + " }}\n";
- for (int i = beginLine.iLine + 1; i < endLine.iLine; i++)
- output += "{{ " + field.GetLine(i).Text + " }}\n";
- output += "{{ " + new Range(field, 0, endLine.iLine, endLine.iChar, endLine.iLine).Text + " }}";
- field.InsertText(output);
- }
- }
- field.EndUpdate();
- }
- void DellTextCommenting(object sender, System.EventArgs e)
- {// Раскомментирование кода
- Place beginLine = field.Selection.Start, endLine = field.Selection.End;
- if (beginLine > endLine) { Place swap = beginLine; beginLine = endLine; endLine = swap; }
- string output = "";
- for (int i = beginLine.iLine; i <= endLine.iLine; i++)
- {
- Range currLine = field.GetLine(i);
- if (DataHelper.brakets.Match(currLine.Text).Length > 0)
- if (currLine.CharBeforeStart == '\n')
- {
- output += currLine.Text.Remove(0, DataHelper.brakets_begin.Match(currLine.Text).Length);
- int end = DataHelper.brakets_end.Match(output).Length;
- output = output.Remove(output.Length - end, end) + '\n';
- }
- else output += currLine.Text;
- else output += currLine.Text + '\n';
- }
- output = output.Remove(output.Length - 1);//Удаляем лишний \n
- field.BeginUpdate(); field.Selection.Start = new Place(0, beginLine.iLine); field.Selection.End = new Place(field.GetLineLength(endLine.iLine), endLine.iLine); field.InsertText(output); field.EndUpdate();
- }
- void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
- {
- if (System.Windows.MessageBox.Show("Закрыть miniPosterEditor?", "Закрытие окна", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
- {
- if (isNeedSave()) { e.Cancel = true; return; };
- if (param.isSaveWindowSize) { param.lastWindowSize = new System.Drawing.Size((int)Width, (int)Height); param.Save(); }
- DataHelper.SaveSettings();//serverThread.Abort(); DataHelper.DisposeService(); pipeServer.Dispose();
- Save_taskList();
- if (settings != null) settings = null;
- if (colors != null) colors = null;
- if (errorSettings != null) errorSettings = null;
- }
- else e.Cancel = true;
- }
- void CookiesTransform_Click(object sender, RoutedEventArgs e) => DataHelper.CookiesTransform();
- void ChooseFileToBinaryTransform_Click(object sender, RoutedEventArgs e) { if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK) inputFileName.Text = ofd.FileName; }
- void MakeBinaryTransform_Click(object sender, RoutedEventArgs e) => DataHelper.MakeBinaryTransform(inputFileName.Text);
- void Save_as_Click(object sender, RoutedEventArgs e)
- {
- if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
- {
- Tabs.SelectedItem.Tag = sfd.FileName;
- Tabs.SelectedItem.Title = sfd.FileName.Split(new char[] { '\\' }).Last();
- File.Create(sfd.FileName).Close();
- File.WriteAllText(sfd.FileName, field.Text);
- Title = "Edit - " + sfd.FileName;
- if (param.isErrorList) ErrorChecker.needCheckErrors(ref errorCount);
- }
- }
- void Window_Drop(object sender, System.Windows.DragEventArgs e)
- {// Загружаем файлы полученные при собитии Drop
- string[] files = (string[])e.Data.GetData(System.Windows.DataFormats.FileDrop);
- if (files != null) foreach (string file in files) CreateTab(file);
- }
- void Reload_file_Click(object sender, RoutedEventArgs e)
- {// Перезагружаем текущий файл
- if (field.IsChanged)
- {
- if (System.Windows.MessageBox.Show("В текущем файле есть изменения, сохранить?", "Сохранить вашу работу?", MessageBoxButton.YesNo) == MessageBoxResult.Yes) Save_file(null, null);
- field.IsChanged = false;
- }
- string header = Tabs.SelectedItem.Tag as string;
- if (File.Exists(header))
- {
- field.Text = File.ReadAllText(header, System.Text.Encoding.Default);
- needSaveL.Visibility = errorCount.Visibility = Visibility.Hidden;
- field.IsChanged = false;
- }
- else MessageBox.Show("Файл не существует!");
- }
- void DuplicateText_Click(object sender, RoutedEventArgs e)
- {// Дублировать выделенный текст/строку
- Place beginLine = field.Selection.Start, endLine = field.Selection.End;
- if (beginLine > endLine) { Place swap = beginLine; beginLine = endLine; endLine = swap; }
- string text = field.Selection.Text;
- if (text.Length == 0)
- {
- text = field.GetLine(field.Selection.Start.iLine).Text;
- field.Selection.Start = new Place(field.GetLineLength(endLine.iLine), endLine.iLine); field.Selection.End = new Place(field.GetLineLength(endLine.iLine), endLine.iLine);
- }
- else field.Selection.Start = new Place(endLine.iChar, endLine.iLine); field.Selection.End = new Place(endLine.iChar, endLine.iLine);
- field.BeginUpdate(); field.InsertText("\n" + text); field.EndUpdate();
- }
- void MakeBracketsSpecularly_Click(object sender, RoutedEventArgs e)
- {
- if (field.Selection.Text.Length > 0) field.InsertText(field.Selection.Text.Replace("[", "\\[").Replace("]", "\\]"));
- else System.Windows.Clipboard.SetText(System.Windows.Clipboard.GetText().Replace("[", "\\[").Replace("]", "\\]"));
- }
- void changeSelectedTab()
- {// Изменить выбранную вкладку
- if (Tabs.SelectedItem != null)
- {
- int index = Tabs.Items.IndexOf(Tabs.SelectedItem);
- if (index + 1 < Tabs.Items.Count) Tabs.SelectedItem = Tabs.Items[index + 1];
- else Tabs.SelectedItem = Tabs.Items[0];
- }
- }
- void Window_KeyDown(object sender, KeyEventArgs e)
- {// Обработка нажатия горячих клавиш
- if ((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)
- {
- if ((Keyboard.Modifiers & ModifierKeys.Shift) == ModifierKeys.Shift)
- {
- if (e.Key == Key.Z) field.Redo();//Возврат изменений
- else if (e.Key == Key.E) { e.Handled = true; DellTextCommenting(null, null); }//Раскомментирование текста
- else if (e.Key == Key.F) { e.Handled = true; if (rw == null) { rw = new replaceWindow() { Owner = this }; rw.Closed += Rw_Closed; } if (field.Selection.Length > 0) rw.setTextInFindTB(field.Selection.Text); rw.Show(); rw.Focus(); }//Replace
- else if (e.Key == Key.S) { e.Handled = true; Save_as_Click(null, null); }//Save As
- else if (e.Key == Key.R) { e.Handled = true; Reload_file_Click(null, null); }//Переоткрыть текущий файл
- else if (e.Key == Key.Tab) { e.Handled = true; System.Diagnostics.Process.Start("explorer.exe", DataHelper.workDir); }//Открытие папку со служебными файлами
- }
- else if ((Keyboard.Modifiers & ModifierKeys.Alt) == ModifierKeys.Alt)
- {
- if (e.Key == Key.Q) { e.Handled = true; close_file_Click(null, null); }//CloseTab
- }
- else if (e.Key >= Key.D1 && e.Key <= Key.D9 || e.Key >= Key.NumPad1 && e.Key <= Key.NumPad9) DataHelper.gotoHint(e.Key.ToString());//Переключение на ошибку
- else if (e.Key == Key.E) { e.Handled = true; TextCommenting(null, null); }//Комментирование текста
- else if (e.Key == Key.Q) { e.Handled = true; FieldFormatter_Click(null, null); }//Выравнивание скрипта
- else if (e.Key == Key.S) { e.Handled = true; Save_file(null, null); }//Сохраняем изменения в файле
- else if (e.Key == Key.D) { e.Handled = true; DuplicateText_Click(null, null); }//Дублировать выделенный текст
- else if (e.Key == Key.L) { e.Handled = true; codeMapCB.IsChecked = !codeMapCB.IsChecked; CodeMapCB_Click(null, null); }//CodeMap
- else if (e.Key == Key.J) { e.Handled = true; commandCB.IsChecked = !commandCB.IsChecked; CommandCB_Click(null, null); }//CommandControl
- else if (e.Key == Key.M) { e.Handled = true; param.isSyntaxHighlighting = !param.isSyntaxHighlighting; param.Save(); syntaxHighlighting_Click(null, null); }//SyntaxHighlighting
- else if (e.Key == Key.Tab) { e.Handled = true; changeSelectedTab(); }//NextTab
- else if (e.Key == Key.K) { e.Handled = true; showErrorsCB.IsChecked = !showErrorsCB.IsChecked; ShowErrorsCB_Click(null, null); }//ErrorList
- else if (e.Key == Key.W) { e.Handled = true; MakeBracketsSpecularly_Click(null, null); }
- else if (e.Key == Key.F) { e.Handled = true; if (fw == null) { fw = new findWindow() { Owner = this }; fw.Closed += Fw_Closed; } if (field.Selection.Length > 0) fw.setTextInFindTB(field.Selection.Text); fw.Show(); fw.Focus(); }//Find
- else if (e.Key == Key.O) { e.Handled = true; Open_Click(null, null); }//OpenFile
- else if (e.Key == Key.N) { e.Handled = true; Create_Click(null, null); }//CreateFile
- else if (e.Key == Key.T) { e.Handled = true; Headers_to_Template_Click(null, null); }//Заголовки в шаблонный вид
- else if (e.Key == Key.P) { e.Handled = true; lineNumbersCB.IsChecked = !lineNumbersCB.IsChecked; LineNumbersCB_Click(null, null); }//LineNumbers
- else if (e.Key == Key.OemPlus) { e.Handled = true; ZoomIn_Click(null, null); }//ZoomIn
- else if (e.Key == Key.OemMinus) { e.Handled = true; ZoomOut_Click(null, null); }//ZoomOut
- }
- else if (e.Key == Key.F5) { e.Handled = true; Settings_Click(null, null); }//Settings
- else if ((Keyboard.Modifiers & ModifierKeys.Shift) == ModifierKeys.Shift && e.Key == Key.Delete) { e.Handled = true; if (field.TextLength == 0) return; field.ClearCurrentLine(); int iLine = field.Selection.Start.iLine; if (iLine + 1 < field.LinesCount) field.Selection.Start = new Place(0, iLine + 1); }//Удаляет текущую строку
- else if (e.Key == Key.OemTilde) { e.Handled = true; Colors_Click(null, null); }//Настройки цвета
- }
- void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) => DragMove();
- void Button_ToolTipOpening(object sender, ToolTipEventArgs e)
- {// Вывод подсказки при навередении на кнопку
- Button b = (sender as Button);
- if (b.ToolTip.ToString().Length == 0)
- b.ToolTip = ToolTips.getToolTipForItem(b.Content.ToString());
- }
- void ZoomIn_Click(object sender, RoutedEventArgs e) { field.ChangeFontSize(2); param.fieldFont = field.Font; DataHelper.SetFontForAllTabs(); param.Save(); }
- void ZoomOut_Click(object sender, RoutedEventArgs e) { field.ChangeFontSize(-2); param.fieldFont = field.Font; DataHelper.SetFontForAllTabs(); param.Save(); }
- void Field_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e) { strField.Content = field.Selection.Start.iLine + 1; colField.Content = field.Selection.Start.iChar + 1; }
- void Field_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e) { p = e.Location; strField.Content = field.Selection.Start.iLine + 1; colField.Content = field.Selection.Start.iChar + 1; }
- void Headers_to_Template_Click(object sender, RoutedEventArgs e)
- {
- string result = DataHelper.Headers_to_Template(field.Selection.Length > 0 ? field.Selection.Text : "");
- if (result.Length > 0)
- {
- if (field.Selection.Length > 0) field.InsertText(result);
- else Clipboard.SetText(result);
- }
- }
- void Settings_Click(object sender, RoutedEventArgs e)// Открытие окна настроек
- { if (settings == null) { settings = new Settings(ref grid, field) { Owner = this, Left = Left, Top = Top }; settings.Closed += Settings_Closed; }; settings.Show(); }
- Colors colors;
- void Colors_Click(object sender, RoutedEventArgs e)
- { if (colors == null) { colors = new Colors(Field_TextChanged) { Owner = this, Left = Left, Top = Top }; colors.Closed += Colors_Closed; }; colors.Show(); }
- void Colors_Closed(object sender, System.EventArgs e) { colors = null; Focus(); }
- void Settings_Closed(object sender, System.EventArgs e) { settings = null; Focus(); }
- IndentSettings indentSettings;
- void IndentSettings_Click(object sender, RoutedEventArgs e)
- { if (indentSettings == null) { indentSettings = new IndentSettings() { Owner = this, Left = Left, Top = Top }; indentSettings.Closed += IndentSettings_Closed; ; }; indentSettings.Show(); }
- void IndentSettings_Closed(object sender, System.EventArgs e) { indentSettings = null; Focus(); }
- void specInsert(object sender, System.EventArgs e)
- { if (si == null) { si = new SpecInput(field) { Owner = this, Left = Left, Top = Top }; si.Closed += SpecInput_Closed; }; si.Show(); }
- void SpecInput_Closed(object sender, System.EventArgs e) { si = null; Focus(); }
- ErrorSettings errorSettings;
- void ErrorsSettings_Click(object sender, RoutedEventArgs e)
- { if (errorSettings == null) { errorSettings = new ErrorSettings() { Owner = this, Left = Left, Top = Top }; errorSettings.Closed += ErrorSettings_Closed; ; }; errorSettings.Show(); }
- void ErrorSettings_Closed(object sender, System.EventArgs e) { errorSettings = null; Focus(); }
- void close_file_Click(object sender, RoutedEventArgs e)
- {
- if (Tabs.Items.Count == 1) Tabs_TabStripItemClosing(new TabStripItemClosingEventArgs(Tabs.SelectedItem));
- else { removeTabFromTaskListLines(Tabs.SelectedItem.Tag); Tabs.RemoveTab(Tabs.SelectedItem); }
- }
- void syntaxHighlighting_Click(object sender, RoutedEventArgs e) => DataHelper.syntaxHighlighting_Click();// Включение/выключение подсветки синтаксиса
- void Fw_Closed(object sender, System.EventArgs e) { fw = null; Focus(); }
- void Rw_Closed(object sender, System.EventArgs e) { rw = null; Focus(); }
- }
- }
|