aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Scripting/Tango.Scripting.Editors/Editing/SelectionLayer.cs
blob: 28631affef740aabd208bbd660a7bdb890cd4681 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
// 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.Media;

using Tango.Scripting.Editors.Rendering;

namespace Tango.Scripting.Editors.Editing
{
	sealed class SelectionLayer : Layer, IWeakEventListener
	{
		readonly TextArea textArea;
		
		public SelectionLayer(TextArea textArea) : base(textArea.TextView, KnownLayer.Selection)
		{
			this.IsHitTestVisible = false;
			
			this.textArea = textArea;
			TextViewWeakEventManager.VisualLinesChanged.AddListener(textView, this);
			TextViewWeakEventManager.ScrollOffsetChanged.AddListener(textView, this);
		}
		
		bool IWeakEventListener.ReceiveWeakEvent(Type managerType, object sender, EventArgs e)
		{
			if (managerType == typeof(TextViewWeakEventManager.VisualLinesChanged)
			    || managerType == typeof(TextViewWeakEventManager.ScrollOffsetChanged))
			{
				InvalidateVisual();
				return true;
			}
			return false;
		}
		
		protected override void OnRender(DrawingContext drawingContext)
		{
			base.OnRender(drawingContext);
			
			BackgroundGeometryBuilder geoBuilder = new BackgroundGeometryBuilder();
			geoBuilder.AlignToMiddleOfPixels = true;
			geoBuilder.ExtendToFullWidthAtLineEnd = textArea.Selection.EnableVirtualSpace;
			geoBuilder.CornerRadius = textArea.SelectionCornerRadius;
			foreach (var segment in textArea.Selection.Segments) {
				geoBuilder.AddSegment(textView, segment);
			}
			Geometry geometry = geoBuilder.CreateGeometry();
			if (geometry != null) {
				drawingContext.DrawGeometry(textArea.SelectionBrush, textArea.SelectionBorder, geometry);
			}
		}
	}
}
class="w"> PushTaskItem(String message); /// <summary> /// Creates and push a new bar item from the specified framework element. /// </summary> /// <param name="element">The element.</param> /// <returns></returns> BarItem PushBarItem(FrameworkElement element); /// <summary> /// Pushes the specified bar item. /// </summary> /// <param name="barItem">The bar item.</param> /// <returns></returns> BarItem PushBarItem(BarItem barItem); /// <summary> /// Removed the specified task item from the queue. /// </summary> /// <param name="taskItem">The task item.</param> void PopTaskItem(TaskItem taskItem); /// <summary> /// Removed the specified bar item. /// </summary> /// <param name="barItem">The bar item.</param> void PopBarItem(BarItem barItem); /// <summary> /// Creates a new instance of the specified View type and displays it as a modal dialog. /// </summary> /// <typeparam name="View">The type of the view.</typeparam> /// <typeparam name="VM">The type of the view model.</typeparam> /// <param name="onAccept">Accept button callback.</param> /// <param name="onCancel">Cancel button callback.</param> void ShowModalDialog<View, VM>(Action<VM> onAccept, Action onCancel) where View : FrameworkElement where VM : DialogViewVM; /// <summary> /// Creates a new view by a naming convention of the specified view model type. /// </summary> /// <typeparam name="VM">The type of the view model.</typeparam> /// <param name="onAccept">Accept button callback.</param> /// <param name="onCancel">Cancel button callback.</param> void ShowModalDialog<VM>(Action<VM> onAccept, Action onCancel) where VM : DialogViewVM; /// <summary> /// Shows the specified view with the specified view model as it's data context. /// </summary> /// <typeparam name="VM">The type of the mm.</typeparam> /// <typeparam name="View">The type of the view.</typeparam> /// <param name="vm">The view model.</param> /// <param name="onAccept">The accept action.</param> /// <param name="onCancel">The cancel action.</param> void ShowModalDialog<VM, View>(VM vm, Action<VM> onAccept, Action onCancel) where View : FrameworkElement where VM : DialogViewVM; /// <summary> /// Shows the specified view with the specified view model as it's data context. /// </summary> /// <typeparam name="VM">The type of the mm.</typeparam> /// <typeparam name="View">The type of the view.</typeparam> /// <param name="vm">The view model.</param> /// <param name="view">The view.</param> /// <param name="onAccept">The accept action.</param> /// <param name="onCancel">The cancel action.</param> void ShowModalDialog<VM, View>(VM vm, View view, Action<VM> onAccept, Action onCancel) where View : FrameworkElement where VM : DialogViewVM; /// <summary> /// Creates a new view by a naming convention of the specified view model type. /// </summary> /// <typeparam name="VM">The type of the view model.</typeparam> /// <param name="onAccept">Accept button callback.</param> void ShowModalDialog<VM>(Action<VM> onAccept) where VM : DialogViewVM; /// <summary> /// Display a message box. /// </summary> /// <param name="icon">The icon.</param> /// <param name="iconColor">Color of the icon.</param> /// <param name="message">The message.</param> /// <param name="hasCancel">if set to <c>true</c> displays the cancel button.</param> /// <returns></returns> bool? ShowMessageBox(PackIconKind icon, Brush iconColor, String message, bool hasCancel); /// <summary> /// Shows an information message box. /// </summary> /// <param name="message">The message.</param> void ShowInfo(String message); /// <summary> /// Shows warning message box. /// </summary> /// <param name="message">The message.</param> void ShowWarning(String message); /// <summary> /// Shows an error message box. /// </summary> /// <param name="message">The message.</param> void ShowError(String message); /// <summary> /// Shows a question message box. /// </summary> /// <param name="message">The message.</param> bool ShowQuestion(String message); /// <summary> /// Shows a question message box with an error icon. /// </summary> /// <param name="message">The message.</param> bool ShowErrorQuestion(String message); /// <summary> /// Shows a dialog with a text input field and returns the response. /// </summary> /// <param name="message">The message.</param> /// <param name="hint">Text field hint.</param> /// <param name="defaultResponse">Optional default response.</param> /// <returns></returns> String ShowTextInput(String message, String hint, String defaultResponse = null); } }