Author: mkrueger
Date: 2008-02-15 17:38:54 -0500 (Fri, 15 Feb 2008)
New Revision: 95845
Modified:
trunk/monodevelop/main/src/addins/Mono.Texteditor/ChangeLog
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/Caret.cs
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/DefaultEditActions.cs
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/Document.cs
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/LineSegment.cs
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/TextViewMargin.cs
Log:
* Mono.TextEditor/DefaultEditActions.cs,
Mono.TextEditor/TextViewMargin.cs, Mono.TextEditor/Document.cs,
Mono.TextEditor/Caret.cs, Mono.TextEditor/LineSegment.cs: Caret now
remembers it's column when moving up/down.
Modified: trunk/monodevelop/main/src/addins/Mono.Texteditor/ChangeLog
===================================================================
--- trunk/monodevelop/main/src/addins/Mono.Texteditor/ChangeLog 2008-02-15
22:14:49 UTC (rev 95844)
+++ trunk/monodevelop/main/src/addins/Mono.Texteditor/ChangeLog 2008-02-15
22:38:54 UTC (rev 95845)
@@ -1,5 +1,12 @@
2008-02-16 Mike Krüger <[EMAIL PROTECTED]>
+ * Mono.TextEditor/DefaultEditActions.cs,
Mono.TextEditor/TextViewMargin.cs,
+ Mono.TextEditor/Document.cs, Mono.TextEditor/Caret.cs,
+ Mono.TextEditor/LineSegment.cs: Caret now remembers it's column when
+ moving up/down.
+
+2008-02-16 Mike Krüger <[EMAIL PROTECTED]>
+
* OblivionStyle.xml, Mono.TextEditor/TextViewMargin.cs: Fixed caret
drawing
issues.
Modified:
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/Caret.cs
===================================================================
--- trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/Caret.cs
2008-02-15 22:14:49 UTC (rev 95844)
+++ trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/Caret.cs
2008-02-15 22:38:54 UTC (rev 95845)
@@ -36,8 +36,9 @@
bool isInInsertMode = true;
bool autoScrollToCaret = true;
bool isVisible = true;
+ int desiredColumn;
Document document;
-
+
public int Line {
get {
return location.Line;
@@ -60,6 +61,7 @@
if (location.Column != value) {
DocumentLocation old = location;
location.Column = value;
+ SetDesiredColumn ();
OnPositionChanged (new
DocumentLocationEventArgs (old));
}
}
@@ -73,8 +75,7 @@
if (location != value) {
DocumentLocation old = location;
location = value;
- SetColumn ();
-
+ SetDesiredColumn ();
OnPositionChanged (new
DocumentLocationEventArgs (old));
}
}
@@ -95,7 +96,6 @@
int line = document.OffsetToLineNumber
(value);
int column = value - document.GetLine
(line).Offset;
Location = new DocumentLocation (line, column);
-
}
}
@@ -141,11 +141,18 @@
this.document = document;
}
- public void SetColumn ()
+ void SetDesiredColumn ()
{
- this.Column = System.Math.Max (0, System.Math.Min
(this.document.GetLine (this.Line).EditableLength, Column));
+ LineSegment curLine = this.document.GetLine (this.Line);
+ this.desiredColumn = curLine.GetVisualColumn (document,
this.Column);
}
+ void SetColumn ()
+ {
+ LineSegment curLine = this.document.GetLine (this.Line);
+ this.location.Column = curLine.GetLogicalColumn
(this.document, this.desiredColumn);
+ }
+
public override string ToString ()
{
return String.Format ("[Caret: Location={0},
IsInInsertMode={1}]",
Modified:
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/DefaultEditActions.cs
===================================================================
---
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/DefaultEditActions.cs
2008-02-15 22:14:49 UTC (rev 95844)
+++
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/DefaultEditActions.cs
2008-02-15 22:38:54 UTC (rev 95845)
@@ -127,7 +127,6 @@
return;
LineSegment line = data.Document.GetLine
(data.Caret.Line);
data.Document.Remove (line.Offset, line.Length);
- data.Caret.SetColumn ();
}
}
@@ -206,7 +205,6 @@
{
if (data.Caret.Line > 0) {
data.Caret.Line =
data.Document.VisualToLogicalLine (data.Document.LogicalToVisualLine
(data.Caret.Line) - 1);
- data.Caret.SetColumn ();
}
}
}
@@ -217,7 +215,6 @@
{
if (data.Caret.Line < data.Document.LineCount - 1) {
data.Caret.Line =
data.Document.VisualToLogicalLine (data.Document.LogicalToVisualLine
(data.Caret.Line) + 1);
- data.Caret.SetColumn ();
}
}
}
Modified:
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/Document.cs
===================================================================
---
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/Document.cs
2008-02-15 22:14:49 UTC (rev 95844)
+++
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/Document.cs
2008-02-15 22:38:54 UTC (rev 95845)
@@ -495,13 +495,6 @@
int line = LogicalToVisualLine (location.Line);
int column = 0;
LineSegment lineSegment = this.GetLine (location.Line);
- for (int i = 0; i < location.Column; i++) {
- if (i < lineSegment.EditableLength &&
this.buffer.GetCharAt (lineSegment.Offset + i) == '\t') {
- column +=
Mono.TextEditor.TextEditorOptions.Options.TabSize;
- } else {
- column++;
- }
- }
return new DocumentLocation (line, column);
}
Modified:
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/LineSegment.cs
===================================================================
---
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/LineSegment.cs
2008-02-15 22:14:49 UTC (rev 95844)
+++
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/LineSegment.cs
2008-02-15 22:38:54 UTC (rev 95845)
@@ -155,6 +155,36 @@
}
}
+ public int GetLogicalColumn (IBuffer doc, int visualColumn)
+ {
+ int curVisualColumn = 0;
+ for (int i = 0; i < EditableLength; i++) {
+ if (doc.GetCharAt (Offset + i) == '\t') {
+ curVisualColumn =
TextViewMargin.GetNextTabstop (curVisualColumn);
+ } else {
+ curVisualColumn++;
+ }
+ if (curVisualColumn > visualColumn)
+ return i;
+ }
+ return EditableLength;
+ }
+
+ public int GetVisualColumn (IBuffer doc, int logicalColumn)
+ {
+ int result = 0;
+ for (int i = 0; i < logicalColumn; i++) {
+ if (i < EditableLength && doc.GetCharAt (Offset
+ i) == '\t') {
+ result = TextViewMargin.GetNextTabstop
(result);
+ } else {
+ result++;
+ }
+ }
+ return result;
+ }
+
+
+
public bool Contains (int offset)
{
return Offset <= offset && offset < EndOffset;
Modified:
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/TextViewMargin.cs
===================================================================
---
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/TextViewMargin.cs
2008-02-15 22:14:49 UTC (rev 95844)
+++
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/TextViewMargin.cs
2008-02-15 22:38:54 UTC (rev 95845)
@@ -535,7 +535,7 @@
return lineXPos;
}
- int GetNextTabstop (int currentColumn)
+ public static int GetNextTabstop (int currentColumn)
{
int result = currentColumn +
TextEditorOptions.Options.TabSize;
return (result / TextEditorOptions.Options.TabSize) *
TextEditorOptions.Options.TabSize;
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches