Browse Source

Prevent scrolling beyond the last line of text and scroll to the last line when a prompt is displayed.

pull/15/head
Matt Ward 15 years ago
parent
commit
2e15b638b0
  1. 12
      src/AddIns/BackendBindings/Ruby/RubyBinding.sln
  2. 6
      src/AddIns/BackendBindings/Scripting/Project/ICSharpCode.Scripting.csproj
  3. 2
      src/AddIns/BackendBindings/Scripting/Project/Src/IScriptingConsole.cs
  4. 2
      src/AddIns/BackendBindings/Scripting/Project/Src/IScriptingConsoleTextEditor.cs
  5. 12
      src/AddIns/BackendBindings/Scripting/Project/Src/ScriptingConsole.cs
  6. 11
      src/AddIns/BackendBindings/Scripting/Project/Src/ScriptingConsolePad.cs
  7. 5
      src/AddIns/BackendBindings/Scripting/Project/Src/ScriptingConsoleTextEditor.cs
  8. 28
      src/AddIns/BackendBindings/Scripting/Project/Src/TextEditorFactory.cs
  9. 6
      src/AddIns/BackendBindings/Scripting/Project/Src/ThreadSafeScriptingConsole.cs
  10. 41
      src/AddIns/BackendBindings/Scripting/Test/Console/ScriptingConsoleWriteTests.cs
  11. 18
      src/AddIns/BackendBindings/Scripting/Test/Console/ThreadSafeScriptingConsoleTests.cs
  12. 8
      src/AddIns/BackendBindings/Scripting/Test/Utils/FakeConsoleTextEditor.cs
  13. 6
      src/AddIns/BackendBindings/Scripting/Test/Utils/FakeScriptingConsole.cs
  14. 10
      src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsole.cs

12
src/AddIns/BackendBindings/Ruby/RubyBinding.sln

@ -1,7 +1,7 @@ @@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
# SharpDevelop 4.0.0.6808
# SharpDevelop 4.1.0.7318-alpha
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RubyBinding", "RubyBinding\Project\RubyBinding.csproj", "{C896FFFF-5B6C-4B0E-B6DF-049865F501B4}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RubyBinding.Tests", "RubyBinding\Test\RubyBinding.Tests.csproj", "{01DF0475-0CB2-4E81-971B-BADC60CDE3A5}"
@ -28,6 +28,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Scripting", ".. @@ -28,6 +28,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Scripting", "..
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Scripting.Tests", "..\Scripting\Test\ICSharpCode.Scripting.Tests.csproj", "{85C09AD8-183B-403A-869A-7226646218A9}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.WinForms", "..\..\..\Main\ICSharpCode.Core.WinForms\ICSharpCode.Core.WinForms.csproj", "{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -98,5 +100,13 @@ Global @@ -98,5 +100,13 @@ Global
{85C09AD8-183B-403A-869A-7226646218A9}.Release|Any CPU.ActiveCfg = Release|x86
{85C09AD8-183B-403A-869A-7226646218A9}.Release|x86.Build.0 = Release|x86
{85C09AD8-183B-403A-869A-7226646218A9}.Release|x86.ActiveCfg = Release|x86
{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}.Debug|Any CPU.Build.0 = Debug|Any CPU
{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}.Debug|x86.Build.0 = Debug|Any CPU
{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}.Debug|x86.ActiveCfg = Debug|Any CPU
{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}.Release|Any CPU.Build.0 = Release|Any CPU
{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}.Release|Any CPU.ActiveCfg = Release|Any CPU
{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}.Release|x86.Build.0 = Release|Any CPU
{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}.Release|x86.ActiveCfg = Release|Any CPU
EndGlobalSection
EndGlobal

6
src/AddIns/BackendBindings/Scripting/Project/ICSharpCode.Scripting.csproj

@ -106,6 +106,7 @@ @@ -106,6 +106,7 @@
<Compile Include="Src\SendLineToScriptingConsoleCommand.cs" />
<Compile Include="Src\SendSelectedTextToScriptingConsoleCommand.cs" />
<Compile Include="Src\SendToScriptingConsoleCommand.cs" />
<Compile Include="Src\TextEditorFactory.cs" />
<Compile Include="Src\TextSentToScriptingConsole.cs" />
<Compile Include="Src\ThreadSafeScriptingConsole.cs" />
<Compile Include="Src\ThreadSafeScriptingConsoleEvents.cs" />
@ -126,6 +127,11 @@ @@ -126,6 +127,11 @@
<Name>ICSharpCode.Core</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Main\ICSharpCode.Core.WinForms\ICSharpCode.Core.WinForms.csproj">
<Project>{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}</Project>
<Name>ICSharpCode.Core.WinForms</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Main\ICSharpCode.SharpDevelop.Dom\Project\ICSharpCode.SharpDevelop.Dom.csproj">
<Project>{924EE450-603D-49C1-A8E5-4AFAA31CE6F3}</Project>
<Name>ICSharpCode.SharpDevelop.Dom</Name>

2
src/AddIns/BackendBindings/Scripting/Project/Src/IScriptingConsole.cs

@ -8,6 +8,8 @@ namespace ICSharpCode.Scripting @@ -8,6 +8,8 @@ namespace ICSharpCode.Scripting
public interface IScriptingConsole : IDisposable
{
event EventHandler LineReceived;
bool ScrollToEndWhenPromptWritten { get; set; }
void SendLine(string line);
void SendText(string text);

2
src/AddIns/BackendBindings/Scripting/Project/Src/IScriptingConsoleTextEditor.cs

@ -77,5 +77,7 @@ namespace ICSharpCode.Scripting @@ -77,5 +77,7 @@ namespace ICSharpCode.Scripting
/// Makes the current text content read only. Text can be entered at the end.
/// </summary>
void MakeCurrentContentReadOnly();
void ScrollToEnd();
}
}

