Author: mkrueger
Date: 2008-02-05 16:26:18 -0500 (Tue, 05 Feb 2008)
New Revision: 94955

Modified:
   trunk/monodevelop/main/src/addins/MonoDevelop.SourceEditor2/ChangeLog
   
trunk/monodevelop/main/src/addins/MonoDevelop.SourceEditor2/MonoDevelop.SourceEditor/SourceEditorView.cs
   
trunk/monodevelop/main/src/addins/MonoDevelop.SourceEditor2/MonoDevelop.SourceEditor/SourceEditorWidget.cs
Log:
* MonoDevelop.SourceEditor/SourceEditorWidget.cs,
  MonoDevelop.SourceEditor/SourceEditorView.cs: Added some folding
  commands.

Modified: trunk/monodevelop/main/src/addins/MonoDevelop.SourceEditor2/ChangeLog
===================================================================
--- trunk/monodevelop/main/src/addins/MonoDevelop.SourceEditor2/ChangeLog       
2008-02-05 21:25:12 UTC (rev 94954)
+++ trunk/monodevelop/main/src/addins/MonoDevelop.SourceEditor2/ChangeLog       
2008-02-05 21:26:18 UTC (rev 94955)
@@ -1,6 +1,12 @@
 2008-02-05  Mike Krüger <[EMAIL PROTECTED]> 
 
        * MonoDevelop.SourceEditor/SourceEditorWidget.cs,
+         MonoDevelop.SourceEditor/SourceEditorView.cs: Added some folding
+         commands.
+
+2008-02-05  Mike Krüger <[EMAIL PROTECTED]> 
+
+       * MonoDevelop.SourceEditor/SourceEditorWidget.cs,
          MonoDevelop.SourceEditor/SourceEditorView.cs: Improved folding 
behavior.
 
 2008-02-05  Mike Krüger <[EMAIL PROTECTED]> 

Modified: 
trunk/monodevelop/main/src/addins/MonoDevelop.SourceEditor2/MonoDevelop.SourceEditor/SourceEditorView.cs
===================================================================
--- 
trunk/monodevelop/main/src/addins/MonoDevelop.SourceEditor2/MonoDevelop.SourceEditor/SourceEditorView.cs
    2008-02-05 21:25:12 UTC (rev 94954)
+++ 
trunk/monodevelop/main/src/addins/MonoDevelop.SourceEditor2/MonoDevelop.SourceEditor/SourceEditorView.cs
    2008-02-05 21:26:18 UTC (rev 94955)
@@ -38,7 +38,7 @@
 
 namespace MonoDevelop.SourceEditor
 {      
-       public class SourceEditorView : AbstractViewContent, IPositionable, 
IExtensibleTextEditor, IBookmarkBuffer, IClipboardHandler, ICompletionWidget, 
IDocumentInformation, ICodeStyleOperations, ISplittable
+       public class SourceEditorView : AbstractViewContent, IPositionable, 
IExtensibleTextEditor, IBookmarkBuffer, IClipboardHandler, ICompletionWidget, 
IDocumentInformation, ICodeStyleOperations, ISplittable, IFoldable
        {
                SourceEditorWidget widget;
                bool isDisposed = false;
@@ -369,6 +369,7 @@
                        column = location.Column + 1;
                }
 #endregion
+
 #region IEditableTextFile
                public void InsertText (int position, string text)
                {
@@ -671,6 +672,7 @@
                        }
                }
 #endregion
+
 #region ICodeStyleOperations
                public void ToggleCodeComment ()
                {
@@ -764,6 +766,7 @@
                        RemoveTab.RemoveIndentSelection (this.TextEditorData);
                }
 #endregion
+
 #region ISplittable
                public bool EnableSplitHorizontally {
                        get {
@@ -797,5 +800,42 @@
                }
                
 #endregion
+               
+               #region IFoldable
+               void ToggleFoldings (ICollection<FoldSegment> segments)
+               {
+                       bool doFold = true;
+                       foreach (FoldSegment segment in segments) {
+                               if (segment.IsFolded) {
+                                       doFold = false;
+                                       break;
+                               }
+                       }
+                       foreach (FoldSegment segment in segments) {
+                               segment.IsFolded = doFold;
+                       }
+                       Document.RequestUpdate (new UpdateAll ());
+                       Document.CommitDocumentUpdate ();
+               }
+               
+               public void ToggleAllFoldings ()
+               {
+                       ToggleFoldings (Document.FoldSegments);
+               }
+               
+               public void FoldDefinitions ()
+               {
+                       foreach (FoldSegment segment in Document.FoldSegments) {
+                               segment.IsFolded = segment.FoldingType == 
FoldingType.TypeMember;
+                       }
+                       Document.RequestUpdate (new UpdateAll ());
+                       Document.CommitDocumentUpdate ();
+               }
+               
+               public void ToggleFolding ()
+               {
+                       ToggleFoldings (Document.GetStartFoldings 
(Document.GetLine (TextEditorData.Caret.Line)));
+               }
+               #endregion
        }
 } 
