diff options
| author | Victoria Plitt <Victoria.Plitt@twine-s.com> | 2021-12-15 19:54:05 +0200 |
|---|---|---|
| committer | Victoria Plitt <Victoria.Plitt@twine-s.com> | 2021-12-15 19:54:05 +0200 |
| commit | 61fabd3e525954b941263e9724e8a267f58c6f01 (patch) | |
| tree | a3d9c433a853fb2a7ea2d53c6e9aea7e36b836a4 /Software/Visual_Studio/Tango.Touch | |
| parent | 24464678b69cf6639a1f65788eac9b93e099d45f (diff) | |
| download | Tango-61fabd3e525954b941263e9724e8a267f58c6f01.tar.gz Tango-61fabd3e525954b941263e9724e8a267f58c6f01.zip | |
Undo/Redo for offset( slider with 3 thumbs)
Diffstat (limited to 'Software/Visual_Studio/Tango.Touch')
| -rw-r--r-- | Software/Visual_Studio/Tango.Touch/TouchColorPickerControls/MultiRangeSlider.cs | 54 | ||||
| -rw-r--r-- | Software/Visual_Studio/Tango.Touch/TouchColorPickerControls/TouchSliderThreeThumbs.cs | 117 |
2 files changed, 169 insertions, 2 deletions
diff --git a/Software/Visual_Studio/Tango.Touch/TouchColorPickerControls/MultiRangeSlider.cs b/Software/Visual_Studio/Tango.Touch/TouchColorPickerControls/MultiRangeSlider.cs index beb34e6f4..0cfd74f5c 100644 --- a/Software/Visual_Studio/Tango.Touch/TouchColorPickerControls/MultiRangeSlider.cs +++ b/Software/Visual_Studio/Tango.Touch/TouchColorPickerControls/MultiRangeSlider.cs @@ -9,11 +9,13 @@ using System.Windows.Controls.Primitives; namespace Tango.Touch.Controls { + public class MultiRangeSlider : Slider { private bool m_isBlocked; #region DependencyProperties + public double LeftValue { get { return (double)GetValue(LeftValueProperty); } @@ -97,6 +99,29 @@ namespace Tango.Touch.Controls public bool IsLast { get; set; } + + public double ValueBeforeChanging + { + get { return (double)GetValue(ValueBeforeChangingProperty); } + set { SetValue(ValueBeforeChangingProperty, value); } + } + + // Using a DependencyProperty as the backing store for ValueBeforeChanging. This enables animation, styling, binding, etc... + public static readonly DependencyProperty ValueBeforeChangingProperty = + DependencyProperty.Register("ValueBeforeChanging", typeof(double), typeof(MultiRangeSlider), new FrameworkPropertyMetadata(double.MinValue)); + + + public double ValueAfterChanging + { + get { return (double)GetValue(ValueAfterChangingProperty); } + set { SetValue(ValueAfterChangingProperty, value); } + } + + // Using a DependencyProperty as the backing store for ValueAfterChanging. This enables animation, styling, binding, etc... + public static readonly DependencyProperty ValueAfterChangingProperty = + DependencyProperty.Register("ValueAfterChanging", typeof(double), typeof(MultiRangeSlider), new FrameworkPropertyMetadata(double.MinValue)); + + #endregion #region Events @@ -114,6 +139,19 @@ namespace Tango.Touch.Controls } } + public static readonly RoutedEvent MultiRangeSliderValueChangedCompletedEvent = EventManager.RegisterRoutedEvent("MultiRangeSliderValueChangedCompleted", RoutingStrategy.Bubble, typeof(RoutedPropertyChangedEventHandler<double>), typeof(MultiRangeSlider)); + public event RoutedPropertyChangedEventHandler<double> MultiRangeSliderValueChangedCompleted + { + add + { + AddHandler(MultiRangeSliderValueChangedCompletedEvent, value); + } + remove + { + RemoveHandler(MultiRangeSliderValueChangedCompletedEvent, value); + } + } + #endregion public MultiRangeSlider() @@ -129,9 +167,23 @@ namespace Tango.Touch.Controls { DefaultStyleKeyProperty.OverrideMetadata(typeof(MultiRangeSlider), new FrameworkPropertyMetadata(typeof(MultiRangeSlider))); } - + #region change and validate value + protected override void OnThumbDragStarted(DragStartedEventArgs e) + { + ValueBeforeChanging = Value; + base.OnThumbDragStarted(e); + } + + protected override void OnThumbDragCompleted(DragCompletedEventArgs e) + { + base.OnThumbDragCompleted(e); + RoutedPropertyChangedEventArgs<double> args = new RoutedPropertyChangedEventArgs<double>(ValueBeforeChanging, Value); + args.RoutedEvent = MultiRangeSlider.MultiRangeSliderValueChangedCompletedEvent; + RaiseEvent(args); + } + protected override void OnValueChanged(double oldValue, double newValue) { if (m_isBlocked) return; diff --git a/Software/Visual_Studio/Tango.Touch/TouchColorPickerControls/TouchSliderThreeThumbs.cs b/Software/Visual_Studio/Tango.Touch/TouchColorPickerControls/TouchSliderThreeThumbs.cs index 230bfea8c..4d39136e8 100644 --- a/Software/Visual_Studio/Tango.Touch/TouchColorPickerControls/TouchSliderThreeThumbs.cs +++ b/Software/Visual_Studio/Tango.Touch/TouchColorPickerControls/TouchSliderThreeThumbs.cs @@ -57,6 +57,31 @@ namespace Tango.Touch.Controls public static readonly DependencyProperty LowerValueProperty = DependencyProperty.Register("LowerValue", typeof(double), typeof(TouchSliderThreeThumbs), new FrameworkPropertyMetadata(0d, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault)); + + public double LowerValueStartChanging + { + get { return (double)GetValue(LowerValueStartChangingProperty); } + set { SetValue(LowerValueStartChangingProperty, value); } + } + + /// <summary> + /// The lower value before changing property. Using to calculate delta or for UnDo management. + /// </summary> + public static readonly DependencyProperty LowerValueStartChangingProperty = + DependencyProperty.Register("LowerValueStartChanging", typeof(double), typeof(TouchSliderThreeThumbs), new FrameworkPropertyMetadata(0d, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault)); + + public double LowerValueEndChanging + { + get { return (int)GetValue(LowerValueEndChangingProperty); } + set { SetValue(LowerValueEndChangingProperty, value); } + } + + /// <summary> + /// The lower value end changing property. Using to calculate delta or for UnDo management. + /// </summary> + public static readonly DependencyProperty LowerValueEndChangingProperty = + DependencyProperty.Register("LowerValueEndChanging", typeof(double), typeof(TouchSliderThreeThumbs), new FrameworkPropertyMetadata(0d, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault)); + public double UpperValue { get { return (double)GetValue(UpperValueProperty); } @@ -65,6 +90,32 @@ namespace Tango.Touch.Controls public static readonly DependencyProperty UpperValueProperty = DependencyProperty.Register("UpperValue", typeof(double), typeof(TouchSliderThreeThumbs), new FrameworkPropertyMetadata(100d, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault)); + + public double UpperValueStartChanging + { + get { return (double)GetValue(UpperValueStartChangingProperty); } + set { SetValue(UpperValueStartChangingProperty, value); } + } + + /// <summary> + /// The upper value start changing property. Using to calculate delta or for UnDo management. + /// </summary> + public static readonly DependencyProperty UpperValueStartChangingProperty = + DependencyProperty.Register("UpperValueStartChanging", typeof(double), typeof(TouchSliderThreeThumbs), new FrameworkPropertyMetadata(0d, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault)); + + public double UpperValueEndChanging + { + get { return (double)GetValue(UpperValueEndChangingProperty); } + set { SetValue(UpperValueEndChangingProperty, value); } + } + + /// <summary> + /// The upper value end changing property. Using to calculate delta or for UnDo management. + /// </summary> + public static readonly DependencyProperty UpperValueEndChangingProperty = + DependencyProperty.Register("UpperValueEndChanging", typeof(double), typeof(TouchSliderThreeThumbs), new FrameworkPropertyMetadata(0d, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault)); + + public double MiddleValue { get { return (double)GetValue(MiddleValueProperty); } @@ -72,7 +123,31 @@ namespace Tango.Touch.Controls } public static readonly DependencyProperty MiddleValueProperty = DependencyProperty.Register("MiddleValue", typeof(double), typeof(TouchSliderThreeThumbs), new FrameworkPropertyMetadata(50d, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault)); - + + + + public double MiddleValueStartChanging + { + get { return (double)GetValue(MiddleValueStartChangingProperty); } + set { SetValue(MiddleValueStartChangingProperty, value); } + } + + // Using a DependencyProperty as the backing store for MiddleValueStartChanging. This enables animation, styling, binding, etc... + public static readonly DependencyProperty MiddleValueStartChangingProperty = + DependencyProperty.Register("MiddleValueStartChanging", typeof(double), typeof(TouchSliderThreeThumbs), new FrameworkPropertyMetadata(0d, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault)); + + + public double MiddleValueEndChanging + { + get { return (double)GetValue(MiddleValueEndChangingProperty); } + set { SetValue(MiddleValueEndChangingProperty, value); } + } + + // Using a DependencyProperty as the backing store for MiddleValueEndChanging. This enables animation, styling, binding, etc... + public static readonly DependencyProperty MiddleValueEndChangingProperty = + DependencyProperty.Register("MiddleValueEndChanging", typeof(double), typeof(TouchSliderThreeThumbs), new FrameworkPropertyMetadata(0d, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault)); + + public double MinimumMiddleRange { get { return (double)GetValue(MinimumMiddleRangeProperty); } @@ -179,7 +254,10 @@ namespace Tango.Touch.Controls base.OnApplyTemplate(); if (_lowerSlider != null) + { _lowerSlider.ValueChanged -= LowerSlider_ValueChanged; + _lowerSlider.MultiRangeSliderValueChangedCompleted -= LowerSlider_ValueChangedCompleted; + } // LowerValue = Minimum; //UpperValue = Maximum; _lowerSlider = GetTemplateChild(PART_LowerSlider) as MultiRangeSlider; @@ -190,12 +268,16 @@ namespace Tango.Touch.Controls _lowerSlider.RightValue = UpperValue; _lowerSlider.IsFirst = true; _lowerSlider.MultiRangeSliderValueChanged += LowerSlider_ValueChanged; + _lowerSlider.MultiRangeSliderValueChangedCompleted += LowerSlider_ValueChangedCompleted; _lowerSlider.TouchDown += TouchDownSlider; _lowerSlider.Value = LowerValue; } if(_middleSlider != null) + { _middleSlider.MultiRangeSliderValueChanged -= MiddleSlider_ValueChanged; + _middleSlider.MultiRangeSliderValueChangedCompleted -= MiddleSlider_ValueChangedCompleted; + } _middleSlider = GetTemplateChild(Part_MiddleSlider) as MultiRangeSlider; if(_middleSlider != null) @@ -203,12 +285,16 @@ namespace Tango.Touch.Controls _middleSlider.LeftValue = LowerValue; _middleSlider.RightValue = UpperValue; _middleSlider.MultiRangeSliderValueChanged += MiddleSlider_ValueChanged; + _middleSlider.MultiRangeSliderValueChangedCompleted += MiddleSlider_ValueChangedCompleted; _middleSlider.TouchDown += TouchDownSlider; _middleSlider.Value = MiddleValue;// (Maximum - Minimum) / 2; } if (_upperSlider != null) + { _upperSlider.MultiRangeSliderValueChanged -= UpperSlider_ValueChanged; + _upperSlider.MultiRangeSliderValueChangedCompleted -= RightSlider_ValueChangedCompleted; + } _upperSlider = GetTemplateChild(PART_UpperSlider) as MultiRangeSlider; if(_upperSlider != null) @@ -217,6 +303,7 @@ namespace Tango.Touch.Controls _upperSlider.RightValue = Maximum; _upperSlider.IsLast = true; _upperSlider.MultiRangeSliderValueChanged += UpperSlider_ValueChanged; + _upperSlider.MultiRangeSliderValueChangedCompleted += RightSlider_ValueChangedCompleted; _upperSlider.TouchDown += TouchDownSlider; _upperSlider.Value = UpperValue; } @@ -309,6 +396,34 @@ namespace Tango.Touch.Controls _upperSlider.Minimum = Minimum - ThumbValue * 2; } } + + private void LowerSlider_ValueChangedCompleted(object sender, RoutedPropertyChangedEventArgs<double> e) + { + if ((int)e.OldValue != (int)e.NewValue) + { + LowerValueStartChanging = e.OldValue; + LowerValueEndChanging = e.NewValue; + } + } + + private void MiddleSlider_ValueChangedCompleted(object sender, RoutedPropertyChangedEventArgs<double> e) + { + if ((int)e.OldValue != (int)e.NewValue) + { + MiddleValueStartChanging = e.OldValue; + MiddleValueEndChanging = e.NewValue; + } + } + + private void RightSlider_ValueChangedCompleted(object sender, RoutedPropertyChangedEventArgs<double> e) + { + if ((int)e.OldValue != (int)e.NewValue) + { + UpperValueStartChanging = e.OldValue; + UpperValueEndChanging = e.NewValue; + } + } + #endregion #region methods |
