aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/FSE/Tango.FSE.Common/Resolution/ResolutionHelper.cs
diff options
context:
space:
mode:
authorAvi Levkovich <avi@twine-s.com>2020-03-25 17:43:49 +0200
committerAvi Levkovich <avi@twine-s.com>2020-03-25 17:43:49 +0200
commitd29da53d6f71f45749c0ede5b4cd7281ed3a270e (patch)
treefd83afc7771c0f4f19c581e1cf407bcf7c14818b /Software/Visual_Studio/FSE/Tango.FSE.Common/Resolution/ResolutionHelper.cs
parent0208e9f1800c044ec3bd002b7aa7fd00621c81be (diff)
downloadTango-d29da53d6f71f45749c0ede5b4cd7281ed3a270e.tar.gz
Tango-d29da53d6f71f45749c0ede5b4cd7281ed3a270e.zip
merge
Diffstat (limited to 'Software/Visual_Studio/FSE/Tango.FSE.Common/Resolution/ResolutionHelper.cs')
-rw-r--r--Software/Visual_Studio/FSE/Tango.FSE.Common/Resolution/ResolutionHelper.cs227
1 files changed, 227 insertions, 0 deletions
diff --git a/Software/Visual_Studio/FSE/Tango.FSE.Common/Resolution/ResolutionHelper.cs b/Software/Visual_Studio/FSE/Tango.FSE.Common/Resolution/ResolutionHelper.cs
new file mode 100644
index 000000000..6caee944a
--- /dev/null
+++ b/Software/Visual_Studio/FSE/Tango.FSE.Common/Resolution/ResolutionHelper.cs
@@ -0,0 +1,227 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using Tango.Core.DI;
+
+namespace Tango.FSE.Common.Resolution
+{
+ public static class ResolutionHelper
+ {
+ private static List<FrameworkElement> _elements;
+ private static IResolutionService _resolutionService;
+
+ static ResolutionHelper()
+ {
+ _elements = new List<FrameworkElement>();
+ var resolutionService = TangoIOC.Default.GetInstance<IResolutionService>();
+ _resolutionService = resolutionService;
+
+ if (resolutionService != null)
+ {
+ resolutionService.ResolutionModeChanged += ResolutionService_ResolutionModeChanged;
+ resolutionService.ResolutionChanged += ResolutionService_ResolutionChanged;
+ }
+ }
+
+ private static void ResolutionService_ResolutionChanged(object sender, SizeChangedEventArgs e)
+ {
+ foreach (var element in _elements)
+ {
+ ApplyElementSetting(element);
+ }
+ }
+
+ private static void ResolutionService_ResolutionModeChanged(object sender, ResolutionMode mode)
+ {
+ foreach (var element in _elements)
+ {
+ ApplyElementSetting(element);
+ }
+ }
+
+ private static void ApplyElementSetting(FrameworkElement element)
+ {
+ if (_resolutionService != null)
+ {
+ var mode = GetMode(element);
+ if (mode != ResolutionMode.None)
+ {
+ if (mode == _resolutionService.Resolution)
+ {
+ element.Visibility = Visibility.Visible;
+ }
+ else
+ {
+ element.Visibility = Visibility.Collapsed;
+ }
+ }
+
+ var width = GetMinWidth(element);
+
+ if (!Double.IsNaN(width))
+ {
+ if (_resolutionService.ResolutionWidth >= width)
+ {
+ element.Visibility = Visibility.Visible;
+ }
+ else
+ {
+ element.Visibility = Visibility.Collapsed;
+ }
+ }
+
+ var height = GetMinHeight(element);
+
+ if (!Double.IsNaN(height))
+ {
+ if (_resolutionService.ResolutionHeight >= height)
+ {
+ element.Visibility = Visibility.Visible;
+ }
+ else
+ {
+ element.Visibility = Visibility.Collapsed;
+ }
+ }
+
+ if (!Double.IsNaN(width) && !Double.IsNaN(height))
+ {
+ if (_resolutionService.ResolutionWidth >= width && _resolutionService.ResolutionHeight >= height)
+ {
+ element.Visibility = Visibility.Visible;
+ }
+ else
+ {
+ element.Visibility = Visibility.Collapsed;
+ }
+ }
+ }
+ }
+
+ #region Mode
+
+ /// <summary>
+ /// Determined the resolution mode for the trigger.
+ /// </summary>
+ public static readonly DependencyProperty ModeProperty =
+ DependencyProperty.RegisterAttached("Mode",
+ typeof(ResolutionMode), typeof(ResolutionHelper),
+ new FrameworkPropertyMetadata(ResolutionMode.None, OnModeChanged));
+
+ private static void OnModeChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
+ {
+ if (!_elements.Contains(d as FrameworkElement))
+ {
+ _elements.Add(d as FrameworkElement);
+ ApplyElementSetting(d as FrameworkElement);
+ }
+ }
+
+ /// <summary>
+ /// Sets the Mode attached property.
+ /// </summary>
+ /// <param name="element">The element.</param>
+ /// <param name="value">if set to <c>true</c> [value].</param>
+ public static void SetMode(FrameworkElement element, ResolutionMode value)
+ {
+ element.SetValue(ModeProperty, value);
+ }
+
+ /// <summary>
+ /// Gets the Mode attached property.
+ /// </summary>
+ /// <param name="element">The element.</param>
+ /// <returns></returns>
+ public static ResolutionMode GetMode(FrameworkElement element)
+ {
+ return (ResolutionMode)element.GetValue(ModeProperty);
+ }
+
+ #endregion
+
+ #region MinWidth
+
+ /// <summary>
+ /// Determined the resolution MinWidth for the trigger.
+ /// </summary>
+ public static readonly DependencyProperty MinWidthProperty =
+ DependencyProperty.RegisterAttached("MinWidth",
+ typeof(double), typeof(ResolutionHelper),
+ new FrameworkPropertyMetadata(double.NaN, OnMinWidthChanged));
+
+ private static void OnMinWidthChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
+ {
+ if (!_elements.Contains(d as FrameworkElement))
+ {
+ _elements.Add(d as FrameworkElement);
+ ApplyElementSetting(d as FrameworkElement);
+ }
+ }
+
+ /// <summary>
+ /// Sets the MinWidth attached property.
+ /// </summary>
+ /// <param name="element">The element.</param>
+ /// <param name="value">if set to <c>true</c> [value].</param>
+ public static void SetMinWidth(FrameworkElement element, double value)
+ {
+ element.SetValue(MinWidthProperty, value);
+ }
+
+ /// <summary>
+ /// Gets the MinWidth attached property.
+ /// </summary>
+ /// <param name="element">The element.</param>
+ /// <returns></returns>
+ public static double GetMinWidth(FrameworkElement element)
+ {
+ return (double)element.GetValue(MinWidthProperty);
+ }
+
+ #endregion
+
+ #region MinHeight
+
+ /// <summary>
+ /// Determined the resolution MinHeight for the trigger.
+ /// </summary>
+ public static readonly DependencyProperty MinHeightProperty =
+ DependencyProperty.RegisterAttached("MinHeight",
+ typeof(double), typeof(ResolutionHelper),
+ new FrameworkPropertyMetadata(double.NaN, OnMinHeightChanged));
+
+ private static void OnMinHeightChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
+ {
+ if (!_elements.Contains(d as FrameworkElement))
+ {
+ _elements.Add(d as FrameworkElement);
+ ApplyElementSetting(d as FrameworkElement);
+ }
+ }
+
+ /// <summary>
+ /// Sets the MinHeight attached property.
+ /// </summary>
+ /// <param name="element">The element.</param>
+ /// <param name="value">if set to <c>true</c> [value].</param>
+ public static void SetMinHeight(FrameworkElement element, double value)
+ {
+ element.SetValue(MinHeightProperty, value);
+ }
+
+ /// <summary>
+ /// Gets the MinHeight attached property.
+ /// </summary>
+ /// <param name="element">The element.</param>
+ /// <returns></returns>
+ public static double GetMinHeight(FrameworkElement element)
+ {
+ return (double)element.GetValue(MinHeightProperty);
+ }
+
+ #endregion
+ }
+}