diff --git a/src/AddIns/BackendBindings/Scripting/Test/Utils/MockEditableViewContent.cs b/src/AddIns/BackendBindings/Scripting/Test/Utils/MockEditableViewContent.cs index ecbf9e86d5..18727f639f 100644 --- a/src/AddIns/BackendBindings/Scripting/Test/Utils/MockEditableViewContent.cs +++ b/src/AddIns/BackendBindings/Scripting/Test/Utils/MockEditableViewContent.cs @@ -12,7 +12,7 @@ namespace ICSharpCode.Scripting.Tests.Utils /// /// Mock implementation of the IEditable and IViewContent. /// - public class MockEditableViewContent : MockViewContent, IEditable, ITextEditorProvider + public class MockEditableViewContent : MockViewContent, IEditable { public MockTextEditor MockTextEditor = new MockTextEditor(); @@ -37,15 +37,6 @@ namespace ICSharpCode.Scripting.Tests.Utils set { MockTextEditor.MockTextEditorOptions = value; } } - public ITextEditor TextEditor { - get { return MockTextEditor; } - } - - public IDocument GetDocumentForFile(OpenedFile file) - { - throw new NotImplementedException(); - } - public override object GetService(Type serviceType) { if (serviceType == typeof(ITextEditor)) { diff --git a/src/AddIns/BackendBindings/Scripting/Test/Utils/MockTextEditorViewContent.cs b/src/AddIns/BackendBindings/Scripting/Test/Utils/MockTextEditorViewContent.cs index 27f16959c0..018bc4da78 100644 --- a/src/AddIns/BackendBindings/Scripting/Test/Utils/MockTextEditorViewContent.cs +++ b/src/AddIns/BackendBindings/Scripting/Test/Utils/MockTextEditorViewContent.cs @@ -13,7 +13,7 @@ namespace ICSharpCode.Scripting.Tests.Utils /// A mock IViewContent implementation that also implements the /// ITextEditorControlProvider interface. /// - public class MockTextEditorViewContent : MockViewContent, ITextEditorProvider + public class MockTextEditorViewContent : MockViewContent { ITextEditor textEditor; @@ -21,14 +21,5 @@ namespace ICSharpCode.Scripting.Tests.Utils { textEditor = new AvalonEditTextEditorAdapter(new TextEditor()); } - - public ITextEditor TextEditor { - get { return textEditor; } - } - - public IDocument GetDocumentForFile(OpenedFile file) - { - throw new NotImplementedException(); - } } } diff --git a/src/AddIns/BackendBindings/WixBinding/Project/Src/Gui/WixDialogDesigner.cs b/src/AddIns/BackendBindings/WixBinding/Project/Src/Gui/WixDialogDesigner.cs index c1509e44be..efd6148cc7 100644 --- a/src/AddIns/BackendBindings/WixBinding/Project/Src/Gui/WixDialogDesigner.cs +++ b/src/AddIns/BackendBindings/WixBinding/Project/Src/Gui/WixDialogDesigner.cs @@ -83,7 +83,7 @@ namespace ICSharpCode.WixBinding // and text selection operations done by the WiX designer actually // become visible in the text editor. if (!this.SourceCodeStorage.ContainsFile(file)) { - ITextEditor editor = ((ITextEditorProvider)this.PrimaryViewContent).TextEditor; + ITextEditor editor = this.PrimaryViewContent.GetService(); this.SourceCodeStorage.AddFile(file, editor.Document, SD.FileService.DefaultFileEncoding, true); } @@ -224,13 +224,7 @@ namespace ICSharpCode.WixBinding /// Gets the active text area control. /// ITextEditor ActiveTextEditor { - get { - ITextEditorProvider provider = this.PrimaryViewContent as ITextEditorProvider; - if (provider != null) { - return provider.TextEditor; - } - return null; - } + get { return PrimaryViewContent.GetService(); } } void AddToErrorList(XmlException ex) diff --git a/src/AddIns/BackendBindings/WixBinding/Project/Src/Gui/WixDialogDesignerDisplayBinding.cs b/src/AddIns/BackendBindings/WixBinding/Project/Src/Gui/WixDialogDesignerDisplayBinding.cs index 7b26d28b22..413f4ebfb8 100644 --- a/src/AddIns/BackendBindings/WixBinding/Project/Src/Gui/WixDialogDesignerDisplayBinding.cs +++ b/src/AddIns/BackendBindings/WixBinding/Project/Src/Gui/WixDialogDesignerDisplayBinding.cs @@ -37,8 +37,7 @@ namespace ICSharpCode.WixBinding bool IsViewTextEditorProvider(IViewContent view) { - ITextEditorProvider textEditorProvider = view as ITextEditorProvider; - return textEditorProvider != null; + return view.GetService() != null; } } } diff --git a/src/AddIns/BackendBindings/WixBinding/Test/Utils/MockTextEditorViewContent.cs b/src/AddIns/BackendBindings/WixBinding/Test/Utils/MockTextEditorViewContent.cs index 5d7b5545ba..ecbeccbcab 100644 --- a/src/AddIns/BackendBindings/WixBinding/Test/Utils/MockTextEditorViewContent.cs +++ b/src/AddIns/BackendBindings/WixBinding/Test/Utils/MockTextEditorViewContent.cs @@ -11,13 +11,18 @@ namespace WixBinding.Tests.Utils /// /// Mock IViewContent class that implements the ITextEditorProvider interface. /// - public class MockTextEditorViewContent : MockViewContent, ITextEditorProvider + public class MockTextEditorViewContent : MockViewContent { public MockTextEditorViewContent() { } - public ITextEditor TextEditor { get; set; } + ITextEditor textEditor; + + public ITextEditor TextEditor { + get { return textEditor ?? new MockTextEditor(); } + set { textEditor = value; } + } public IDocument GetDocumentForFile(OpenedFile file) { diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/AvalonEditViewContent.cs b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/AvalonEditViewContent.cs index 1f6f81afa6..f38a5168a3 100644 --- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/AvalonEditViewContent.cs +++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/AvalonEditViewContent.cs @@ -24,15 +24,8 @@ using ICSharpCode.SharpDevelop.Workbench; namespace ICSharpCode.AvalonEdit.AddIn { - [ViewContentService] - public interface ICodeEditorProvider : ITextEditorProvider - { - [Obsolete("Use viewContent.GetService() instead.")] - CodeEditor CodeEditor { get; } - } - public class AvalonEditViewContent - : AbstractViewContent, IMementoCapable, ICodeEditorProvider, IPositionable, IToolsHost + : AbstractViewContent, IMementoCapable, IToolsHost { readonly CodeEditor codeEditor = new CodeEditor(); IAnalyticsMonitorTrackedFeature trackedFeature; @@ -97,10 +90,6 @@ namespace ICSharpCode.AvalonEdit.AddIn TextEditorSideBar.Instance.PutInClipboardRing(e.Text); } - public CodeEditor CodeEditor { - get { return codeEditor; } - } - public override object Control { get { return codeEditor; } } @@ -194,17 +183,17 @@ namespace ICSharpCode.AvalonEdit.AddIn public override INavigationPoint BuildNavPoint() { - int lineNumber = this.Line; + int lineNumber = codeEditor.Line; string txt = codeEditor.Document.GetText(codeEditor.Document.GetLineByNumber(lineNumber)); - return new TextNavigationPoint(this.PrimaryFileName, lineNumber, this.Column, txt); + return new TextNavigationPoint(this.PrimaryFileName, lineNumber, codeEditor.Column, txt); } void CaretChanged(object sender, EventArgs e) { NavigationService.Log(this.BuildNavPoint()); var document = codeEditor.Document; - int lineOffset = document.GetLineByNumber(this.Line).Offset; - int chOffset = this.Column; + int lineOffset = document.GetLineByNumber(codeEditor.Line).Offset; + int chOffset = codeEditor.Column; int col = 1; for (int i = 1; i < chOffset; i++) { if (document.GetCharAt(lineOffset + i - 1) == '\t') @@ -212,7 +201,7 @@ namespace ICSharpCode.AvalonEdit.AddIn else col += 1; } - SD.StatusBar.SetCaretPosition(col, this.Line, chOffset); + SD.StatusBar.SetCaretPosition(col, codeEditor.Line, chOffset); } public override bool IsReadOnly { @@ -314,35 +303,6 @@ namespace ICSharpCode.AvalonEdit.AddIn } #endregion - #region ITextEditorProvider - public ITextEditor TextEditor { - get { return codeEditor.ActiveTextEditorAdapter; } - } - - public IDocument GetDocumentForFile(OpenedFile file) - { - if (file == this.PrimaryFile) - return codeEditor.Document; - else - return null; - } - #endregion - - #region IPositionable - public int Line { - get { return this.TextEditor.Caret.Line; } - } - - public int Column { - get { return this.TextEditor.Caret.Column; } - } - - public void JumpTo(int line, int column) - { - codeEditor.ActiveTextEditor.JumpTo(line, column); - } - #endregion - object IToolsHost.ToolsContent { get { return TextEditorSideBar.Instance; } } diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs index aff804a564..e19dfd589d 100644 --- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs +++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs @@ -39,7 +39,7 @@ namespace ICSharpCode.AvalonEdit.AddIn /// [TextEditorService, ViewContentService] public class CodeEditor - : Grid, IDisposable, ICSharpCode.SharpDevelop.Gui.IEditable, IFileDocumentProvider + : Grid, IDisposable, ICSharpCode.SharpDevelop.Gui.IEditable, IFileDocumentProvider, ICSharpCode.SharpDevelop.Gui.IPositionable, IServiceProvider { const string contextMenuPath = "/SharpDevelop/ViewContent/AvalonEdit/ContextMenu"; @@ -206,6 +206,7 @@ namespace ICSharpCode.AvalonEdit.AddIn 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; @@ -420,6 +421,28 @@ namespace ICSharpCode.AvalonEdit.AddIn } #endregion + #region IPositionable + public int Line { + get { return this.PrimaryTextEditor.Adapter.Caret.Line; } + } + + public int Column { + get { return this.PrimaryTextEditor.Adapter.Caret.Column; } + } + + public void JumpTo(int line, int column) + { + this.PrimaryTextEditor.JumpTo(line, column); + } + #endregion + + #region IServiceProvider implementation + public object GetService(Type serviceType) + { + return this.primaryTextEditor.Adapter.GetService(serviceType); + } + #endregion + void TextAreaTextEntering(object sender, TextCompositionEventArgs e) { // don't start new code completion if there is still a completion window open diff --git a/src/AddIns/DisplayBindings/ILSpyAddIn/ViewContent/DecompiledViewContent.cs b/src/AddIns/DisplayBindings/ILSpyAddIn/ViewContent/DecompiledViewContent.cs index 287d0e57e6..2bf470d387 100644 --- a/src/AddIns/DisplayBindings/ILSpyAddIn/ViewContent/DecompiledViewContent.cs +++ b/src/AddIns/DisplayBindings/ILSpyAddIn/ViewContent/DecompiledViewContent.cs @@ -30,7 +30,7 @@ namespace ICSharpCode.ILSpyAddIn /// /// Hosts a decompiled type. /// - class DecompiledViewContent : AbstractViewContentWithoutFile, IPositionable + class DecompiledViewContent : AbstractViewContentWithoutFile { readonly FileName assemblyFile; readonly string fullTypeName; @@ -58,8 +58,7 @@ namespace ICSharpCode.ILSpyAddIn { this.VirtualFileName = FileName.Create("ilspy://" + assemblyFile + "/" + fullTypeName + ".cs"); - this.Services = codeEditor.PrimaryTextEditor.GetRequiredService(); - this.Services.AddService(typeof(IPositionable), this); + this.Services = codeEditor.GetRequiredService(); this.assemblyFile = assemblyFile; this.fullTypeName = fullTypeName; @@ -188,7 +187,7 @@ namespace ICSharpCode.ILSpyAddIn } TextLocation location; if (entityIdString != null && memberLocations != null && memberLocations.TryGetValue(entityIdString, out location)) - this.JumpTo(location.Line, location.Column); + codeEditor.JumpTo(location.Line, location.Column); } #endregion @@ -299,21 +298,6 @@ namespace ICSharpCode.ILSpyAddIn } #endregion - #region IPositionable - public int Line { - get { return codeEditor.ActiveTextEditorAdapter.Caret.Line; } - } - - public int Column { - get { return codeEditor.ActiveTextEditorAdapter.Caret.Column; } - } - - public void JumpTo(int line, int column) - { - codeEditor.ActiveTextEditor.JumpTo(line, column); - } - #endregion - #region Events public event EventHandler DecompilationFinished; diff --git a/src/AddIns/DisplayBindings/XmlEditor/Test/Utils/MockTextEditorProviderViewContent.cs b/src/AddIns/DisplayBindings/XmlEditor/Test/Utils/MockTextEditorProviderViewContent.cs index f4a134fdc6..ecb291106f 100644 --- a/src/AddIns/DisplayBindings/XmlEditor/Test/Utils/MockTextEditorProviderViewContent.cs +++ b/src/AddIns/DisplayBindings/XmlEditor/Test/Utils/MockTextEditorProviderViewContent.cs @@ -9,23 +9,14 @@ using ICSharpCode.SharpDevelop.Workbench; namespace XmlEditor.Tests.Utils { - public class MockTextEditorProviderViewContent : MockViewContent, ITextEditorProvider + public class MockTextEditorProviderViewContent : MockViewContent { MockTextEditor textEditor = new MockTextEditor(); - public ITextEditor TextEditor { - get { return textEditor; } - } - public MockTextEditor MockTextEditor { get { return textEditor; } } - public IDocument GetDocumentForFile(OpenedFile file) - { - throw new NotImplementedException(); - } - public override object GetService(Type serviceType) { return textEditor.GetService(serviceType); diff --git a/src/AddIns/DisplayBindings/XmlEditor/Test/XPath/RemoveXPathHighlightingCommandTestFixture.cs b/src/AddIns/DisplayBindings/XmlEditor/Test/XPath/RemoveXPathHighlightingCommandTestFixture.cs index 210f894d70..326a48b80f 100644 --- a/src/AddIns/DisplayBindings/XmlEditor/Test/XPath/RemoveXPathHighlightingCommandTestFixture.cs +++ b/src/AddIns/DisplayBindings/XmlEditor/Test/XPath/RemoveXPathHighlightingCommandTestFixture.cs @@ -69,11 +69,5 @@ namespace XmlEditor.Tests.XPath { Assert.IsTrue(markerService.TextMarkers.Count() > 0); } - - [Test] - public void MockViewContentDoesNotImplementITextEditorProviderInterface() - { - Assert.IsNull(nonTextEditorProviderView as ITextEditorProvider); - } } } diff --git a/src/Main/Base/Project/Editor/ITextEditor.cs b/src/Main/Base/Project/Editor/ITextEditor.cs index 583a956265..4e696e31ef 100644 --- a/src/Main/Base/Project/Editor/ITextEditor.cs +++ b/src/Main/Base/Project/Editor/ITextEditor.cs @@ -13,15 +13,6 @@ using ICSharpCode.SharpDevelop.Refactoring; namespace ICSharpCode.SharpDevelop.Editor { - [ViewContentService] - public interface ITextEditorProvider : IFileDocumentProvider - { - [Obsolete("Use viewContent.GetService() instead.")] - ITextEditor TextEditor { - get; - } - } - /// /// Interface for text editors. /// diff --git a/src/Main/Base/Project/Src/Gui/Pads/AbstractConsolePad.cs b/src/Main/Base/Project/Src/Gui/Pads/AbstractConsolePad.cs index 80adaf7a2b..af9b408298 100755 --- a/src/Main/Base/Project/Src/Gui/Pads/AbstractConsolePad.cs +++ b/src/Main/Base/Project/Src/Gui/Pads/AbstractConsolePad.cs @@ -24,7 +24,7 @@ using ICSharpCode.SharpDevelop.Workbench; namespace ICSharpCode.SharpDevelop.Gui { - public abstract class AbstractConsolePad : AbstractPadContent, IEditable, IPositionable, ITextEditorProvider, IToolsHost + public abstract class AbstractConsolePad : AbstractPadContent, IEditable, IPositionable, IToolsHost { const string toolBarTreePath = "/SharpDevelop/Pads/CommonConsole/ToolBar"; diff --git a/src/Main/SharpDevelop/Workbench/FileService.cs b/src/Main/SharpDevelop/Workbench/FileService.cs index a91e45dfe9..c52a3b65c5 100644 --- a/src/Main/SharpDevelop/Workbench/FileService.cs +++ b/src/Main/SharpDevelop/Workbench/FileService.cs @@ -454,12 +454,12 @@ namespace ICSharpCode.SharpDevelop.Workbench try { IViewContent content = OpenFile(fileName); - if (content is IPositionable) { - // TODO: enable jumping to a particular view + IPositionable positionable = content.GetService(); + if (positionable != null) { content.WorkbenchWindow.ActiveViewContent = content; NavigationService.ResumeLogging(); loggingResumed = true; - ((IPositionable)content).JumpTo(Math.Max(1, line), Math.Max(1, column)); + positionable.JumpTo(Math.Max(1, line), Math.Max(1, column)); } else { NavigationService.ResumeLogging(); loggingResumed = true;