From fc8a05358a92cc3c77c5f1e30d536807ef0614fd Mon Sep 17 00:00:00 2001 From: Victoria Plitt Date: Mon, 8 Apr 2019 13:49:55 +0300 Subject: were added scripting projects --- .../Document/WeakLineTracker.cs | 85 ++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Document/WeakLineTracker.cs (limited to 'Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Document/WeakLineTracker.cs') diff --git a/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Document/WeakLineTracker.cs b/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Document/WeakLineTracker.cs new file mode 100644 index 000000000..a70874645 --- /dev/null +++ b/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Document/WeakLineTracker.cs @@ -0,0 +1,85 @@ +// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) +// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) + +using System; + +namespace Tango.Scripting.Editors.Document +{ + /// + /// Allows registering a line tracker on a TextDocument using a weak reference from the document to the line tracker. + /// + public sealed class WeakLineTracker : ILineTracker + { + TextDocument textDocument; + WeakReference targetObject; + + private WeakLineTracker(TextDocument textDocument, ILineTracker targetTracker) + { + this.textDocument = textDocument; + this.targetObject = new WeakReference(targetTracker); + } + + /// + /// Registers the as line tracker for the . + /// A weak reference to the target tracker will be used, and the WeakLineTracker will deregister itself + /// when the target tracker is garbage collected. + /// + public static WeakLineTracker Register(TextDocument textDocument, ILineTracker targetTracker) + { + if (textDocument == null) + throw new ArgumentNullException("textDocument"); + if (targetTracker == null) + throw new ArgumentNullException("targetTracker"); + WeakLineTracker wlt = new WeakLineTracker(textDocument, targetTracker); + textDocument.LineTrackers.Add(wlt); + return wlt; + } + + /// + /// Deregisters the weak line tracker. + /// + public void Deregister() + { + if (textDocument != null) { + textDocument.LineTrackers.Remove(this); + textDocument = null; + } + } + + void ILineTracker.BeforeRemoveLine(DocumentLine line) + { + ILineTracker targetTracker = targetObject.Target as ILineTracker; + if (targetTracker != null) + targetTracker.BeforeRemoveLine(line); + else + Deregister(); + } + + void ILineTracker.SetLineLength(DocumentLine line, int newTotalLength) + { + ILineTracker targetTracker = targetObject.Target as ILineTracker; + if (targetTracker != null) + targetTracker.SetLineLength(line, newTotalLength); + else + Deregister(); + } + + void ILineTracker.LineInserted(DocumentLine insertionPos, DocumentLine newLine) + { + ILineTracker targetTracker = targetObject.Target as ILineTracker; + if (targetTracker != null) + targetTracker.LineInserted(insertionPos, newLine); + else + Deregister(); + } + + void ILineTracker.RebuildDocument() + { + ILineTracker targetTracker = targetObject.Target as ILineTracker; + if (targetTracker != null) + targetTracker.RebuildDocument(); + else + Deregister(); + } + } +} -- cgit v1.3.1