diff options
| author | Victoria Plitt <Victoria.Plitt@twine-s.com> | 2019-04-08 13:49:55 +0300 |
|---|---|---|
| committer | Victoria Plitt <Victoria.Plitt@twine-s.com> | 2019-04-08 13:49:55 +0300 |
| commit | fc8a05358a92cc3c77c5f1e30d536807ef0614fd (patch) | |
| tree | c65f696ebd60f3790145721307c255e5a339923f /Software/Visual_Studio/Scripting/Tango.Scripting.Editors/CodeCompletion/InsightWindow.cs | |
| parent | b4a71931ea52636c6b36376aa9d71697ccf73524 (diff) | |
| download | Tango-fc8a05358a92cc3c77c5f1e30d536807ef0614fd.tar.gz Tango-fc8a05358a92cc3c77c5f1e30d536807ef0614fd.zip | |
were added scripting projects
Diffstat (limited to 'Software/Visual_Studio/Scripting/Tango.Scripting.Editors/CodeCompletion/InsightWindow.cs')
| -rw-r--r-- | Software/Visual_Studio/Scripting/Tango.Scripting.Editors/CodeCompletion/InsightWindow.cs | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/CodeCompletion/InsightWindow.cs b/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/CodeCompletion/InsightWindow.cs new file mode 100644 index 000000000..bea06f3b3 --- /dev/null +++ b/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/CodeCompletion/InsightWindow.cs @@ -0,0 +1,94 @@ +// 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; +using System.Windows; +using System.Windows.Controls; +using Tango.Scripting.Editors.Editing; +using Tango.Scripting.Editors.Utils; + +namespace Tango.Scripting.Editors.CodeCompletion +{ + /// <summary> + /// A popup-like window that is attached to a text segment. + /// </summary> + public class InsightWindow : CompletionWindowBase + { + static InsightWindow() + { + DefaultStyleKeyProperty.OverrideMetadata(typeof(InsightWindow), + new FrameworkPropertyMetadata(typeof(InsightWindow))); + AllowsTransparencyProperty.OverrideMetadata(typeof(InsightWindow), + new FrameworkPropertyMetadata(Boxes.True)); + } + + /// <summary> + /// Creates a new InsightWindow. + /// </summary> + public InsightWindow(TextArea textArea) : base(textArea) + { + this.CloseAutomatically = true; + AttachEvents(); + } + + /// <inheritdoc/> + protected override void OnSourceInitialized(EventArgs e) + { + base.OnSourceInitialized(e); + + Rect caret = this.TextArea.Caret.CalculateCaretRectangle(); + Point pointOnScreen = this.TextArea.TextView.PointToScreen(caret.Location - this.TextArea.TextView.ScrollOffset); + Rect workingArea = System.Windows.Forms.Screen.FromPoint(pointOnScreen.ToSystemDrawing()).WorkingArea.ToWpf().TransformFromDevice(this); + + MaxHeight = workingArea.Height; + MaxWidth = Math.Min(workingArea.Width, Math.Max(1000, workingArea.Width * 0.6)); + } + + /// <summary> + /// Gets/Sets whether the insight window should close automatically. + /// The default value is true. + /// </summary> + public bool CloseAutomatically { get; set; } + + /// <inheritdoc/> + protected override bool CloseOnFocusLost { + get { return this.CloseAutomatically; } + } + + void AttachEvents() + { + this.TextArea.Caret.PositionChanged += CaretPositionChanged; + } + + /// <inheritdoc/> + protected override void DetachEvents() + { + this.TextArea.Caret.PositionChanged -= CaretPositionChanged; + base.DetachEvents(); + } + + void CaretPositionChanged(object sender, EventArgs e) + { + if (this.CloseAutomatically) { + int offset = this.TextArea.Caret.Offset; + if (offset < this.StartOffset || offset > this.EndOffset) { + Close(); + } + } + } + } + + /// <summary> + /// TemplateSelector for InsightWindow to replace plain string content by a TextBlock with TextWrapping. + /// </summary> + internal sealed class InsightWindowTemplateSelector : DataTemplateSelector + { + public override DataTemplate SelectTemplate(object item, DependencyObject container) + { + if (item is string) + return (DataTemplate)((FrameworkElement)container).FindResource("TextBlockTemplate"); + + return null; + } + } +} |