12
src/AddIns/BackendBindings/Scripting/Project/Src/ScriptingConsole.cs

@ -34,6 +34,7 @@ namespace ICSharpCode.Scripting @@ -34,6 +34,7 @@ namespace ICSharpCode.Scripting
{
this.textEditor = textEditor;
this.unreadLines = unreadLines;
this.ScrollToEndWhenPromptWritten = true;
textEditor.PreviewKeyDown += ProcessPreviewKeyDown;
}
@ -77,6 +78,10 @@ namespace ICSharpCode.Scripting @@ -77,6 +78,10 @@ namespace ICSharpCode.Scripting
WriteFirstLineOfSentText();
textEditor.MakeCurrentContentReadOnly();
if (ScrollToEndWhenPromptWritten) {
ScrollToEnd();
}
}
}
@ -340,5 +345,12 @@ namespace ICSharpCode.Scripting @@ -340,5 +345,12 @@ namespace ICSharpCode.Scripting
{
return unreadLines.RemoveFirstLine();
}
public bool ScrollToEndWhenPromptWritten { get; set; }
void ScrollToEnd()
{
textEditor.ScrollToEnd();
}
}
}

11
src/AddIns/BackendBindings/Scripting/Project/Src/ScriptingConsolePad.cs

@ -3,9 +3,7 @@ @@ -3,9 +3,7 @@
using System;
using ICSharpCode.AvalonEdit.Highlighting;
using ICSharpCode.SharpDevelop.Editor;
using ICSharpCode.SharpDevelop.Gui;
using AvalonEdit = ICSharpCode.AvalonEdit;
namespace ICSharpCode.Scripting
{
@ -17,19 +15,12 @@ namespace ICSharpCode.Scripting @@ -17,19 +15,12 @@ namespace ICSharpCode.Scripting
public ScriptingConsolePad()
{
textEditor = CreateTextEditor();
textEditor = TextEditorFactory.CreateTextEditor();
textEditor.SyntaxHighlighting = GetSyntaxHighlighting();
CreateConsoleHost();
host.Run();
}
AvalonEdit.TextEditor CreateTextEditor()
{
object textEditor;
EditorControlService.CreateEditor(out textEditor);
return (AvalonEdit.TextEditor)textEditor;
}
IHighlightingDefinition GetSyntaxHighlighting()
{
return HighlightingManager.Instance.GetDefinition(SyntaxHighlightingName);

5
src/AddIns/BackendBindings/Scripting/Project/Src/ScriptingConsoleTextEditor.cs

@ -147,5 +147,10 @@ namespace ICSharpCode.Scripting @@ -147,5 +147,10 @@ namespace ICSharpCode.Scripting
completionWindow = null;
}
}
public void ScrollToEnd()
{
textEditor.ScrollToEnd();
}
}
}

