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

Reply via email to