aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Tango.Core/ExtensionMethods
diff options
context:
space:
mode:
authorRoy Ben-Shabat <Roy@Twine-s.com>2019-03-14 13:25:32 +0200
committerRoy Ben-Shabat <Roy@Twine-s.com>2019-03-14 13:25:32 +0200
commitc5cde62cecfdd413e9902b26b30b0d4dfd05a24d (patch)
treebc6cd0fc62c13bc65bcb1eeebfac4f5d6112f7ae /Software/Visual_Studio/Tango.Core/ExtensionMethods
parent81d88a18ac614604befb041a81781ab33eb08067 (diff)
downloadTango-c5cde62cecfdd413e9902b26b30b0d4dfd05a24d.tar.gz
Tango-c5cde62cecfdd413e9902b26b30b0d4dfd05a24d.zip
Machine Studio v4.0.10
PPC v1.0.9
Diffstat (limited to 'Software/Visual_Studio/Tango.Core/ExtensionMethods')
-rw-r--r--Software/Visual_Studio/Tango.Core/ExtensionMethods/ExceptionExtensions.cs6
-rw-r--r--Software/Visual_Studio/Tango.Core/ExtensionMethods/FrameworkElementExtensions.cs199
2 files changed, 191 insertions, 14 deletions
diff --git a/Software/Visual_Studio/Tango.Core/ExtensionMethods/ExceptionExtensions.cs b/Software/Visual_Studio/Tango.Core/ExtensionMethods/ExceptionExtensions.cs
index 86434cdc4..af4fc39b5 100644
--- a/Software/Visual_Studio/Tango.Core/ExtensionMethods/ExceptionExtensions.cs
+++ b/Software/Visual_Studio/Tango.Core/ExtensionMethods/ExceptionExtensions.cs
@@ -43,10 +43,14 @@ public static class ExceptionExtensions
{
try
{
- message += Environment.NewLine + String.Join(Environment.NewLine, (exception as AggregateException).InnerExceptions.Select(x => x.Message));
+ message = String.Join(Environment.NewLine, (exception as AggregateException).InnerExceptions.Select(x => x.FlattenMessage()));
}
catch { }
}
+ else if (exception.InnerException != null)
+ {
+ message += Environment.NewLine + exception.InnerException.FlattenMessage();
+ }
return message;
}
diff --git a/Software/Visual_Studio/Tango.Core/ExtensionMethods/FrameworkElementExtensions.cs b/Software/Visual_Studio/Tango.Core/ExtensionMethods/FrameworkElementExtensions.cs
index 2e1791b63..08f3bb101 100644
--- a/Software/Visual_Studio/Tango.Core/ExtensionMethods/FrameworkElementExtensions.cs
+++ b/Software/Visual_Studio/Tango.Core/ExtensionMethods/FrameworkElementExtensions.cs
@@ -8,6 +8,7 @@ using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
+using System.Windows.Input;
using System.Windows.Markup;
using System.Windows.Media;
using System.Windows.Media.Animation;
@@ -18,6 +19,14 @@ public static class FrameworkElementExtensions
{
#region Mouse Or Touch Events
+ //Used to hold the registered event handlers for later use by UnRegisterMouseOrTouch.
+ private static List<ElementEventsContainer> _containers = new List<ElementEventsContainer>();
+ private class ElementEventsContainer
+ {
+ public EventHandler<MouseOrTouchEventArgs> Handler { get; set; }
+ public Action Clear { get; set; }
+ }
+
/// <summary>
/// Registers for mouse or touch down.
/// </summary>
@@ -29,7 +38,7 @@ public static class FrameworkElementExtensions
bool mousePressed = false;
bool touchDown = false;
- element.MouseDown += (x, e) =>
+ MouseButtonEventHandler mouseDownHandler = (x, e) =>
{
if (!touchDown)
{
@@ -53,7 +62,9 @@ public static class FrameworkElementExtensions
}
};
- element.TouchDown += (x, e) =>
+ element.MouseDown += mouseDownHandler;
+
+ EventHandler<TouchEventArgs> touchDownHandler = (x, e) =>
{
if (!mousePressed)
{
@@ -77,16 +88,31 @@ public static class FrameworkElementExtensions
}
};
- element.MouseUp += (_, __) =>
+ element.TouchDown += touchDownHandler;
+
+ MouseButtonEventHandler mouseUpHandler = (_, __) =>
{
touchDown = false;
mousePressed = false;
};
- element.TouchDown += (_, __) =>
- {
+ element.MouseUp += mouseUpHandler;
+
+ //element.TouchDown += (_, __) =>
+ //{
+
+ //};
+ ElementEventsContainer container = new ElementEventsContainer();
+ container.Handler = handler;
+ container.Clear = () =>
+ {
+ element.MouseUp -= mouseUpHandler;
+ element.TouchDown -= touchDownHandler;
+ element.MouseDown -= mouseDownHandler;
};
+
+ _containers.Add(container);
}
/// <summary>
@@ -100,6 +126,101 @@ public static class FrameworkElementExtensions
}
/// <summary>
+ /// Registers for mouse or touch up.
+ /// </summary>
+ /// <param name="element">The element.</param>
+ /// <param name="relativeTo">The relative to.</param>
+ /// <param name="handler">The handler.</param>
+ public static void RegisterForMouseOrTouchUp(this FrameworkElement element, FrameworkElement relativeTo, EventHandler<MouseOrTouchEventArgs> handler)
+ {
+ bool mouseReleased = false;
+ bool touchReleased = false;
+
+ MouseButtonEventHandler mouseUpHandler = (x, e) =>
+ {
+ if (!touchReleased)
+ {
+ mouseReleased = true;
+
+ var args = new MouseOrTouchEventArgs()
+ {
+ Location = new Point(e.GetPosition(relativeTo != null ? relativeTo : element).X, e.GetPosition(relativeTo != null ? relativeTo : element).Y),
+ Source = e.Source,
+ OriginalSource = e.OriginalSource,
+ Handled = e.Handled,
+ GetPositionAction = e.GetPosition
+ };
+
+ handler(element, args);
+ e.Handled = args.Handled;
+ }
+ else
+ {
+ touchReleased = false;
+ }
+ };
+
+ element.MouseUp += mouseUpHandler;
+
+ EventHandler<TouchEventArgs> touchUpHandler = (x, e) =>
+ {
+
+ if (!mouseReleased)
+ {
+ touchReleased = true;
+
+ var args = new MouseOrTouchEventArgs()
+ {
+ Location = new Point(e.GetTouchPoint(relativeTo != null ? relativeTo : element).Position.X, e.GetTouchPoint(relativeTo != null ? relativeTo : element).Position.Y),
+ Source = e.Source,
+ OriginalSource = e.OriginalSource,
+ Handled = e.Handled,
+ GetPositionAction = (s) => { return e.GetTouchPoint(s).Position; },
+ };
+
+ handler(element, args);
+ e.Handled = args.Handled;
+ }
+ else
+ {
+ touchReleased = false;
+ }
+
+ };
+
+ element.TouchUp += touchUpHandler;
+
+ EventHandler<TouchEventArgs> touchDownHandler = (_, __) =>
+ {
+ touchReleased = false;
+ mouseReleased = false;
+ };
+
+ element.TouchDown += touchDownHandler;
+
+ ElementEventsContainer container = new ElementEventsContainer();
+ container.Handler = handler;
+ container.Clear = () =>
+ {
+ element.TouchDown -= touchDownHandler;
+ element.TouchUp -= touchUpHandler;
+ element.MouseUp -= mouseUpHandler;
+ };
+
+ _containers.Add(container);
+ }
+
+ /// <summary>
+ /// Registers for mouse or touch up.
+ /// </summary>
+ /// <param name="element">The element.</param>
+ /// <param name="handler">The handler.</param>
+ public static void RegisterForMouseOrTouchUp(this FrameworkElement element, EventHandler<MouseOrTouchEventArgs> handler)
+ {
+ RegisterForMouseOrTouchUp(element, null, handler);
+ }
+
+ /// <summary>
/// Registers for preview mouse or touch down.
/// </summary>
/// <param name="element">The element.</param>
@@ -110,7 +231,7 @@ public static class FrameworkElementExtensions
bool mousePressed = false;
bool touchDown = false;
- element.PreviewMouseDown += (x, e) =>
+ MouseButtonEventHandler previewMouseDownHandler = (x, e) =>
{
if (!touchDown)
{
@@ -134,7 +255,9 @@ public static class FrameworkElementExtensions
}
};
- element.PreviewTouchDown += (x, e) =>
+ element.PreviewMouseDown += previewMouseDownHandler;
+
+ EventHandler<TouchEventArgs> previewTouchDownHandler = (x, e) =>
{
if (!mousePressed)
{
@@ -158,16 +281,31 @@ public static class FrameworkElementExtensions
}
};
- element.PreviewMouseUp += (_, __) =>
+ element.PreviewTouchDown += previewTouchDownHandler;
+
+ MouseButtonEventHandler previewMouseUpHandler = (_, __) =>
{
touchDown = false;
mousePressed = false;
};
- element.PreviewTouchDown += (_, __) =>
- {
+ element.PreviewMouseUp += previewMouseUpHandler;
+
+ //element.PreviewTouchDown += (_, __) =>
+ //{
+
+ //};
+ ElementEventsContainer container = new ElementEventsContainer();
+ container.Handler = handler;
+ container.Clear = () =>
+ {
+ element.PreviewTouchDown -= previewTouchDownHandler;
+ element.PreviewMouseDown -= previewMouseDownHandler;
+ element.PreviewMouseUp -= previewMouseUpHandler;
};
+
+ _containers.Add(container);
}
/// <summary>
@@ -191,7 +329,7 @@ public static class FrameworkElementExtensions
bool mouseReleased = false;
bool touchReleased = false;
- element.PreviewMouseUp += (x, e) =>
+ MouseButtonEventHandler previewMouseUpHandler = (x, e) =>
{
if (!touchReleased)
{
@@ -215,8 +353,11 @@ public static class FrameworkElementExtensions
}
};
- element.PreviewTouchUp += (x, e) =>
+ element.PreviewMouseUp += previewMouseUpHandler;
+
+ EventHandler<TouchEventArgs> previewTouchHandler = (x, e) =>
{
+
if (!mouseReleased)
{
touchReleased = true;
@@ -237,13 +378,29 @@ public static class FrameworkElementExtensions
{
touchReleased = false;
}
+
};
- element.PreviewTouchDown += (_, __) =>
+ element.PreviewTouchUp += previewTouchHandler;
+
+ EventHandler<TouchEventArgs> previewTouchDownHandler = (_, __) =>
{
touchReleased = false;
mouseReleased = false;
};
+
+ element.PreviewTouchDown += previewTouchDownHandler;
+
+ ElementEventsContainer container = new ElementEventsContainer();
+ container.Handler = handler;
+ container.Clear = () =>
+ {
+ element.PreviewTouchDown -= previewTouchDownHandler;
+ element.PreviewTouchUp -= previewTouchHandler;
+ element.PreviewMouseUp -= previewMouseUpHandler;
+ };
+
+ _containers.Add(container);
}
/// <summary>
@@ -257,6 +414,22 @@ public static class FrameworkElementExtensions
}
/// <summary>
+ /// Detaches the specified handler from event which it was originally registered.
+ /// </summary>
+ /// <param name="element">The element.</param>
+ /// <param name="handler">The handler.</param>
+ public static void UnRegisterMouseOrTouch(this FrameworkElement element, EventHandler<MouseOrTouchEventArgs> handler)
+ {
+ var containers = _containers.Where(x => x.Handler == handler);
+
+ foreach (var container in containers.ToList())
+ {
+ container.Clear();
+ _containers.Remove(container);
+ }
+ }
+
+ /// <summary>
/// Registers for mouse or touch move.
/// </summary>
/// <param name="element">The element.</param>