28
src/AddIns/BackendBindings/Scripting/Project/Src/TextEditorFactory.cs

@ -0,0 +1,28 @@ @@ -0,0 +1,28 @@
// 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 System.Windows.Media;
using ICSharpCode.AvalonEdit;
using ICSharpCode.Core.WinForms;
using ICSharpCode.SharpDevelop.Editor;
namespace ICSharpCode.Scripting
{
public static class TextEditorFactory
{
public static TextEditor CreateTextEditor()
{
object control;
EditorControlService.CreateEditor(out control);
var textEditor = (TextEditor)control;
textEditor.Options = new TextEditorOptions();
textEditor.Options.AllowScrollBelowDocument = false;
textEditor.FontFamily = new FontFamily(WinFormsResourceService.DefaultMonospacedFont.Name);
textEditor.FontSize = 13.0;
return textEditor;
}
}
}

6
src/AddIns/BackendBindings/Scripting/Project/Src/ThreadSafeScriptingConsole.cs

@ -35,6 +35,12 @@ namespace ICSharpCode.Scripting @@ -35,6 +35,12 @@ namespace ICSharpCode.Scripting
consoleEvents.SetLineReceivedEvent();
}
public bool ScrollToEndWhenPromptWritten {
get { return nonThreadSafeScriptingConsole.ScrollToEndWhenPromptWritten; }
set { nonThreadSafeScriptingConsole.ScrollToEndWhenPromptWritten = value; }
}
public void WriteLine()
{
if (dispatcher.CheckAccess()) {

41
src/AddIns/BackendBindings/Scripting/Test/Console/ScriptingConsoleWriteTests.cs

@ -23,14 +23,14 @@ namespace ICSharpCode.Scripting.Tests.Console @@ -23,14 +23,14 @@ namespace ICSharpCode.Scripting.Tests.Console
}
[Test]
public void WriteLine()
public void WriteLine_WriteLine_NewLineWritten()
{
TestableScriptingConsole.WriteLine();
Assert.AreEqual(Environment.NewLine, FakeConsoleTextEditor.Text);
}
[Test]
public void WriteLineWithText()
public void WriteLine_WriteLineWithText_TextPlusNewLineWritten()
{
TestableScriptingConsole.WriteLine("test", ScriptingStyle.Out);
string expectedText = "test" + Environment.NewLine;
@ -38,7 +38,7 @@ namespace ICSharpCode.Scripting.Tests.Console @@ -38,7 +38,7 @@ namespace ICSharpCode.Scripting.Tests.Console
}
[Test]
public void TwoWrites()
public void Write_TwoWrites_BothWrittenToTextEditor()
{
TestableScriptingConsole.Write("a", ScriptingStyle.Out);
TestableScriptingConsole.Write("b", ScriptingStyle.Out);
@ -46,9 +46,42 @@ namespace ICSharpCode.Scripting.Tests.Console @@ -46,9 +46,42 @@ namespace ICSharpCode.Scripting.Tests.Console
}
[Test]
public void DoesNotHasLinesWaitingToBeRead()
public void Constructor_NewInstance_DoesNotHaveLinesWaitingToBeRead()
{
Assert.IsFalse(TestableScriptingConsole.IsLineAvailable);
}
[Test]
public void Write_WritePromptWhenScrollToPromptIsTrue_TextEditorIsScrolled()
{
TestableScriptingConsole.ScrollToEndWhenPromptWritten = true;
TestableScriptingConsole.Write("a", ScriptingStyle.Prompt);
Assert.IsTrue(FakeConsoleTextEditor.IsScrollToEndCalled);
}
[Test]
public void Write_WritePromptWhenScrollToPromptIsFalse_TextEditorIsNotScrolled()
{
TestableScriptingConsole.ScrollToEndWhenPromptWritten = false;
TestableScriptingConsole.Write("a", ScriptingStyle.Prompt);
Assert.IsFalse(FakeConsoleTextEditor.IsScrollToEndCalled);
}
[Test]
public void Write_WriteErrorWhenScrollToPromptIsTrue_TextEditorIsNotScrolled()
{
TestableScriptingConsole.ScrollToEndWhenPromptWritten = true;
TestableScriptingConsole.Write("a", ScriptingStyle.Error);
Assert.IsFalse(FakeConsoleTextEditor.IsScrollToEndCalled);
}
[Test]
public void ScrollToEndWhenPromptWritten_NewInstance_IsTrue()
{
Assert.IsTrue(TestableScriptingConsole.ScrollToEndWhenPromptWritten);
}
}
}

