aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Tango.Core/ExtensionMethods
diff options
context:
space:
mode:
authorRoy Ben-Shabat <Roy@Twine-s.com>2019-05-01 12:57:24 +0300
committerRoy Ben-Shabat <Roy@Twine-s.com>2019-05-01 12:57:24 +0300
commit488a8afab6fb62a0a16c7c49b24f8ad986cbab33 (patch)
tree74da6384001781097bd15133e389bd9b57d7a7a8 /Software/Visual_Studio/Tango.Core/ExtensionMethods
parentf7a90a31ca1536b2ff798f2a182194ffd221d6db (diff)
downloadTango-488a8afab6fb62a0a16c7c49b24f8ad986cbab33.tar.gz
Tango-488a8afab6fb62a0a16c7c49b24f8ad986cbab33.zip
Added weak reference implementation for MouseTouch registrations and DragAndDrop.
Dispose db context when loading new job (might be a problem later).. Added WeakList implementation.
Diffstat (limited to 'Software/Visual_Studio/Tango.Core/ExtensionMethods')
-rw-r--r--Software/Visual_Studio/Tango.Core/ExtensionMethods/FrameworkElementExtensions.cs220
1 files changed, 40 insertions, 180 deletions
diff --git a/Software/Visual_Studio/Tango.Core/ExtensionMethods/FrameworkElementExtensions.cs b/Software/Visual_Studio/Tango.Core/ExtensionMethods/FrameworkElementExtensions.cs
index 4371796c4..6e9c11b03 100644
--- a/Software/Visual_Studio/Tango.Core/ExtensionMethods/FrameworkElementExtensions.cs
+++ b/Software/Visual_Studio/Tango.Core/ExtensionMethods/FrameworkElementExtensions.cs
@@ -19,36 +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 String Token { get; set; }
- public EventHandler<MouseOrTouchEventArgs> Handler { get; set; }
- public FrameworkElement Element { get; set; }
- public Action Clear { get; set; }
-
- public ElementEventsContainer()
- {
- Token = Guid.NewGuid().ToString();
- }
- }
-
/// <summary>
/// Registers for mouse or touch down.
/// </summary>
/// <param name="element">The element.</param>
/// <param name="relativeTo">The relative to.</param>
/// <param name="handler">The handler.</param>
- public static String RegisterForMouseOrTouchDown(this FrameworkElement element, FrameworkElement relativeTo, EventHandler<MouseOrTouchEventArgs> handler)
+ public static void RegisterForMouseOrTouchDown(this FrameworkElement element, FrameworkElement relativeTo, EventHandler<MouseOrTouchEventArgs> handler)
{
- var existing_container = _containers.SingleOrDefault(x => x.Element == element && x.Handler == handler);
-
- if (existing_container != null)
- {
- return existing_container.Token;
- }
-
bool mousePressed = false;
bool touchDown = false;
@@ -76,7 +54,8 @@ public static class FrameworkElementExtensions
}
};
- element.MouseDown += mouseDownHandler;
+ //element.MouseDown += mouseDownHandler;
+ element.AddHandler(FrameworkElement.MouseDownEvent, mouseDownHandler);
EventHandler<TouchEventArgs> touchDownHandler = (x, e) =>
{
@@ -103,7 +82,8 @@ public static class FrameworkElementExtensions
}
};
- element.TouchDown += touchDownHandler;
+ //element.TouchDown += touchDownHandler;
+ element.AddHandler(FrameworkElement.TouchDownEvent, touchDownHandler);
MouseButtonEventHandler mouseUpHandler = (_, __) =>
{
@@ -111,27 +91,13 @@ public static class FrameworkElementExtensions
mousePressed = false;
};
- element.MouseUp += mouseUpHandler;
+ //element.MouseUp += mouseUpHandler;
+ element.AddHandler(FrameworkElement.MouseUpEvent, mouseUpHandler);
//element.TouchDown += (_, __) =>
//{
//};
-
- ElementEventsContainer container = new ElementEventsContainer();
- container.Handler = handler;
- container.Element = element;
- container.Clear = () =>
- {
- element.MouseUp -= mouseUpHandler;
- element.TouchDown -= touchDownHandler;
- element.MouseDown -= mouseDownHandler;
- };
-
- _containers.Add(container);
- UnregisterWhenUnloaded(container);
-
- return container.Token;
}
/// <summary>
@@ -139,9 +105,9 @@ public static class FrameworkElementExtensions
/// </summary>
/// <param name="element">The element.</param>
/// <param name="handler">The handler.</param>
- public static String RegisterForMouseOrTouchDown(this FrameworkElement element, EventHandler<MouseOrTouchEventArgs> handler)
+ public static void RegisterForMouseOrTouchDown(this FrameworkElement element, EventHandler<MouseOrTouchEventArgs> handler)
{
- return RegisterForMouseOrTouchDown(element, null, handler);
+ RegisterForMouseOrTouchDown(element, null, handler);
}
/// <summary>
@@ -150,15 +116,8 @@ public static class FrameworkElementExtensions
/// <param name="element">The element.</param>
/// <param name="relativeTo">The relative to.</param>
/// <param name="handler">The handler.</param>
- public static String RegisterForMouseOrTouchUp(this FrameworkElement element, FrameworkElement relativeTo, EventHandler<MouseOrTouchEventArgs> handler)
+ public static void RegisterForMouseOrTouchUp(this FrameworkElement element, FrameworkElement relativeTo, EventHandler<MouseOrTouchEventArgs> handler)
{
- var existing_container = _containers.SingleOrDefault(x => x.Element == element && x.Handler == handler);
-
- if (existing_container != null)
- {
- return existing_container.Token;
- }
-
bool mouseReleased = false;
bool touchReleased = false;
@@ -186,7 +145,8 @@ public static class FrameworkElementExtensions
}
};
- element.MouseUp += mouseUpHandler;
+ //element.MouseUp += mouseUpHandler;
+ element.AddHandler(FrameworkElement.MouseUpEvent, mouseUpHandler);
EventHandler<TouchEventArgs> touchUpHandler = (x, e) =>
{
@@ -215,7 +175,8 @@ public static class FrameworkElementExtensions
};
- element.TouchUp += touchUpHandler;
+ //element.TouchUp += touchUpHandler;
+ element.AddHandler(FrameworkElement.TouchUpEvent, touchUpHandler);
EventHandler<TouchEventArgs> touchDownHandler = (_, __) =>
{
@@ -223,22 +184,8 @@ public static class FrameworkElementExtensions
mouseReleased = false;
};
- element.TouchDown += touchDownHandler;
-
- ElementEventsContainer container = new ElementEventsContainer();
- container.Handler = handler;
- container.Element = element;
- container.Clear = () =>
- {
- element.TouchDown -= touchDownHandler;
- element.TouchUp -= touchUpHandler;
- element.MouseUp -= mouseUpHandler;
- };
-
- _containers.Add(container);
- UnregisterWhenUnloaded(container);
-
- return container.Token;
+ //element.TouchDown += touchDownHandler;
+ element.AddHandler(FrameworkElement.TouchDownEvent, touchDownHandler);
}
/// <summary>
@@ -246,9 +193,9 @@ public static class FrameworkElementExtensions
/// </summary>
/// <param name="element">The element.</param>
/// <param name="handler">The handler.</param>
- public static String RegisterForMouseOrTouchUp(this FrameworkElement element, EventHandler<MouseOrTouchEventArgs> handler)
+ public static void RegisterForMouseOrTouchUp(this FrameworkElement element, EventHandler<MouseOrTouchEventArgs> handler)
{
- return RegisterForMouseOrTouchUp(element, null, handler);
+ RegisterForMouseOrTouchUp(element, null, handler);
}
/// <summary>
@@ -257,15 +204,8 @@ public static class FrameworkElementExtensions
/// <param name="element">The element.</param>
/// <param name="relativeTo">The relative to.</param>
/// <param name="handler">The handler.</param>
- public static String RegisterForPreviewMouseOrTouchDown(this FrameworkElement element, FrameworkElement relativeTo, EventHandler<MouseOrTouchEventArgs> handler)
+ public static void RegisterForPreviewMouseOrTouchDown(this FrameworkElement element, FrameworkElement relativeTo, EventHandler<MouseOrTouchEventArgs> handler)
{
- var existing_container = _containers.SingleOrDefault(x => x.Element == element && x.Handler == handler);
-
- if (existing_container != null)
- {
- return existing_container.Token;
- }
-
bool mousePressed = false;
bool touchDown = false;
@@ -293,7 +233,8 @@ public static class FrameworkElementExtensions
}
};
- element.PreviewMouseDown += previewMouseDownHandler;
+ element.AddHandler(FrameworkElement.PreviewMouseDownEvent, previewMouseDownHandler);
+ //element.PreviewMouseDown += previewMouseDownHandler;
EventHandler<TouchEventArgs> previewTouchDownHandler = (x, e) =>
{
@@ -320,7 +261,8 @@ public static class FrameworkElementExtensions
}
};
- element.PreviewTouchDown += previewTouchDownHandler;
+ //element.PreviewTouchDown += previewTouchDownHandler;
+ element.AddHandler(FrameworkElement.PreviewTouchDownEvent, previewTouchDownHandler);
MouseButtonEventHandler previewMouseUpHandler = (_, __) =>
{
@@ -328,27 +270,8 @@ public static class FrameworkElementExtensions
mousePressed = false;
};
- element.PreviewMouseUp += previewMouseUpHandler;
-
- //element.PreviewTouchDown += (_, __) =>
- //{
-
- //};
-
- ElementEventsContainer container = new ElementEventsContainer();
- container.Handler = handler;
- container.Element = element;
- container.Clear = () =>
- {
- element.PreviewTouchDown -= previewTouchDownHandler;
- element.PreviewMouseDown -= previewMouseDownHandler;
- element.PreviewMouseUp -= previewMouseUpHandler;
- };
-
- _containers.Add(container);
- UnregisterWhenUnloaded(container);
-
- return container.Token;
+ //element.PreviewMouseUp += previewMouseUpHandler;
+ element.AddHandler(FrameworkElement.PreviewMouseUpEvent, previewMouseUpHandler);
}
/// <summary>
@@ -356,9 +279,9 @@ public static class FrameworkElementExtensions
/// </summary>
/// <param name="element">The element.</param>
/// <param name="handler">The handler.</param>
- public static String RegisterForPreviewMouseOrTouchDown(this FrameworkElement element, EventHandler<MouseOrTouchEventArgs> handler)
+ public static void RegisterForPreviewMouseOrTouchDown(this FrameworkElement element, EventHandler<MouseOrTouchEventArgs> handler)
{
- return RegisterForPreviewMouseOrTouchDown(element, null, handler);
+ RegisterForPreviewMouseOrTouchDown(element, null, handler);
}
/// <summary>
@@ -367,15 +290,8 @@ public static class FrameworkElementExtensions
/// <param name="element">The element.</param>
/// <param name="relativeTo">The relative to.</param>
/// <param name="handler">The handler.</param>
- public static String RegisterForPreviewMouseOrTouchUp(this FrameworkElement element, FrameworkElement relativeTo, EventHandler<MouseOrTouchEventArgs> handler)
+ public static void RegisterForPreviewMouseOrTouchUp(this FrameworkElement element, FrameworkElement relativeTo, EventHandler<MouseOrTouchEventArgs> handler)
{
- var existing_container = _containers.SingleOrDefault(x => x.Element == element && x.Handler == handler);
-
- if (existing_container != null)
- {
- return existing_container.Token;
- }
-
bool mouseReleased = false;
bool touchReleased = false;
@@ -403,7 +319,8 @@ public static class FrameworkElementExtensions
}
};
- element.PreviewMouseUp += previewMouseUpHandler;
+ //element.PreviewMouseUp += previewMouseUpHandler;
+ element.AddHandler(FrameworkElement.PreviewMouseUpEvent, previewMouseUpHandler);
EventHandler<TouchEventArgs> previewTouchHandler = (x, e) =>
{
@@ -432,7 +349,8 @@ public static class FrameworkElementExtensions
};
- element.PreviewTouchUp += previewTouchHandler;
+ //element.PreviewTouchUp += previewTouchHandler;
+ element.AddHandler(FrameworkElement.PreviewTouchUpEvent, previewTouchHandler);
EventHandler<TouchEventArgs> previewTouchDownHandler = (_, __) =>
{
@@ -440,22 +358,8 @@ public static class FrameworkElementExtensions
mouseReleased = false;
};
- element.PreviewTouchDown += previewTouchDownHandler;
-
- ElementEventsContainer container = new ElementEventsContainer();
- container.Handler = handler;
- container.Element = element;
- container.Clear = () =>
- {
- element.PreviewTouchDown -= previewTouchDownHandler;
- element.PreviewTouchUp -= previewTouchHandler;
- element.PreviewMouseUp -= previewMouseUpHandler;
- };
-
- _containers.Add(container);
- UnregisterWhenUnloaded(container);
-
- return container.Token;
+ //element.PreviewTouchDown += previewTouchDownHandler;
+ element.AddHandler(FrameworkElement.PreviewTouchDownEvent, previewTouchDownHandler);
}
/// <summary>
@@ -463,25 +367,9 @@ public static class FrameworkElementExtensions
/// </summary>
/// <param name="element">The element.</param>
/// <param name="handler">The handler.</param>
- public static String RegisterForPreviewMouseOrTouchUp(this FrameworkElement element, EventHandler<MouseOrTouchEventArgs> handler)
+ public static void RegisterForPreviewMouseOrTouchUp(this FrameworkElement element, EventHandler<MouseOrTouchEventArgs> handler)
{
- return RegisterForPreviewMouseOrTouchUp(element, null, handler);
- }
-
- /// <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)
- {
- var containers = _containers.Where(x => x.Element == element).ToList();
-
- foreach (var container in containers.ToList())
- {
- container.Clear();
- _containers.Remove(container);
- }
+ RegisterForPreviewMouseOrTouchUp(element, null, handler);
}
/// <summary>
@@ -492,13 +380,6 @@ public static class FrameworkElementExtensions
/// <param name="handler">The handler.</param>
public static void RegisterForMouseOrTouchMove(this FrameworkElement element, FrameworkElement relativeTo, EventHandler<MouseOrTouchEventArgs> handler)
{
- var existing_container = _containers.SingleOrDefault(x => x.Element == element && x.Handler == handler);
-
- if (existing_container != null)
- {
- return;
- }
-
bool _isTouch = false;
MouseEventHandler mouseHandler = (x, e) =>
@@ -519,7 +400,8 @@ public static class FrameworkElementExtensions
}
};
- element.MouseMove += mouseHandler;
+ //element.MouseMove += mouseHandler;
+ element.AddHandler(FrameworkElement.MouseMoveEvent, mouseHandler);
EventHandler<TouchEventArgs> touchHandler = (x, e) =>
{
@@ -539,19 +421,8 @@ public static class FrameworkElementExtensions
e.Handled = args.Handled;
};
- element.TouchMove += touchHandler;
-
- ElementEventsContainer container = new ElementEventsContainer();
- container.Handler = handler;
- container.Element = element;
- container.Clear = () =>
- {
- element.MouseMove -= mouseHandler;
- element.TouchMove -= touchHandler;
- };
-
- _containers.Add(container);
- UnregisterWhenUnloaded(container);
+ //element.TouchMove += touchHandler;
+ element.AddHandler(FrameworkElement.TouchMoveEvent, touchHandler);
}
/// <summary>
@@ -564,17 +435,6 @@ public static class FrameworkElementExtensions
RegisterForMouseOrTouchMove(element, null, handler);
}
- private static void UnregisterWhenUnloaded(ElementEventsContainer container)
- {
- container.Element.Unloaded += Element_Unloaded;
- }
-
- private static void Element_Unloaded(object sender, RoutedEventArgs e)
- {
- (sender as FrameworkElement).Unloaded -= Element_Unloaded;
- UnRegisterMouseOrTouch(sender as FrameworkElement);
- }
-
#endregion
#region Loaded