mirror of
https://github.com/ZuneDev/MicrosoftIris.git
synced 2026-07-27 13:13:29 -07:00
135 lines
3.8 KiB
C#
135 lines
3.8 KiB
C#
// Decompiled with JetBrains decompiler
|
|
// Type: Microsoft.Iris.ModelItems.RangedValue
|
|
// Assembly: UIX, Version=4.8.0.0, Culture=neutral, PublicKeyToken=ddd0da4d3e678217
|
|
// MVID: A56C6C9D-B7F6-46A9-8BDE-B3D9B8D60B11
|
|
// Assembly location: C:\Program Files\Zune\UIX.dll
|
|
|
|
using Microsoft.Iris.Library;
|
|
using Microsoft.Iris.Markup;
|
|
using System;
|
|
|
|
namespace Microsoft.Iris.ModelItems
|
|
{
|
|
internal class RangedValue : NotifyObjectBase, IUIRangedValue, IUIValueRange, INotifyObject
|
|
{
|
|
private float _value;
|
|
private float _min;
|
|
private float _max;
|
|
private float _step;
|
|
|
|
public RangedValue(float min, float max, float step)
|
|
{
|
|
_min = min;
|
|
_max = max;
|
|
_step = step;
|
|
}
|
|
|
|
public RangedValue()
|
|
: this(float.MinValue, float.MaxValue, 1f)
|
|
{
|
|
}
|
|
|
|
public float Value
|
|
{
|
|
get => _value;
|
|
set
|
|
{
|
|
value = Math.Max(value, _min);
|
|
value = Math.Min(value, _max);
|
|
if (_value == (double)value)
|
|
return;
|
|
using (new RangedValue.PrevNextNotifier(this))
|
|
{
|
|
_value = value;
|
|
FireNotification(NotificationID.Value);
|
|
FireNotification(NotificationID.ObjectValue);
|
|
}
|
|
}
|
|
}
|
|
|
|
object IUIValueRange.ObjectValue => _value;
|
|
|
|
public float MinValue
|
|
{
|
|
get => _min;
|
|
set
|
|
{
|
|
if (_min == (double)value)
|
|
return;
|
|
using (new RangedValue.PrevNextNotifier(this))
|
|
{
|
|
_min = value;
|
|
FireNotification(NotificationID.MinValue);
|
|
FireNotification(NotificationID.Range);
|
|
Value = Value;
|
|
}
|
|
}
|
|
}
|
|
|
|
public float MaxValue
|
|
{
|
|
get => _max;
|
|
set
|
|
{
|
|
if (_max == (double)value)
|
|
return;
|
|
using (new RangedValue.PrevNextNotifier(this))
|
|
{
|
|
_max = value;
|
|
FireNotification(NotificationID.MaxValue);
|
|
FireNotification(NotificationID.Range);
|
|
Value = Value;
|
|
}
|
|
}
|
|
}
|
|
|
|
public float Range => _max - _min;
|
|
|
|
public float Step
|
|
{
|
|
get => _step;
|
|
set
|
|
{
|
|
if (_step == (double)value)
|
|
return;
|
|
using (new RangedValue.PrevNextNotifier(this))
|
|
{
|
|
_step = value;
|
|
FireNotification(NotificationID.Step);
|
|
}
|
|
}
|
|
}
|
|
|
|
public bool HasPreviousValue => _step < 0.0 ? _value < (double)_max : _value > (double)_min;
|
|
|
|
public bool HasNextValue => _step < 0.0 ? _value > (double)_min : _value < (double)_max;
|
|
|
|
public void PreviousValue() => Value -= Step;
|
|
|
|
public void NextValue() => Value += Step;
|
|
|
|
private struct PrevNextNotifier : IDisposable
|
|
{
|
|
private bool _hadPrev;
|
|
private bool _hadNext;
|
|
private RangedValue _range;
|
|
|
|
public PrevNextNotifier(RangedValue range)
|
|
{
|
|
_range = range;
|
|
_hadPrev = range.HasPreviousValue;
|
|
_hadNext = range.HasNextValue;
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
if (_range.HasPreviousValue != _hadPrev)
|
|
_range.FireNotification(NotificationID.HasPreviousValue);
|
|
if (_range.HasNextValue == _hadNext)
|
|
return;
|
|
_range.FireNotification(NotificationID.HasNextValue);
|
|
}
|
|
}
|
|
}
|
|
}
|