diff options
| author | Avi Levkovich <avi@twine-s.com> | 2020-03-25 17:43:49 +0200 |
|---|---|---|
| committer | Avi Levkovich <avi@twine-s.com> | 2020-03-25 17:43:49 +0200 |
| commit | d29da53d6f71f45749c0ede5b4cd7281ed3a270e (patch) | |
| tree | fd83afc7771c0f4f19c581e1cf407bcf7c14818b /Software/Visual_Studio/FSE/Tango.FSE.Common/Resolution/ResolutionHelper.cs | |
| parent | 0208e9f1800c044ec3bd002b7aa7fd00621c81be (diff) | |
| download | Tango-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.cs | 227 |
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 + } +} |
