public CodeEditor() { CodeEditorOptions.Instance.PropertyChanged += CodeEditorOptions_Instance_PropertyChanged; CustomizedHighlightingColor.ActiveColorsChanged += CustomizedHighlightingColor_ActiveColorsChanged; SD.ParserService.ParseInformationUpdated += ParserServiceParseInformationUpdated; this.FlowDirection = FlowDirection.LeftToRight; // code editing is always left-to-right this.document = new TextDocument(); var documentServiceContainer = document.GetRequiredService <IServiceContainer>(); textMarkerService = new TextMarkerService(document); documentServiceContainer.AddService(typeof(ITextMarkerService), textMarkerService); iconBarManager = new IconBarManager(); documentServiceContainer.AddService(typeof(IBookmarkMargin), iconBarManager); if (CodeEditorOptions.Instance.EnableChangeMarkerMargin) { changeWatcher = new DefaultChangeWatcher(); } primaryTextEditor = CreateTextEditor(); primaryTextEditorAdapter = (CodeEditorAdapter)primaryTextEditor.TextArea.GetService(typeof(ITextEditor)); Debug.Assert(primaryTextEditorAdapter != null); this.ColumnDefinitions.Add(new ColumnDefinition()); this.RowDefinitions.Add(new RowDefinition { Height = GridLength.Auto }); this.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star), MinHeight = minRowHeight }); SetRow(primaryTextEditor, 1); this.Children.Add(primaryTextEditor); }
public CodeEditor() { CodeEditorOptions.Instance.PropertyChanged += CodeEditorOptions_Instance_PropertyChanged; CustomizedHighlightingColor.ActiveColorsChanged += CustomizedHighlightingColor_ActiveColorsChanged; ParserService.ParseInformationUpdated += ParserServiceParseInformationUpdated; this.FlowDirection = FlowDirection.LeftToRight; // code editing is always left-to-right this.CommandBindings.Add(new CommandBinding(SharpDevelopRoutedCommands.SplitView, OnSplitView)); textMarkerService = new TextMarkerService(this); iconBarManager = new IconBarManager(); changeWatcher = new DefaultChangeWatcher(); primaryTextEditor = CreateTextEditor(); primaryTextEditorAdapter = (CodeEditorAdapter)primaryTextEditor.TextArea.GetService(typeof(ITextEditor)); Debug.Assert(primaryTextEditorAdapter != null); activeTextEditor = primaryTextEditor; this.Document = primaryTextEditor.Document; primaryTextEditor.SetBinding(TextEditor.DocumentProperty, new Binding("Document") { Source = this }); this.ColumnDefinitions.Add(new ColumnDefinition()); this.RowDefinitions.Add(new RowDefinition { Height = GridLength.Auto }); this.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star), MinHeight = minRowHeight }); SetRow(primaryTextEditor, 1); this.Children.Add(primaryTextEditor); }
void OnSplitView(object sender, ExecutedRoutedEventArgs e) { if (secondaryTextEditor == null) { // create secondary editor this.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star), MinHeight = minRowHeight }); secondaryTextEditor = CreateTextEditor(); secondaryTextEditorAdapter = (CodeEditorAdapter)secondaryTextEditor.TextArea.GetService(typeof(ITextEditor)); Debug.Assert(primaryTextEditorAdapter != null); secondaryTextEditor.SetBinding(TextEditor.DocumentProperty, new Binding(TextEditor.DocumentProperty.Name) { Source = primaryTextEditor }); secondaryTextEditor.SetBinding(TextEditor.IsReadOnlyProperty, new Binding(TextEditor.IsReadOnlyProperty.Name) { Source = primaryTextEditor }); secondaryTextEditor.SyntaxHighlighting = primaryTextEditor.SyntaxHighlighting; secondaryTextEditor.UpdateCustomizedHighlighting(); gridSplitter = new GridSplitter { Height = 4, HorizontalAlignment = HorizontalAlignment.Stretch, VerticalAlignment = VerticalAlignment.Top }; SetRow(gridSplitter, 2); this.Children.Add(gridSplitter); secondaryTextEditor.Margin = new Thickness(0, 4, 0, 0); SetRow(secondaryTextEditor, 2); this.Children.Add(secondaryTextEditor); secondaryTextEditorAdapter.FileNameChanged(); FetchParseInformation(); } else { // remove secondary editor this.Children.Remove(secondaryTextEditor); this.Children.Remove(gridSplitter); secondaryTextEditorAdapter.Language.Detach(); DisposeTextEditor(secondaryTextEditor); secondaryTextEditor = null; secondaryTextEditorAdapter = null; gridSplitter = null; this.RowDefinitions.RemoveAt(this.RowDefinitions.Count - 1); this.ActiveTextEditor = primaryTextEditor; } }
/// <summary> /// This method is called to create a new text editor view (=once for the primary editor; and whenever splitting the editor) /// </summary> protected virtual CodeEditorView CreateTextEditor() { CodeEditorView codeEditorView = new CodeEditorView(); CodeEditorAdapter adapter = new CodeEditorAdapter(this, codeEditorView); codeEditorView.Adapter = adapter; codeEditorView.Document = document; TextView textView = codeEditorView.TextArea.TextView; textView.Services.AddService(typeof(ITextEditor), adapter); textView.Services.AddService(typeof(CodeEditor), this); textView.Services.AddService(typeof(ICSharpCode.SharpDevelop.Gui.IEditable), this); textView.Services.AddService(typeof(ICSharpCode.SharpDevelop.Gui.IPositionable), this); textView.Services.AddService(typeof(IFileDocumentProvider), this); codeEditorView.TextArea.TextEntering += TextAreaTextEntering; codeEditorView.TextArea.TextEntered += TextAreaTextEntered; codeEditorView.TextArea.Caret.PositionChanged += TextAreaCaretPositionChanged; codeEditorView.TextArea.SelectionChanged += TextAreaSelectionChanged; codeEditorView.TextArea.DefaultInputHandler.CommandBindings.Add( new CommandBinding(CustomCommands.CtrlSpaceCompletion, OnCodeCompletion)); codeEditorView.TextArea.DefaultInputHandler.CommandBindings.Add( new CommandBinding(CustomCommands.CtrlShiftSpaceInsight, OnCodeInsight)); SearchPanel.Install(codeEditorView.TextArea); textView.BackgroundRenderers.Add(textMarkerService); textView.LineTransformers.Add(textMarkerService); textView.Services.AddService(typeof(IEditorUIService), new AvalonEditEditorUIService(textView)); codeEditorView.TextArea.LeftMargins.Insert(0, new IconBarMargin(iconBarManager)); if (changeWatcher != null) { codeEditorView.TextArea.LeftMargins.Add(new ChangeMarkerMargin(changeWatcher)); } textView.Services.AddService(typeof(EnhancedScrollBar), new EnhancedScrollBar(codeEditorView, textMarkerService, changeWatcher)); codeEditorView.TextArea.MouseRightButtonDown += TextAreaMouseRightButtonDown; codeEditorView.TextArea.ContextMenuOpening += TextAreaContextMenuOpening; codeEditorView.TextArea.TextCopied += textEditor_TextArea_TextCopied; return(codeEditorView); }
/// <summary> /// This method is called to create a new text editor view (=once for the primary editor; and whenever splitting the editor) /// </summary> protected virtual CodeEditorView CreateTextEditor() { CodeEditorView codeEditorView = new CodeEditorView(); CodeEditorAdapter adapter = new CodeEditorAdapter(this, codeEditorView); codeEditorView.Adapter = adapter; codeEditorView.Document = document; TextView textView = codeEditorView.TextArea.TextView; textView.Services.AddService(typeof(ITextEditor), adapter); textView.Services.AddService(typeof(CodeEditor), this); codeEditorView.TextArea.TextEntering += TextAreaTextEntering; codeEditorView.TextArea.TextEntered += TextAreaTextEntered; codeEditorView.TextArea.Caret.PositionChanged += TextAreaCaretPositionChanged; codeEditorView.TextArea.DefaultInputHandler.CommandBindings.Add( new CommandBinding(CustomCommands.CtrlSpaceCompletion, OnCodeCompletion)); codeEditorView.TextArea.DefaultInputHandler.NestedInputHandlers.Add(new SearchInputHandler(codeEditorView.TextArea)); textView.BackgroundRenderers.Add(textMarkerService); textView.LineTransformers.Add(textMarkerService); textView.Services.AddService(typeof(ITextMarkerService), textMarkerService); textView.Services.AddService(typeof(IEditorUIService), new AvalonEditEditorUIService(textView)); textView.Services.AddService(typeof(IBookmarkMargin), iconBarManager); codeEditorView.TextArea.LeftMargins.Insert(0, new IconBarMargin(iconBarManager)); if (changeWatcher != null) { codeEditorView.TextArea.LeftMargins.Add(new ChangeMarkerMargin(changeWatcher)); } textView.Services.AddService(typeof(ISyntaxHighlighter), new AvalonEditSyntaxHighlighterAdapter(textView)); codeEditorView.TextArea.MouseRightButtonDown += TextAreaMouseRightButtonDown; codeEditorView.TextArea.ContextMenuOpening += TextAreaContextMenuOpening; codeEditorView.TextArea.TextCopied += textEditor_TextArea_TextCopied; codeEditorView.GotFocus += textEditor_GotFocus; return(codeEditorView); }
void OnSplitView(object sender, ExecutedRoutedEventArgs e) { if (secondaryTextEditor == null) { // create secondary editor this.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star), MinHeight = minRowHeight }); secondaryTextEditor = CreateTextEditor(); secondaryTextEditorAdapter = (CodeEditorAdapter)secondaryTextEditor.TextArea.GetService(typeof(ITextEditor)); Debug.Assert(primaryTextEditorAdapter != null); secondaryTextEditor.SetBinding(TextEditor.DocumentProperty, new Binding(TextEditor.DocumentProperty.Name) { Source = primaryTextEditor }); secondaryTextEditor.SetBinding(TextEditor.IsReadOnlyProperty, new Binding(TextEditor.IsReadOnlyProperty.Name) { Source = primaryTextEditor }); secondaryTextEditor.SyntaxHighlighting = primaryTextEditor.SyntaxHighlighting; gridSplitter = new GridSplitter { Height = 4, HorizontalAlignment = HorizontalAlignment.Stretch, VerticalAlignment = VerticalAlignment.Top }; SetRow(gridSplitter, 2); this.Children.Add(gridSplitter); secondaryTextEditor.Margin = new Thickness(0, 4, 0, 0); SetRow(secondaryTextEditor, 2); this.Children.Add(secondaryTextEditor); secondaryTextEditorAdapter.FileNameChanged(); FetchParseInformation(); } else { // remove secondary editor this.Children.Remove(secondaryTextEditor); this.Children.Remove(gridSplitter); secondaryTextEditorAdapter.Language.Detach(); DisposeTextEditor(secondaryTextEditor); secondaryTextEditor = null; secondaryTextEditorAdapter = null; gridSplitter = null; this.RowDefinitions.RemoveAt(this.RowDefinitions.Count - 1); this.ActiveTextEditor = primaryTextEditor; } }
/// <summary> /// This method is called to create a new text editor view (=once for the primary editor; and whenever splitting the editor) /// </summary> protected virtual CodeEditorView CreateTextEditor() { CodeEditorView codeEditorView = new CodeEditorView(); CodeEditorAdapter adapter = new CodeEditorAdapter(this, codeEditorView); codeEditorView.Adapter = adapter; TextView textView = codeEditorView.TextArea.TextView; textView.Services.AddService(typeof(ITextEditor), adapter); textView.Services.AddService(typeof(CodeEditor), this); codeEditorView.TextArea.TextEntering += TextAreaTextEntering; codeEditorView.TextArea.TextEntered += TextAreaTextEntered; codeEditorView.TextArea.Caret.PositionChanged += TextAreaCaretPositionChanged; codeEditorView.TextArea.DefaultInputHandler.CommandBindings.Add( new CommandBinding(CustomCommands.CtrlSpaceCompletion, OnCodeCompletion)); textView.BackgroundRenderers.Add(textMarkerService); textView.LineTransformers.Add(textMarkerService); textView.Services.AddService(typeof(ITextMarkerService), textMarkerService); textView.Services.AddService(typeof(IEditorUIService), new AvalonEditEditorUIService(textView)); textView.Services.AddService(typeof(IBookmarkMargin), iconBarManager); codeEditorView.TextArea.LeftMargins.Insert(0, new IconBarMargin(iconBarManager)); codeEditorView.TextArea.LeftMargins.Add(new ChangeMarkerMargin(changeWatcher)); textView.Services.AddService(typeof(ISyntaxHighlighter), new AvalonEditSyntaxHighlighterAdapter(textView)); codeEditorView.TextArea.MouseRightButtonDown += TextAreaMouseRightButtonDown; codeEditorView.TextArea.ContextMenuOpening += TextAreaContextMenuOpening; codeEditorView.TextArea.TextCopied += textEditor_TextArea_TextCopied; codeEditorView.GotFocus += textEditor_GotFocus; return codeEditorView; }
/// <summary> /// This method is called to create a new text editor view (=once for the primary editor; and whenever splitting the editor) /// </summary> protected virtual CodeEditorView CreateTextEditor() { CodeEditorView codeEditorView = new CodeEditorView(); CodeEditorAdapter adapter = new CodeEditorAdapter(this, codeEditorView); codeEditorView.Adapter = adapter; codeEditorView.Document = document; TextView textView = codeEditorView.TextArea.TextView; textView.Services.AddService(typeof(ITextEditor), adapter); textView.Services.AddService(typeof(CodeEditor), this); textView.Services.AddService(typeof(ICSharpCode.SharpDevelop.Gui.IEditable), this); textView.Services.AddService(typeof(ICSharpCode.SharpDevelop.Gui.IPositionable), this); textView.Services.AddService(typeof(IFileDocumentProvider), this); codeEditorView.TextArea.TextEntering += TextAreaTextEntering; codeEditorView.TextArea.TextEntered += TextAreaTextEntered; codeEditorView.TextArea.Caret.PositionChanged += TextAreaCaretPositionChanged; codeEditorView.TextArea.SelectionChanged += TextAreaSelectionChanged; codeEditorView.TextArea.DefaultInputHandler.CommandBindings.Add( new CommandBinding(CustomCommands.CtrlSpaceCompletion, OnCodeCompletion)); codeEditorView.TextArea.DefaultInputHandler.CommandBindings.Add( new CommandBinding(CustomCommands.CtrlShiftSpaceInsight, OnCodeInsight)); SearchPanel.Install(codeEditorView.TextArea); textView.BackgroundRenderers.Add(textMarkerService); textView.LineTransformers.Add(textMarkerService); textView.Services.AddService(typeof(IEditorUIService), new AvalonEditEditorUIService(textView)); codeEditorView.TextArea.LeftMargins.Insert(0, new IconBarMargin(iconBarManager)); if (changeWatcher != null) { codeEditorView.TextArea.LeftMargins.Add(new ChangeMarkerMargin(changeWatcher)); } textView.Services.AddService(typeof(EnhancedScrollBar), new EnhancedScrollBar(codeEditorView, textMarkerService, changeWatcher)); codeEditorView.TextArea.MouseRightButtonDown += TextAreaMouseRightButtonDown; codeEditorView.TextArea.ContextMenuOpening += TextAreaContextMenuOpening; codeEditorView.TextArea.TextCopied += textEditor_TextArea_TextCopied; return codeEditorView; }
public CodeEditor() { CodeEditorOptions.Instance.PropertyChanged += CodeEditorOptions_Instance_PropertyChanged; CustomizedHighlightingColor.ActiveColorsChanged += CustomizedHighlightingColor_ActiveColorsChanged; SD.ParserService.ParseInformationUpdated += ParserServiceParseInformationUpdated; this.FlowDirection = FlowDirection.LeftToRight; // code editing is always left-to-right this.document = new TextDocument(); var documentServiceContainer = document.GetRequiredService<IServiceContainer>(); textMarkerService = new TextMarkerService(document); documentServiceContainer.AddService(typeof(ITextMarkerService), textMarkerService); iconBarManager = new IconBarManager(); documentServiceContainer.AddService(typeof(IBookmarkMargin), iconBarManager); if (CodeEditorOptions.Instance.EnableChangeMarkerMargin) { changeWatcher = new DefaultChangeWatcher(); } primaryTextEditor = CreateTextEditor(); primaryTextEditorAdapter = (CodeEditorAdapter)primaryTextEditor.TextArea.GetService(typeof(ITextEditor)); Debug.Assert(primaryTextEditorAdapter != null); this.ColumnDefinitions.Add(new ColumnDefinition()); this.RowDefinitions.Add(new RowDefinition { Height = GridLength.Auto }); this.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star), MinHeight = minRowHeight }); SetRow(primaryTextEditor, 1); this.Children.Add(primaryTextEditor); }