/AvalonEdit/Documentation/Folding.aml
http://github.com/icsharpcode/ILSpy · Unknown · 58 lines · 58 code · 0 blank · 0 comment · 0 complexity · 3c7446d4e339e1b7422137e6e7d680b4 MD5 · raw file
- <?xml version="1.0" encoding="utf-8"?>
- <topic id="440df648-413e-4f42-a28b-6b2b0e9b1084" revisionNumber="1">
- <developerConceptualDocument xmlns="http://ddue.schemas.microsoft.com/authoring/2003/5" xmlns:xlink="http://www.w3.org/1999/xlink">
- <!--<introduction>
- <para>
- Introduction for 'Folding'.
- </para>
- </introduction>-->
- <section>
- <title>How to use Folding in your application</title>
- <content>
- <para>
- Folding (code collapsing) is implemented as an extension to the editor.
- It could have been implemented in a separate assembly without having to
- modify the AvalonEdit code.
- A <codeEntityReference>T:ICSharpCode.AvalonEdit.Rendering.VisualLineElementGenerator</codeEntityReference>
- takes care of the collapsed sections in the text document; and a custom
- margin draws the plus and minus buttons.
- </para>
- <para>You could use the relevant classes separately;
- but, to make it a bit easier to use, the static
- <codeEntityReference qualifyHint="true">M:ICSharpCode.AvalonEdit.Folding.FoldingManager.Install(ICSharpCode.AvalonEdit.Editing.TextArea)</codeEntityReference>
- method will create and register the necessary parts automatically.</para>
- <para>All that's left for you is to regularly call
- <codeEntityReference qualifyHint="true">M:ICSharpCode.AvalonEdit.Folding.FoldingManager.UpdateFoldings(System.Collections.Generic.IEnumerable{ICSharpCode.AvalonEdit.Folding.NewFolding},System.Int32)</codeEntityReference>
- with the list of foldings you want to provide.
- You could calculate that list yourself, or you could use a built-in
- folding strategy to do it for you.</para>
- <para>Here is the full code required to enable folding:
- <code language="cs">foldingManager = FoldingManager.Install(textEditor.TextArea);
- foldingStrategy = new XmlFoldingStrategy();
- foldingStrategy.UpdateFoldings(foldingManager, textEditor.Document);</code>
- If you want the folding markers to update when the text is changed,
- you have to repeat the <codeInline>foldingStrategy.UpdateFoldings</codeInline> call regularly.
- </para>
- </content>
- </section>
- <section>
- <title>How the FoldingManager works</title>
- <content>
- <para>
- The FoldingManager maintains a list of foldings. The FoldMargin displays those foldings and provides
- the UI for collapsing/expanding.</para><para>
- Folded foldings cause the FoldingElementGenerator to produce a line element that spans the whole folded
- text section, causing the text generation for the visual line that contains the folding start to
- continue after the folding end in another line.</para><para>
- To ensure scrolling works correctly in the presence of foldings, lines inside folded regions must not
- be used as start lines for the visual line generation. This is done by setting the line height of all
- such lines to 0. To efficiently set the height on a large number of lines and support reverting to the
- old height when the folding is uncollapsed, a CollapsedLineSection is used.
- </para>
- </content>
- </section>
- <relatedTopics>
- <codeEntityReference>T:ICSharpCode.AvalonEdit.Folding.FoldingManager</codeEntityReference>
- </relatedTopics>
- </developerConceptualDocument>
- </topic>