diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonConsoleHost.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonConsoleHost.cs index 72349bdb18..40d21132e4 100644 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonConsoleHost.cs +++ b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonConsoleHost.cs @@ -13,7 +13,7 @@ using Microsoft.Scripting.Hosting.Shell; namespace ICSharpCode.PythonBinding { - public class PythonConsoleHost : ConsoleHost, IDisposable + public class PythonConsoleHost : ConsoleHost, IScriptingConsoleHost { Thread thread; IScriptingConsoleTextEditor textEditor; @@ -25,7 +25,7 @@ namespace ICSharpCode.PythonBinding pythonConsole = new PythonConsole(textEditor, dispatcher); } - public PythonConsole PythonConsole { + public IScriptingConsole ScriptingConsole { get { return pythonConsole; } } diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonConsolePad.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonConsolePad.cs index 051a280ff1..f52a3ed44d 100644 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonConsolePad.cs +++ b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonConsolePad.cs @@ -3,53 +3,15 @@ using System; using ICSharpCode.Scripting; -using ICSharpCode.SharpDevelop.Editor; -using ICSharpCode.SharpDevelop.Gui; -using AvalonEdit = ICSharpCode.AvalonEdit; namespace ICSharpCode.PythonBinding { - public class PythonConsolePad : AbstractPadContent, IScriptingConsolePad - { - ScriptingConsoleTextEditor consoleTextEditor; - AvalonEdit.TextEditor textEditor; - PythonConsoleHost host; - - public PythonConsolePad() + public class PythonConsolePad : ScriptingConsolePad + { + protected override IScriptingConsoleHost CreateConsoleHost(IScriptingConsoleTextEditor consoleTextEditor, + IControlDispatcher dispatcher) { - textEditor = CreateTextEditor(); - ControlDispatcher dispatcher = new ControlDispatcher(textEditor); - consoleTextEditor = new ScriptingConsoleTextEditor(textEditor); - host = new PythonConsoleHost(consoleTextEditor, dispatcher); - host.Run(); - } - - AvalonEdit.TextEditor CreateTextEditor() - { - object textEditor; - EditorControlService.CreateEditor(out textEditor); - return (AvalonEdit.TextEditor)textEditor; - } - - public IScriptingConsoleTextEditor ScriptingConsoleTextEditor { - get { return consoleTextEditor; } - } - - public IScriptingConsole ScriptingConsole { - get { return host.PythonConsole; } - } - - public override object Control { - get { return textEditor; } - } - - public override void Dispose() - { - host.Dispose(); - } - - public override object InitiallyFocusedControl { - get { return textEditor; } + return new PythonConsoleHost(consoleTextEditor, dispatcher); } } } diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Project/Src/RubyConsoleHost.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Project/Src/RubyConsoleHost.cs index a7a7c7102a..67ed74cbd1 100644 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Project/Src/RubyConsoleHost.cs +++ b/src/AddIns/BackendBindings/Ruby/RubyBinding/Project/Src/RubyConsoleHost.cs @@ -14,7 +14,7 @@ using Microsoft.Scripting.Hosting.Shell; namespace ICSharpCode.RubyBinding { - public class RubyConsoleHost : ConsoleHost, IDisposable + public class RubyConsoleHost : ConsoleHost, IScriptingConsoleHost { Thread thread; IScriptingConsoleTextEditor textEditor; @@ -26,7 +26,7 @@ namespace ICSharpCode.RubyBinding rubyConsole = new RubyConsole(textEditor, dispatcher); } - public RubyConsole RubyConsole { + public IScriptingConsole ScriptingConsole { get { return rubyConsole; } } diff --git a/src/AddIns/BackendBindings/Ruby/RubyBinding/Project/Src/RubyConsolePad.cs b/src/AddIns/BackendBindings/Ruby/RubyBinding/Project/Src/RubyConsolePad.cs index 4b9f6ecb73..d10cd1bb4a 100644 --- a/src/AddIns/BackendBindings/Ruby/RubyBinding/Project/Src/RubyConsolePad.cs +++ b/src/AddIns/BackendBindings/Ruby/RubyBinding/Project/Src/RubyConsolePad.cs @@ -3,53 +3,15 @@ using System; using ICSharpCode.Scripting; -using ICSharpCode.SharpDevelop.Editor; -using ICSharpCode.SharpDevelop.Gui; -using AvalonEdit = ICSharpCode.AvalonEdit; namespace ICSharpCode.RubyBinding { - public class RubyConsolePad : AbstractPadContent, IScriptingConsolePad - { - ScriptingConsoleTextEditor consoleTextEditor; - AvalonEdit.TextEditor textEditor; - RubyConsoleHost host; - - public RubyConsolePad() + public class RubyConsolePad : ScriptingConsolePad + { + protected override IScriptingConsoleHost CreateConsoleHost(IScriptingConsoleTextEditor consoleTextEditor, + IControlDispatcher dispatcher) { - textEditor = CreateTextEditor(); - ControlDispatcher dispatcher = new ControlDispatcher(textEditor); - consoleTextEditor = new ScriptingConsoleTextEditor(textEditor); - host = new RubyConsoleHost(consoleTextEditor, dispatcher); - host.Run(); - } - - AvalonEdit.TextEditor CreateTextEditor() - { - object textEditor; - EditorControlService.CreateEditor(out textEditor); - return (AvalonEdit.TextEditor)textEditor; - } - - public IScriptingConsoleTextEditor ScriptingConsoleTextEditor { - get { return consoleTextEditor; } - } - - public IScriptingConsole ScriptingConsole { - get { return host.RubyConsole; } - } - - public override object Control { - get { return textEditor; } - } - - public override void Dispose() - { - host.Dispose(); - } - - public override object InitiallyFocusedControl { - get { return textEditor; } + return new RubyConsoleHost(consoleTextEditor, dispatcher); } } } diff --git a/src/AddIns/BackendBindings/Scripting/Project/ICSharpCode.Scripting.csproj b/src/AddIns/BackendBindings/Scripting/Project/ICSharpCode.Scripting.csproj index 2e30c750ed..f137ad0d6b 100644 --- a/src/AddIns/BackendBindings/Scripting/Project/ICSharpCode.Scripting.csproj +++ b/src/AddIns/BackendBindings/Scripting/Project/ICSharpCode.Scripting.csproj @@ -73,6 +73,7 @@ + @@ -83,6 +84,7 @@ + diff --git a/src/AddIns/BackendBindings/Scripting/Project/Src/IScriptingConsoleHost.cs b/src/AddIns/BackendBindings/Scripting/Project/Src/IScriptingConsoleHost.cs new file mode 100644 index 0000000000..d8989d6b14 --- /dev/null +++ b/src/AddIns/BackendBindings/Scripting/Project/Src/IScriptingConsoleHost.cs @@ -0,0 +1,17 @@ +// +// +// +// +// $Revision$ +// + +using System; + +namespace ICSharpCode.Scripting +{ + public interface IScriptingConsoleHost : IDisposable + { + IScriptingConsole ScriptingConsole { get; } + void Run(); + } +} diff --git a/src/AddIns/BackendBindings/Scripting/Project/Src/ScriptingConsolePad.cs b/src/AddIns/BackendBindings/Scripting/Project/Src/ScriptingConsolePad.cs new file mode 100644 index 0000000000..c4fb9e5be7 --- /dev/null +++ b/src/AddIns/BackendBindings/Scripting/Project/Src/ScriptingConsolePad.cs @@ -0,0 +1,66 @@ +// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) +// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) + +using System; +using ICSharpCode.SharpDevelop.Editor; +using ICSharpCode.SharpDevelop.Gui; +using AvalonEdit = ICSharpCode.AvalonEdit; + +namespace ICSharpCode.Scripting +{ + public abstract class ScriptingConsolePad : AbstractPadContent, IScriptingConsolePad + { + ScriptingConsoleTextEditor consoleTextEditor; + AvalonEdit.TextEditor textEditor; + IScriptingConsoleHost host; + + public ScriptingConsolePad() + { + textEditor = CreateTextEditor(); + CreateConsoleHost(); + host.Run(); + } + + AvalonEdit.TextEditor CreateTextEditor() + { + object textEditor; + EditorControlService.CreateEditor(out textEditor); + return (AvalonEdit.TextEditor)textEditor; + } + + void CreateConsoleHost() + { + ControlDispatcher dispatcher = new ControlDispatcher(textEditor); + consoleTextEditor = new ScriptingConsoleTextEditor(textEditor); + host = CreateConsoleHost(consoleTextEditor, dispatcher); + } + + protected virtual IScriptingConsoleHost CreateConsoleHost( + IScriptingConsoleTextEditor consoleTextEditor, + IControlDispatcher dispatcher) + { + return null; + } + + public IScriptingConsoleTextEditor ScriptingConsoleTextEditor { + get { return consoleTextEditor; } + } + + public IScriptingConsole ScriptingConsole { + get { return host.ScriptingConsole; } + } + + public override object Control { + get { return textEditor; } + } + + public override void Dispose() + { + host.Dispose(); + } + + public override object InitiallyFocusedControl { + get { return textEditor; } + } + } +}