/*
             *          void DemoMode()
             *          {
             *                  foldingGenerator = new FoldingElementGenerator() { FoldingManager = fm };
             *                  foldingMargin = new FoldingMargin { FoldingManager = fm };
             *                  foldingMarginBorder = new Border {
             *                          Child = foldingMargin,
             *                          Background = new LinearGradientBrush(Colors.White, Colors.Transparent, 0)
             *                  };
             *                  foldingMarginBorder.SizeChanged += UpdateTextViewClip;
             *                  textEditor.TextArea.TextView.ElementGenerators.Add(foldingGenerator);
             *                  textEditor.TextArea.LeftMargins.Add(foldingMarginBorder);
             *          }
             *
             *          void UpdateTextViewClip(object sender, SizeChangedEventArgs e)
             *          {
             *                  textEditor.TextArea.TextView.Clip = new RectangleGeometry(
             *                          new Rect(-foldingMarginBorder.ActualWidth,
             *                                   0,
             *                                   textEditor.TextArea.TextView.ActualWidth + foldingMarginBorder.ActualWidth,
             *                                   textEditor.TextArea.TextView.ActualHeight));
             *          }
             */

            public void Uninstall()
            {
                Clear();
                if (_textArea != null)
                {
                    _textArea.Caret.PositionChanged -= TextArea_Caret_PositionChanged;
                    _textArea.LeftMargins.Remove(_margin);
                    _textArea.TextView.ElementGenerators.Remove(_generator);
                    _textArea.TextView.Services.RemoveService(typeof(FoldingManager));
                    _margin    = null;
                    _generator = null;
                    _textArea  = null;
                }
            }
 public FoldingManagerInstallation(TextArea textArea) : base(textArea.Document)
 {
     _textArea = textArea;
     _margin   = new FoldingMargin {
         FoldingManager = this
     };
     _generator = new FoldingElementGenerator {
         FoldingManager = this
     };
     textArea.LeftMargins.Add(_margin);
     textArea.TextView.Services.AddService(typeof(FoldingManager), this);
     // HACK: folding only works correctly when it has highest priority
     textArea.TextView.ElementGenerators.Insert(0, _generator);
     textArea.Caret.PositionChanged += TextArea_Caret_PositionChanged;
 }