aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/SideChains/ICSharpCode.AvalonEdit/CodeCompletion/InsightWindow.cs
diff options
context:
space:
mode:
authorRoy Ben-Shabat <Roy@Twine-s.com>2017-12-07 15:34:42 +0200
committerRoy Ben-Shabat <Roy@Twine-s.com>2017-12-07 15:34:42 +0200
commit4cf1e800a5743d1194281703a4bcd6df0a910e8f (patch)
treeea790b84cf9021c5d1d3cb74018107ee86bd457a /Software/Visual_Studio/SideChains/ICSharpCode.AvalonEdit/CodeCompletion/InsightWindow.cs
parentb18d75447928658826f05a7f1ab0279ac7cb671a (diff)
downloadTango-4cf1e800a5743d1194281703a4bcd6df0a910e8f.tar.gz
Tango-4cf1e800a5743d1194281703a4bcd6df0a910e8f.zip
Added Avalon editor as SideChain.
Implemented scripting control in SharedUI..
Diffstat (limited to 'Software/Visual_Studio/SideChains/ICSharpCode.AvalonEdit/CodeCompletion/InsightWindow.cs')
-rw-r--r--Software/Visual_Studio/SideChains/ICSharpCode.AvalonEdit/CodeCompletion/InsightWindow.cs94
1 files changed, 94 insertions, 0 deletions
diff --git a/Software/Visual_Studio/SideChains/ICSharpCode.AvalonEdit/CodeCompletion/InsightWindow.cs b/Software/Visual_Studio/SideChains/ICSharpCode.AvalonEdit/CodeCompletion/InsightWindow.cs
new file mode 100644
index 000000000..d606bad92
--- /dev/null
+++ b/Software/Visual_Studio/SideChains/ICSharpCode.AvalonEdit/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 ICSharpCode.AvalonEdit.Editing;
+using ICSharpCode.AvalonEdit.Utils;
+
+namespace ICSharpCode.AvalonEdit.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;
+ }
+ }
+}