public void SelectionChanged(object sender, SelectionChangedEventArgs e) { System.Windows.Controls.TabControl Control = sender as System.Windows.Controls.TabControl; if (Control != null) { if (Control.SelectedIndex >= 0) { TabItem item = Control.SelectedItem as TabItem; Grid EditorGrid = item.Content as Grid; Core.Controller.Main.CurrentEditor = EditorGrid.Children[0] as ICSharpCode.AvalonEdit.TextEditor; Core.Controller.Main.StatusBarItems[(int)Structures.StatusBar.Line].Content = Core.Properties.Resources.Line + ": " + Core.Controller.Main.CurrentEditor.TextArea.Caret.Line; Core.Controller.Main.StatusBarItems[(int)Structures.StatusBar.Column].Content = Core.Properties.Resources.Column + ": " + Core.Controller.Main.CurrentEditor.TextArea.Caret.Column; Core.Controller.Tab Index = Core.Controller.Main.TabControlList.Find(x => x.TabItem == item); if (Index != null) { if (Index.Tmp == true) { Core.Controller.Main.CompileMenuItem.IsEnabled = false; } else { Core.Controller.Main.CompileMenuItem.IsEnabled = true; } } } else { GC.ReRegisterForFinalize(Core.Controller.Main.CurrentEditor); GC.Collect(); Core.Controller.Main.CurrentEditor = null; } } }
internal static void CloseAllBut_DoWork(object sender, DoWorkEventArgs e) { Core.Controller.Main.tabControl.Dispatcher.Invoke(new Action(() => { MenuItem CloseAll_But = e.Argument as MenuItem; Grid grid = null; Core.Controller.Tab NoClose = Core.Controller.Main.TabControlList.Find(x => x.CloseAllBut.Uid == CloseAll_But.Uid); ushort index = 0; Core.Controller.Tab Index = null; while (Core.Controller.Main.TabControlList.Count > 0 + index) { Index = Core.Controller.Main.TabControlList[index]; if (NoClose == Index) { index++; continue; } Index.Editor.Clear(); grid = Index.TabItem.Content as Grid; Index.Editor = null; grid.Children.Remove(Index.Editor); grid = null; Core.Controller.Main.TabControlList.Remove(Index); Index.TabItem.ContextMenu.Items.Clear(); Core.Controller.Main.tabControl.Items.Remove(Index.TabItem); } })); }
internal void SaveItem_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e) { MenuItem SaveItem = sender as MenuItem; Core.Controller.Tab Index = Core.Controller.Main.TabControlList.Find(x => x.Save.Uid == SaveItem.Uid); Tab.SaveTab(Index.TabItem); }
internal void RenameItem_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e) { MenuItem RenameItem = sender as MenuItem; Core.Controller.Tab Index = Core.Controller.Main.TabControlList.Find(x => x.Rename.Uid == RenameItem.Uid); SaveFileDialog saveFileDialog = new SaveFileDialog() { OverwritePrompt = true, Filter = Core.Properties.Resources.FileFilter, Title = Core.Properties.Resources.SaveFile }; string HeaderText = Tab.GetTabHeaderText(Index.TabItem); saveFileDialog.FileName = HeaderText; if (saveFileDialog.ShowDialog() == true) { System.Text.StringBuilder FileToSave = new System.Text.StringBuilder(); FileToSave.Append(Index.TabItem.Uid); FileToSave.Append(HeaderText); string file = FileToSave.ToString(); if (File.Exists(file)) { File.Delete(file); } Tab.SaveTab(Index.TabItem, saveFileDialog); Tab.UpdateTabHeaderText(Index.TabItem, saveFileDialog.SafeFileName); } }
public void CountClick(object sender, RoutedEventArgs e) { Core.Controller.Tab Index = Core.Controller.Main.TabControlList.Find(x => x.TabItem == (Core.Controller.Main.tabControl.Items[Core.Controller.Main.tabControl.SelectedIndex] as TabItem)); if (Index != null) { Core.Controller.Search.LastSearchTyp = Structures.LastSearch.Count; Search.DoCount(Index, Core.Controller.Search.SearchBox); } }
public void SearchClick(object sender, RoutedEventArgs e) { Core.Controller.Tab Index = Core.Controller.Main.TabControlList.Find(x => x.TabItem == (Core.Controller.Main.tabControl.Items[Core.Controller.Main.tabControl.SelectedIndex] as TabItem)); if (Index != null) { Core.Controller.Search.LastSearchTyp = Structures.LastSearch.Search; Core.Controller.Search.SearchBeginOffset = Index.Editor.CaretOffset; Search.DoSearch(Index, Core.Controller.Search.SearchBox); } }
internal static void Save_Completed(object sender, RunWorkerCompletedEventArgs e) { TabItem item = Core.Controller.Main.tabControl.SelectedItem as TabItem; Core.Controller.Tab Index = Core.Controller.Main.TabControlList.Find(x => x.TabItem == item); if (Index != null) { if (Index.Tmp == false) { Core.Controller.Worker.CompileWorker.RunWorkerAsync(); } } }
internal static void CloseFile(Core.Controller.Tab Index) { if (!Index.State.HasFlag(Structures.States.Saved)) { MessageBoxResult result = MessageBox.Show(Core.Properties.Resources.CloseSave, Core.Properties.Resources.CloseSaveHeader, MessageBoxButton.YesNo, MessageBoxImage.Warning); if (result == MessageBoxResult.Yes) { Core.Utility.Tab.SaveTab(Index.TabItem); } } if (Index.TabItem == Core.Controller.Main.CompiledTabItem) { Core.Utility.Tab.RemoveTempTabs(); Core.Controller.Main.CompiledTabItem = null; Core.Controller.Main.CompilerPanel.Visibility = Visibility.Collapsed; Core.Controller.Main.PanelHeight = Core.Controller.Main.MainView.RowDefinitions[(int)Structures.MainView.CompilerPanel]; Core.Controller.Main.MainView.RowDefinitions[(int)Structures.MainView.CompilerPanel] = new RowDefinition() { Height = new GridLength(0), MinHeight = 0 }; Core.Controller.Main.MainView.RowDefinitions[(int)Structures.MainView.GridSplitter].Height = new GridLength(0); GridSplitter Splitter = Core.Controller.Main.MainView.Children[(int)Structures.MainView.GridSplitter] as GridSplitter; Splitter.Visibility = Visibility.Collapsed; Splitter.IsEnabled = false; } Index.Editor.Clear(); Grid grid = Index.TabItem.Content as Grid; Index.Editor = null; grid.Children.Remove(Index.Editor); Core.Controller.Main.TabControlList.Remove(Index); Index.TabItem.ContextMenu.Items.Clear(); Core.Controller.Main.tabControl.Items.Remove(Index.TabItem); if (Core.Controller.Main.tabControl.Items.Count == 0) { Core.Utility.Toggle.TabControl(false); Core.Utility.Toggle.SaveOptions(false); Core.Controller.Main.CompileMenuItem.IsEnabled = false; Core.Controller.Main.StatusBarItems[(int)Structures.StatusBar.Line].Visibility = Visibility.Collapsed; Core.Controller.Main.StatusBarItems[(int)Structures.StatusBar.Column].Visibility = Visibility.Collapsed; } GC.ReRegisterForFinalize(Index); GC.Collect(); }
public void FindNext(object sender, ExecutedRoutedEventArgs e) { Core.Controller.Search.CurrentSearchIndex++; Core.Controller.Tab Index = Core.Controller.Main.TabControlList.Find(x => x.TabItem == (Core.Controller.Main.tabControl.Items[Core.Controller.Main.tabControl.SelectedIndex] as TabItem)); if (Index != null) { if (Core.Controller.Search.CurrentSearchIndex < Index.SearchList.Count) { Core.Utility.Editor.SelectAndBringToView(Index.Editor, Index.SearchList[Core.Controller.Search.CurrentSearchIndex].Index, Core.Controller.Search.CurrentSearch.Length); } else { MessageBox.Show(Core.Properties.Resources.NoFurtherResult, Core.Properties.Resources.ProgName, MessageBoxButton.OK, MessageBoxImage.Information); } } }
public void DoSearchReplaceClick(object sender, RoutedEventArgs e) { Core.Controller.Tab Index = Core.Controller.Main.TabControlList.Find(x => x.TabItem == (Core.Controller.Main.tabControl.Items[Core.Controller.Main.tabControl.SelectedIndex] as TabItem)); if (Index != null) { if (Core.Controller.Search.LastSearchTyp == Structures.LastSearch.Replace || Core.Controller.Search.LastSearchTyp == Structures.LastSearch.ReplaceSearch) { Core.Controller.Search.CurrentSearchIndex++; Core.Utility.Editor.SelectAndBringToView(Index.Editor, Index.SearchList[Core.Controller.Search.CurrentSearchIndex].Index, Core.Controller.Search.CurrentSearch.Length); Core.Controller.Search.LastSearchTyp = Structures.LastSearch.ReplaceSearch; } else { Core.Controller.Search.LastSearchTyp = Structures.LastSearch.ReplaceSearch; Search.DoSearch(Index, Core.Controller.Replace.SearchBox_Replace); } } }
internal void Document_Changed(object sender, DocumentChangeEventArgs e) { Core.Controller.Tab Index = Core.Controller.Main.TabControlList.Find(x => x.Editor.Document == (sender as TextDocument)); if (Index != null) { if (!Index.State.HasFlag(Structures.States.Changed)) { Index.State &= ~Structures.States.Saved; Toggle.UnsavedMark(Index.TabItem, true); } Index.State |= Structures.States.Changed; if (Index.SearchList.Count > 0) { // Adding the new offset to the Search Index for (int i = Core.Controller.Search.CurrentSearchIndex; i != Index.SearchList.Count; i++) { Index.SearchList[i].Index += (e.InsertionLength > 0) ? e.InsertionLength : -e.RemovalLength; } } } }
public void DoReplace(object sender, RoutedEventArgs e) { Core.Controller.Tab Index = Core.Controller.Main.TabControlList.Find(x => x.TabItem == (Core.Controller.Main.tabControl.Items[Core.Controller.Main.tabControl.SelectedIndex] as TabItem)); if (Index != null) { Core.Controller.Search.CurrentSearchIndex++; if (Core.Controller.Search.CurrentSearch != Core.Controller.Replace.SearchBox_Replace.Text) // do a new search { Core.Controller.Search.LastSearchTyp = Structures.LastSearch.Replace; Core.Controller.Search.SearchBeginOffset = Index.Editor.CaretOffset; Index.SearchList = Search.FindString(Index.Editor, Core.Controller.Replace.SearchBox_Replace.Text, false); Core.Controller.Search.CurrentSearchIndex = 0; Core.Controller.Search.CurrentSearch = Core.Controller.Replace.SearchBox_Replace.Text; } // if a "Replace"match were skiped and then replace where clicked if (Core.Controller.Search.LastSearchTyp == Structures.LastSearch.ReplaceSearch) { Core.Controller.Search.CurrentSearchIndex--; Core.Controller.Search.LastSearchTyp = Structures.LastSearch.Replace; } // if a Search is already done with the "normal" Search, jump to the top if (Core.Controller.Search.LastSearchTyp != Structures.LastSearch.Replace) { Core.Controller.Search.CurrentSearchIndex = 0; Core.Controller.Search.LastSearchTyp = Structures.LastSearch.Replace; } if (Core.Controller.Search.CurrentSearchIndex < Index.SearchList.Count) { int offset = Index.SearchList[Core.Controller.Search.CurrentSearchIndex].Index; int lenght = Core.Controller.Replace.SearchBox_Replace.Text.Length; Index.Editor.Document.Replace(offset, lenght, Core.Controller.Replace.ReplaceBox.Text); Core.Utility.Editor.SelectAndBringToView(Index.Editor, offset, lenght); } } }
public void OpenFileClick(object sender, RoutedEventArgs e) { OpenFileDialog openFileDialog = new OpenFileDialog() { Filter = Core.Properties.Resources.FileFilter, Title = Core.Properties.Resources.OpenFile }; if (openFileDialog.ShowDialog() == true) { Core.Controller.Tab Index = Core.Controller.Main.TabControlList.Find(x => (x.TabItem.Uid + Tab.GetTabHeaderText(x.TabItem)) == openFileDialog.FileName); if (Index != null) { return; } FileStream stream = new FileStream(openFileDialog.FileName, FileMode.Open, FileAccess.Read); Generator generator = new Generator(); TabItem tab = generator.TabItem(openFileDialog.FileName, openFileDialog.SafeFileName, stream); Core.Controller.Main.tabControl.Items.Add(tab); Core.Controller.Main.tabControl.SelectedItem = tab; Toggle.TabControl(true); if (Core.Controller.Main.tabControl.Items.Count == 1) { Toggle.SaveOptions(true); Core.Controller.Main.CompileMenuItem.IsEnabled = true; Core.Controller.Main.StatusBarItems[(int)Structures.StatusBar.Line].Visibility = Visibility.Visible; Core.Controller.Main.StatusBarItems[(int)Structures.StatusBar.Column].Visibility = Visibility.Visible; Core.Controller.Main.StatusBarItems[(int)Structures.StatusBar.Line].Content = Core.Properties.Resources.Line + ": 0"; Core.Controller.Main.StatusBarItems[(int)Structures.StatusBar.Column].Content = Core.Properties.Resources.Column + ": 1"; } stream.Dispose(); } GC.ReRegisterForFinalize(openFileDialog); }
internal static void CloseAll_DoWork(object sender, DoWorkEventArgs e) { Core.Controller.Tab Index = null; Grid grid = null; Core.Controller.Main.tabControl.Dispatcher.Invoke(new Action(() => { while (Core.Controller.Main.TabControlList.Count > 0) { Index = Core.Controller.Main.TabControlList[0]; Index.Editor.Clear(); grid = Index.TabItem.Content as Grid; Index.Editor = null; grid.Children.Remove(Index.Editor); grid = null; Core.Controller.Main.TabControlList.Remove(Index); Index.TabItem.ContextMenu.Items.Clear(); Core.Controller.Main.tabControl.Items.Remove(Index.TabItem); } })); }
// Replace public void DoReplaceAll(object sender, RoutedEventArgs e) { Core.Controller.Tab Index = Core.Controller.Main.TabControlList.Find(x => x.TabItem == (Core.Controller.Main.tabControl.Items[Core.Controller.Main.tabControl.SelectedIndex] as TabItem)); if (Index != null) { Core.Controller.Search.LastSearchTyp = Structures.LastSearch.ReplaceAll; Index.SearchList = Search.FindString(Index.Editor, Core.Controller.Replace.SearchBox_Replace.Text, false); Core.Controller.Search.CurrentSearchIndex = 0; Core.Controller.Search.CurrentSearch = Core.Controller.Replace.SearchBox_Replace.Text; int offset = 0; int lenght = Core.Controller.Replace.SearchBox_Replace.Text.Length; for (int i = 0; i != Index.SearchList.Count; i++) { offset = Index.SearchList[i].Index; Index.Editor.Document.Replace(offset, lenght, Core.Controller.Replace.ReplaceBox.Text); } if (Index.SearchList.Count > 0) { Index.SearchList.Clear(); } } }
internal void MouseDoubleClick(object sender, MouseButtonEventArgs e) { System.Windows.Controls.ListBoxItem Item = sender as System.Windows.Controls.ListBoxItem; string[] matches = Regex.Split(Item.Uid, @"[\|]+"); // 0 = Path | 1 = Line -> Size = 2 if (matches.Length == 2) { Core.Controller.Tab Index = Core.Controller.Main.TabControlList.Find(x => x.TabItem == Core.Controller.Main.CompiledTabItem); if (Index != null) { string HeaderText = Core.Utility.Tab.GetTabHeaderText(Index.TabItem); if (matches[0].Equals(HeaderText, StringComparison.CurrentCultureIgnoreCase)) { if (Regex.IsMatch(matches[1], @"^\d+$")) { Core.Utility.Editor.BringLineToView(Core.Controller.Main.CurrentEditor, Convert.ToInt32(matches[1], CultureInfo.InvariantCulture.NumberFormat)); Core.Controller.Main.tabControl.SelectedItem = Core.Controller.Main.CompiledTabItem; } } else if (File.Exists(matches[0])) { int slash = matches[0].LastIndexOf('\\') + 1; string path = matches[0].Substring(0, slash); string file = matches[0].Substring(slash, matches[0].Length - slash); List <Core.Controller.Tab> TabList = Core.Controller.Main.TabControlList.FindAll(x => x.TabItem.Uid.Equals(path, StringComparison.CurrentCultureIgnoreCase)); if (TabList != null && TabList.Count > 0) { string Header = null; for (int i = 0; i != TabList.Count; i++) { Header = Core.Utility.Tab.GetTabHeaderText(TabList[i].TabItem); if (matches[0].Equals(path + Header, StringComparison.CurrentCultureIgnoreCase)) { if (Regex.IsMatch(matches[1], @"^\d+$")) { Core.Controller.Main.tabControl.SelectedItem = TabList[i].TabItem; Core.Utility.Editor.BringLineToView(Core.Controller.Main.CurrentEditor, Convert.ToInt32(matches[1], CultureInfo.InvariantCulture.NumberFormat)); } return; } } } // When the File isn't already open, then open the file and create a tmpTab FileStream stream = new FileStream(matches[0], FileMode.Open, FileAccess.Read); Generator generator = new Generator(); TabItem tab = generator.TmpTabItem(matches[0], file, stream); Core.Controller.Main.tabControl.Items.Add(tab); Core.Controller.Main.tabControl.SelectedItem = tab; stream.Dispose(); if (Regex.IsMatch(matches[1], @"^\d+$")) { Core.Utility.Editor.BringLineToView(Core.Controller.Main.CurrentEditor, Convert.ToInt32(matches[1], CultureInfo.InvariantCulture.NumberFormat)); } } } } }