\ No newline at end of file

Modified: 
trunk/monodevelop/main/src/addins/MonoDevelop.SourceEditor2/MonoDevelop.SourceEditor/SourceEditorWidget.cs
===================================================================
--- 
trunk/monodevelop/main/src/addins/MonoDevelop.SourceEditor2/MonoDevelop.SourceEditor/SourceEditorWidget.cs
  2008-02-05 21:25:12 UTC (rev 94954)
+++ 
trunk/monodevelop/main/src/addins/MonoDevelop.SourceEditor2/MonoDevelop.SourceEditor/SourceEditorWidget.cs
  2008-02-05 21:26:18 UTC (rev 94955)
@@ -165,13 +165,13 @@
                ICompilationUnit lastCu = null;
                bool resetTimerStarted = false;
                
-               FoldSegment AddMarker (List<FoldSegment> foldSegments, string 
text, IRegion region)
+               FoldSegment AddMarker (List<FoldSegment> foldSegments, string 
text, IRegion region, FoldingType type)
                {
                        if (region == null || region.BeginLine <= 0 || 
region.EndLine <= 0 || region.BeginLine >= 
this.TextEditor.Document.Splitter.LineCount || region.EndLine >= 
this.TextEditor.Document.Splitter.LineCount)
                                return null;
                        int startOffset = 
this.TextEditor.Document.LocationToOffset (region.BeginLine - 1,  
region.BeginColumn - 1);
                        int endOffset   = 
this.TextEditor.Document.LocationToOffset (region.EndLine - 1,  
region.EndColumn - 1);
-                       FoldSegment result = new FoldSegment (text, 
startOffset, endOffset - startOffset);
+                       FoldSegment result = new FoldSegment (text, 
startOffset, endOffset - startOffset, type);
                        
                        foldSegments.Add (result);
                        return result;
@@ -180,7 +180,7 @@
                void AddClass (List<FoldSegment> foldSegments, IClass cl)
                {
                        if (cl.BodyRegion != null)
-                               AddMarker (foldSegments, "...", cl.BodyRegion);
+                               AddMarker (foldSegments, "...", cl.BodyRegion, 
FoldingType.TypeDefinition);
                        foreach (IClass inner in cl.InnerClasses) {
                                AddClass (foldSegments, inner);
                        }
@@ -191,7 +191,7 @@
                                        continue;
                                int startOffset = 
this.TextEditor.Document.LocationToOffset (method.Region.EndLine - 1,  
method.Region.EndColumn - 1);
                                int endOffset   = 
this.TextEditor.Document.LocationToOffset (method.BodyRegion.EndLine - 1,  
method.BodyRegion.EndColumn - 1);
-                               foldSegments.Add (new FoldSegment ("...", 
startOffset, endOffset - startOffset));
+                               foldSegments.Add (new FoldSegment ("...", 
startOffset, endOffset - startOffset, FoldingType.TypeMember));
                        }
                        
                        foreach (IProperty property in cl.Properties) {
@@ -199,7 +199,7 @@
                                        continue;
                                int startOffset = 
this.TextEditor.Document.LocationToOffset (property.Region.EndLine - 1,  
property.Region.EndColumn - 1);
                                int endOffset   = 
this.TextEditor.Document.LocationToOffset (property.BodyRegion.EndLine - 1,  
property.BodyRegion.EndColumn - 1);
-                               foldSegments.Add (new FoldSegment ("...", 
startOffset, endOffset - startOffset));
+                               foldSegments.Add (new FoldSegment ("...", 
startOffset, endOffset - startOffset, FoldingType.TypeMember));
                        }
                }
                
@@ -211,7 +211,9 @@
                        if (lastCu != null) {
                                List<FoldSegment> foldSegments = new 
List<FoldSegment> ();
                                foreach 
(MonoDevelop.Projects.Parser.FoldingRegion region in lastCu.FoldingRegions) {
-                                       AddMarker (foldSegments, region.Name, 
region.Region).IsFolded = !this.TextEditor.Document.HasFoldSegments;
+                                       FoldSegment marker = AddMarker 
(foldSegments, region.Name, region.Region, FoldingType.Region);
+                                       if (marker != null)
+                                               marker.IsFolded = 
!this.TextEditor.Document.HasFoldSegments;
                                }
                                foreach (IClass cl in lastCu.Classes) {
                                        AddClass (foldSegments, cl);

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

Reply via email to