Browse Source

small adjustments for virtual space mode

pull/18/head
Siegfried Pammer 14 years ago
parent
commit
d4e447ab81
  1. 13
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/Caret.cs
  2. 5
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/EditingCommandHandler.cs
  3. 4
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/Selection.cs
  4. 24
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/TextArea.cs
  5. 8
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/VisualLine.cs

13
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/Caret.cs

@ -142,6 +142,18 @@ namespace ICSharpCode.AvalonEdit.Editing @@ -142,6 +142,18 @@ namespace ICSharpCode.AvalonEdit.Editing
}
}
bool isInVirtualSpace;
/// <summary>
/// Gets whether the caret is in virtual space.
/// </summary>
public bool IsInVirtualSpace {
get {
ValidateVisualColumn();
return isInVirtualSpace;
}
}
int storedCaretOffset;
internal void OnDocumentChanging()
@ -327,6 +339,7 @@ namespace ICSharpCode.AvalonEdit.Editing @@ -327,6 +339,7 @@ namespace ICSharpCode.AvalonEdit.Editing
}
this.Position = new TextViewPosition(textView.Document.GetLocation(newOffset), newVisualColumn);
}
isInVirtualSpace = (position.VisualColumn > visualLine.VisualLength);
}
Rect CalcCaretRectangle(VisualLine visualLine)

5
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/EditingCommandHandler.cs

@ -234,7 +234,10 @@ namespace ICSharpCode.AvalonEdit.Editing @@ -234,7 +234,10 @@ namespace ICSharpCode.AvalonEdit.Editing
using (textArea.Document.RunUpdate()) {
if (textArea.Selection.IsEmpty) {
TextViewPosition oldCaretPosition = textArea.Caret.Position;
selectingCommand.Execute(args.Parameter, textArea);
if (textArea.Caret.IsInVirtualSpace && selectingCommand == EditingCommands.SelectRightByCharacter)
EditingCommands.SelectRightByWord.Execute(args.Parameter, textArea);
else
selectingCommand.Execute(args.Parameter, textArea);
bool hasSomethingDeletable = false;
foreach (ISegment s in textArea.Selection.Segments) {
if (textArea.GetDeletableSegments(s).Length > 0) {

4
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/Selection.cs

@ -81,11 +81,11 @@ namespace ICSharpCode.AvalonEdit.Editing @@ -81,11 +81,11 @@ namespace ICSharpCode.AvalonEdit.Editing
internal string AddSpacesIfRequired(string newText, TextViewPosition pos)
{
if (EnableVirtualSpace && !string.IsNullOrEmpty(newText) && newText != "\r\n" && newText != "\n" && newText != "\r") {
if (EnableVirtualSpace && newText != "\r\n" && newText != "\n" && newText != "\r") {
var line = textArea.Document.GetLineByNumber(pos.Line);
string lineText = textArea.Document.GetText(line);
var vLine = textArea.TextView.GetOrConstructVisualLine(line);
int colDiff = pos.VisualColumn - vLine.VisualLength;
int colDiff = pos.VisualColumn - vLine.VisualLengthWithEndOfLineMarker;
if (colDiff > 0) {
string additionalSpaces = "";
if (!textArea.Options.ConvertTabsToSpaces && lineText.Trim('\t').Length == 0) {

24
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/TextArea.cs

@ -871,19 +871,19 @@ namespace ICSharpCode.AvalonEdit.Editing @@ -871,19 +871,19 @@ namespace ICSharpCode.AvalonEdit.Editing
}
}
internal void RemoveSelectedText()
{
if (this.Document == null)
throw ThrowUtil.NoDocumentAssigned();
selection.ReplaceSelectionWithText(string.Empty);
#if DEBUG
if (!selection.IsEmpty) {
foreach (ISegment s in selection.Segments) {
Debug.Assert(this.ReadOnlySectionProvider.GetDeletableSegments(s).Count() == 0);
internal void RemoveSelectedText()
{
if (this.Document == null)
throw ThrowUtil.NoDocumentAssigned();
selection.ReplaceSelectionWithText(string.Empty);
#if DEBUG
if (!selection.IsEmpty) {
foreach (ISegment s in selection.Segments) {
Debug.Assert(this.ReadOnlySectionProvider.GetDeletableSegments(s).Count() == 0);
}
}
#endif
}
}
#endif
}
internal void ReplaceSelectionWithText(string newText)
{

8
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Rendering/VisualLine.cs

@ -446,6 +446,9 @@ namespace ICSharpCode.AvalonEdit.Rendering @@ -446,6 +446,9 @@ namespace ICSharpCode.AvalonEdit.Rendering
/// </summary>
public int GetNextCaretPosition(int visualColumn, LogicalDirection direction, CaretPositioningMode mode, bool allowVirtualSpace)
{
if (!HasStopsInVirtualSpace(mode))
allowVirtualSpace = false;
if (elements.Count == 0) {
// special handling for empty visual lines:
if (allowVirtualSpace) {
@ -526,6 +529,11 @@ namespace ICSharpCode.AvalonEdit.Rendering @@ -526,6 +529,11 @@ namespace ICSharpCode.AvalonEdit.Rendering
return -1;
}
static bool HasStopsInVirtualSpace(CaretPositioningMode mode)
{
return mode == CaretPositioningMode.Normal;
}
static bool HasImplicitStopAtLineStart(CaretPositioningMode mode)
{
return mode == CaretPositioningMode.Normal;

Loading…
Cancel
Save