diff options
| author | Roy Ben-Shabat <Roy@Twine-s.com> | 2019-05-01 12:57:24 +0300 |
|---|---|---|
| committer | Roy Ben-Shabat <Roy@Twine-s.com> | 2019-05-01 12:57:24 +0300 |
| commit | 488a8afab6fb62a0a16c7c49b24f8ad986cbab33 (patch) | |
| tree | 74da6384001781097bd15133e389bd9b57d7a7a8 /Software/Visual_Studio/Tango.Core/ExtensionMethods | |
| parent | f7a90a31ca1536b2ff798f2a182194ffd221d6db (diff) | |
| download | Tango-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.cs | 220 |
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 |
