Author: mkrueger
Date: 2008-01-24 13:24:33 -0500 (Thu, 24 Jan 2008)
New Revision: 93826

Modified:
   trunk/monodevelop/main/src/addins/MonoDevelop.SourceEditor2/ChangeLog
   
trunk/monodevelop/main/src/addins/MonoDevelop.SourceEditor2/MonoDevelop.SourceEditor/ExtendibleTextEditor.cs
   
trunk/monodevelop/main/src/addins/MonoDevelop.SourceEditor2/MonoDevelop.SourceEditor/SourceEditorWidget.cs
Log:
* MonoDevelop.SourceEditor/SourceEditorWidget.cs,
  MonoDevelop.SourceEditor/ExtendibleTextEditor.cs: Worked on error
  underlining.

Modified: trunk/monodevelop/main/src/addins/MonoDevelop.SourceEditor2/ChangeLog
===================================================================
--- trunk/monodevelop/main/src/addins/MonoDevelop.SourceEditor2/ChangeLog       
2008-01-24 18:06:18 UTC (rev 93825)
+++ trunk/monodevelop/main/src/addins/MonoDevelop.SourceEditor2/ChangeLog       
2008-01-24 18:24:33 UTC (rev 93826)
@@ -1,9 +1,16 @@
-2008-01-23  Mike Krüger <[EMAIL PROTECTED]> 
+2008-01-24  Mike Krüger <[EMAIL PROTECTED]> 
 
        * MonoDevelop.SourceEditor/SourceEditorWidget.cs,
-         MonoDevelop.SourceEditor/ExtendibleTextEditor.cs,
-         MonoDevelop.SourceEditor/SourceEditorView.cs: Worked on code 
completion.
+         MonoDevelop.SourceEditor/ExtendibleTextEditor.cs: Worked on error
+         underlining.
 
+2008-01-24  Mike Krüger <[EMAIL PROTECTED]> 
+
+       * MonoDevelop.SourceEditor/SourceEditorWidget.cs,
+         MonoDevelop.SourceEditor/ExtendibleTextEditor.cs: Worked on error
+         underlining.
+
+
 2008-01-23  Mike Krüger <[EMAIL PROTECTED]> 
 
        * MonoDevelop.SourceEditor/SourceEditorWidget.cs,

Modified: 
trunk/monodevelop/main/src/addins/MonoDevelop.SourceEditor2/MonoDevelop.SourceEditor/ExtendibleTextEditor.cs
===================================================================
--- 
trunk/monodevelop/main/src/addins/MonoDevelop.SourceEditor2/MonoDevelop.SourceEditor/ExtendibleTextEditor.cs
        2008-01-24 18:06:18 UTC (rev 93825)
+++ 
trunk/monodevelop/main/src/addins/MonoDevelop.SourceEditor2/MonoDevelop.SourceEditor/ExtendibleTextEditor.cs
        2008-01-24 18:24:33 UTC (rev 93826)
@@ -52,7 +52,6 @@
                bool showTipScheduled;
                int langTipX, langTipY;
                uint tipTimeoutId;
-               Dictionary<int, ErrorInfo> errors = new 
Dictionary<int,ErrorInfo> ();
                
                public ITextEditorExtension Extension {
                        get {
@@ -82,8 +81,9 @@
                        this.PopupMenu += delegate {
                                this.ShowPopup ();
                        };
-                       
                }
+
+               
                protected override bool OnButtonPressEvent (Gdk.EventButton e)
                {
                        if (e.Button == 3) {

Modified: 
trunk/monodevelop/main/src/addins/MonoDevelop.SourceEditor2/MonoDevelop.SourceEditor/SourceEditorWidget.cs
===================================================================
--- 
trunk/monodevelop/main/src/addins/MonoDevelop.SourceEditor2/MonoDevelop.SourceEditor/SourceEditorWidget.cs
  2008-01-24 18:06:18 UTC (rev 93825)
+++ 
trunk/monodevelop/main/src/addins/MonoDevelop.SourceEditor2/MonoDevelop.SourceEditor/SourceEditorWidget.cs
  2008-01-24 18:24:33 UTC (rev 93826)
@@ -154,8 +154,104 @@
                                UpdateLineCol ();
                                CaretModeChanged (this, EventArgs.Empty);
                        };
+                       
+                       
IdeApp.ProjectOperations.ParserDatabase.ParseInformationChanged += 
OnParseInformationChanged;
                }
+
+#region Error underlining
+               Dictionary<int, Error> errors = new Dictionary<int, Error> ();
+               uint resetTimerId;
+               ICompilationUnitBase lastCu = null;
+               bool resetTimerStarted = false;
                
+               void OnParseInformationChanged (object sender, 
ParseInformationEventArgs args)
+               {
+                       if (args == null || this.view.ContentName != 
args.FileName)
+                               return;
+                       
+                       lastCu = 
args.ParseInformation.MostRecentCompilationUnit;
+                       UpdateAutocorTimer ();
+               }
+               
+               void UpdateAutocorTimer ()
+               {
+                       uint timeout = 900;
+                       
+                       if (resetTimerStarted) {
+                               // Reset the timer
+                               GLib.Source.Remove (resetTimerId);
+                       } else {
+                               // Start the timer for the first time
+                               resetTimerStarted = true;
+                       }
+                       resetTimerId = GLib.Timeout.Add (timeout, 
AutocorrResetMeth);
+               }
+               
+               bool AutocorrResetMeth ()
+               {
+                       ResetUnderlineChangement ();
+                       if (lastCu != null)
+                               ParseCompilationUnit (lastCu);
+                       resetTimerStarted = false;
+                       return false;
+               }
+               
+               void ResetUnderlineChangement ()
+               {
+                       if (errors.Count > 0) {
+                               foreach (Error error in this.errors.Values) {
+                                       error.RemoveFromLine ();
+                               }
+                               errors.Clear ();
+                       }
+               }
+               void ParseCompilationUnit (ICompilationUnitBase cu)
+               {
+                       // No new errors
+                       if (!cu.ErrorsDuringCompile || cu.ErrorInformation == 
null)
+                               return;
+                       
+                       // Else we underline the error
+                       foreach (ErrorInfo info in cu.ErrorInformation)
+                               UnderLineError (info);
+               }
+               class Error
+               {
+                       public ErrorInfo info;
+                       public LineSegment line;
+                       TextMarker marker = new TextMarker ();
+                       
+                       public Error (ErrorInfo info, LineSegment line)
+                       {
+                               this.info = info;
+                               this.line = line;
+                       }
+                       
+                       public void AddToLine ()
+                       {
+                               line.AddMarker (marker);
+                       }
+                       public void RemoveFromLine ()
+                       {
+                               line.RemoveMarker (marker);
+                       }
+               }
+               void UnderLineError (ErrorInfo info)
+               {
+                       // Adjust the line to Gtk line representation
+                       info.Line -= 1;
+                       
+                       // If the line is already underlined
+                       if (errors.ContainsKey (info.Line))
+                               return;
+                       
+                       LineSegment line = this.textEditor.Document.GetLine 
(info.Line);
+                       Error error = new Error (info, line); 
+                       errors [info.Line] = error;
+                       error.AddToLine ();
+               }
+#endregion
+               
                public override void Dispose ()
                {
                        isDisposed = true;

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to