18
src/AddIns/BackendBindings/Scripting/Test/Console/ThreadSafeScriptingConsoleTests.cs

@ -353,5 +353,23 @@ namespace ICSharpCode.Scripting.Tests.Console @@ -353,5 +353,23 @@ namespace ICSharpCode.Scripting.Tests.Console
string expectedLine = "abc";
Assert.AreEqual(expectedLine, line);
}
[Test]
public void ScrollToEndWhenPromptWritten_NonThreadSafeConsoleScrollToEndWhenPromptWrittenIsTrue_ReturnsTrue()
{
CreateThreadSafeScriptingConsole();
nonThreadSafeScriptingConsole.ScrollToEndWhenPromptWritten = true;
Assert.IsTrue(threadSafeConsole.ScrollToEndWhenPromptWritten);
}
[Test]
public void ScrollToEndWhenPromptWritten_NonThreadSafeConsoleScrollToEndWhenPromptWrittenIsFalse_ReturnsFalse()
{
CreateThreadSafeScriptingConsole();
nonThreadSafeScriptingConsole.ScrollToEndWhenPromptWritten = false;
Assert.IsFalse(threadSafeConsole.ScrollToEndWhenPromptWritten);
}
}
}

8
src/AddIns/BackendBindings/Scripting/Test/Utils/FakeConsoleTextEditor.cs

@ -195,5 +195,13 @@ namespace ICSharpCode.Scripting.Tests.Utils @@ -195,5 +195,13 @@ namespace ICSharpCode.Scripting.Tests.Utils
LineBuilder.Remove(SelectionStart, SelectionLength);
}
}
public bool IsScrollToEndCalled;
public bool ScrollToEndWhenPromptWritten { get; set; }
public void ScrollToEnd()
{
IsScrollToEndCalled = true;
}
}
}

6
src/AddIns/BackendBindings/Scripting/Test/Utils/FakeScriptingConsole.cs

@ -23,6 +23,7 @@ namespace ICSharpCode.Scripting.Tests.Utils @@ -23,6 +23,7 @@ namespace ICSharpCode.Scripting.Tests.Utils
public string TextToReturnFromReadFirstUnreadLine;
public bool IsReadLineCalled;
public bool IsDisposeCalled;
public bool ScrollToEndWhenPromptWritten { get; set; }
public void SendLine(string text)
{
@ -75,5 +76,10 @@ namespace ICSharpCode.Scripting.Tests.Utils @@ -75,5 +76,10 @@ namespace ICSharpCode.Scripting.Tests.Utils
{
IsDisposeCalled = true;
}
public void ScrollToEnd()
{
}
}
}

10
src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsole.cs

@ -13,16 +13,10 @@ namespace ICSharpCode.PackageManagement.Scripting @@ -13,16 +13,10 @@ namespace ICSharpCode.PackageManagement.Scripting
TextEditor textEditor;
public PackageManagementConsole()
: this(CreateTextEditor())
: this(TextEditorFactory.CreateTextEditor())
{
}
static TextEditor CreateTextEditor()
{
object textEditor;
EditorControlService.CreateEditor(out textEditor);
return (TextEditor)textEditor;
}
public PackageManagementConsole(TextEditor textEditor)
: this(new ScriptingConsoleTextEditor(textEditor), new ControlDispatcher(textEditor))

Loading…
Cancel
Save