init
This commit is contained in:
@@ -0,0 +1,321 @@
|
||||
using System;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Media;
|
||||
using System.ComponentModel;
|
||||
using DTS.Common.Events;
|
||||
using Microsoft.Practices.Prism.Events;
|
||||
using Microsoft.Practices.ServiceLocation;
|
||||
using Microsoft.Practices.Unity;
|
||||
|
||||
namespace DTS.Common.Controls
|
||||
{
|
||||
/// <summary>
|
||||
/// Interaction logic for CommonStatusRibbon.xaml
|
||||
/// this is a helper class for the status ribbon + status text shown on pages that have status feedback
|
||||
/// </summary>
|
||||
public partial class CommonStatusRibbon : UserControl, INotifyPropertyChanged
|
||||
{
|
||||
public event PropertyChangedEventHandler PropertyChanged;
|
||||
|
||||
protected bool SetProperty<T>(ref T storage, T value, string propertyName = null)
|
||||
{
|
||||
if (Equals(storage, value)) return false;
|
||||
|
||||
storage = value;
|
||||
OnPropertyChanged(propertyName);
|
||||
return true;
|
||||
}
|
||||
protected void OnPropertyChanged(string propertyName = null)
|
||||
{
|
||||
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
|
||||
}
|
||||
|
||||
private IUnityContainer _unityContainer { get; }
|
||||
private IEventAggregator _eventAggregator { get; }
|
||||
|
||||
public CommonStatusRibbon()
|
||||
{
|
||||
InitializeComponent();
|
||||
if (_unityContainer == null) { _unityContainer = ServiceLocator.Current.GetInstance<IUnityContainer>(); }
|
||||
if (_eventAggregator == null)
|
||||
{
|
||||
_eventAggregator = ServiceLocator.Current.GetInstance<IEventAggregator>();
|
||||
}
|
||||
_eventAggregator.GetEvent<ProgressBarEvent>().Subscribe(OnProgressBarEvent, ThreadOption.PublisherThread);
|
||||
}
|
||||
|
||||
private void OnProgressBarEvent(ProgressBarEventArg arg)
|
||||
{
|
||||
if( arg.ProgressBarName != ProgressBarName) { return; }
|
||||
if (null != arg.ProgressBarText)
|
||||
{
|
||||
SetAggregateStatusText(arg.ProgressBarText);
|
||||
}
|
||||
if (!double.IsNaN(arg.ProgressBarPercentage))
|
||||
{
|
||||
SetProgressValue(Convert.ToInt32(arg.ProgressBarPercentage));
|
||||
}
|
||||
SetProgressBarVisibility(arg.ProgressBarVisibility);
|
||||
SetAggregateStatusColor(arg.ProgressBarColor);
|
||||
}
|
||||
|
||||
#region ProgressBarValue
|
||||
public static readonly DependencyProperty SetProgressBarValueProperty =
|
||||
DependencyProperty.Register("ProgressBarValue", typeof(int), typeof(CommonStatusRibbon),
|
||||
new PropertyMetadata(0, OnProgressValueChanged));
|
||||
|
||||
private static void OnProgressValueChanged(DependencyObject d,
|
||||
DependencyPropertyChangedEventArgs e)
|
||||
{
|
||||
var sr = d as CommonStatusRibbon;
|
||||
sr?.OnProgressBarValueChanged(e);
|
||||
}
|
||||
|
||||
private void OnProgressBarValueChanged(DependencyPropertyChangedEventArgs e)
|
||||
{
|
||||
SetProgressValue(Convert.ToInt32(e.NewValue));
|
||||
}
|
||||
private delegate void SetProgressValueDelegate(int value);
|
||||
private int _progressBarValue;
|
||||
|
||||
/// <summary>
|
||||
/// sets the progress bar progress. Not thread friendly, call SetProgressValue if coming from a background thread
|
||||
/// </summary>
|
||||
public int ProgressBarValue
|
||||
{
|
||||
get => _progressBarValue;
|
||||
set => SetProperty(ref _progressBarValue, value, "ProgressBarValue");
|
||||
}
|
||||
/// <summary>
|
||||
/// sets the progress bar progress
|
||||
/// thread friendly
|
||||
/// </summary>
|
||||
/// <param name="value">progress from 0-100. values less than 0 or greater than 100 are normalized to 0 or 100</param>
|
||||
public void SetProgressValue(int value)
|
||||
{
|
||||
if (!Dispatcher.CheckAccess())
|
||||
{
|
||||
Dispatcher.BeginInvoke(new SetProgressValueDelegate(SetProgressValue), value);
|
||||
return;
|
||||
}
|
||||
if (value < 0) { value = 0; }
|
||||
else if (value > 100) { value = 100; }
|
||||
ProgressBarValue = value;
|
||||
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region ProgressBarVisibility
|
||||
public static readonly DependencyProperty SetProgressBarVisibilityProperty =
|
||||
DependencyProperty.Register("ProgressBarVisibility", typeof(Visibility), typeof(CommonStatusRibbon),
|
||||
new PropertyMetadata(Visibility.Collapsed, OnProgressVisibilityChanged));
|
||||
|
||||
private static void OnProgressVisibilityChanged(DependencyObject d,
|
||||
DependencyPropertyChangedEventArgs e)
|
||||
{
|
||||
var sr = d as CommonStatusRibbon;
|
||||
sr?.OnProgressBarVisibilityChanged(e);
|
||||
}
|
||||
|
||||
private void OnProgressBarVisibilityChanged(DependencyPropertyChangedEventArgs e)
|
||||
{
|
||||
SetProgressBarVisibility((Visibility) e.NewValue);
|
||||
}
|
||||
/// <summary>
|
||||
/// controls the progress bar visibility.
|
||||
/// SetProgressBarVisibility is thread friendly
|
||||
/// </summary>
|
||||
private Visibility _progressBarVisibility = Visibility.Hidden;
|
||||
public Visibility ProgressBarVisibility
|
||||
{
|
||||
get => _progressBarVisibility;
|
||||
set => SetProperty(ref _progressBarVisibility, value, "ProgressBarVisibility");
|
||||
}
|
||||
private delegate void SetProgressBarVisibilityDelegate(Visibility v);
|
||||
/// <summary>
|
||||
/// sets the progress bar visibility
|
||||
/// thread friendly
|
||||
/// </summary>
|
||||
/// <param name="v"></param>
|
||||
public void SetProgressBarVisibility(Visibility v)
|
||||
{
|
||||
if (!Dispatcher.CheckAccess())
|
||||
{
|
||||
Dispatcher.BeginInvoke(new SetProgressBarVisibilityDelegate(SetProgressBarVisibility), v);
|
||||
}
|
||||
else
|
||||
{
|
||||
ProgressBarVisibility = v;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
#region ProgressBarName
|
||||
public static readonly DependencyProperty ProgressBarNameProperty =
|
||||
DependencyProperty.Register("ProgressBarName", typeof(string), typeof( CommonStatusRibbon),
|
||||
new PropertyMetadata("OverallStatus", OnProgressBarNameChanged));
|
||||
|
||||
private static void OnProgressBarNameChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
||||
{
|
||||
var sr = d as CommonStatusRibbon;
|
||||
sr?.OnProgressBarNameChanged(e);
|
||||
}
|
||||
|
||||
private void OnProgressBarNameChanged(DependencyPropertyChangedEventArgs e)
|
||||
{
|
||||
SetProgressBarName(Convert.ToString(e.NewValue));
|
||||
}
|
||||
|
||||
public void SetProgressBarName(string s)
|
||||
{
|
||||
if (!Dispatcher.CheckAccess())
|
||||
{
|
||||
Dispatcher.BeginInvoke(new Action(() => SetProgressBarName(s)));
|
||||
}
|
||||
else
|
||||
{
|
||||
ProgressBarName = s;
|
||||
}
|
||||
}
|
||||
private string _progressBarName = "OverallStatus";
|
||||
public string ProgressBarName
|
||||
{
|
||||
get => _progressBarName;
|
||||
set => SetProperty(ref _progressBarName, value, "ProgressBarName");
|
||||
}
|
||||
#endregion ProgressBarName
|
||||
#region AggregateStatusText
|
||||
public static readonly DependencyProperty SetAggregateStatusTextProperty =
|
||||
DependencyProperty.Register("AggregateStatusText", typeof(string), typeof(CommonStatusRibbon),
|
||||
new PropertyMetadata("", OnAggregateStatusTextChanged));
|
||||
|
||||
private static void OnAggregateStatusTextChanged(DependencyObject d,
|
||||
DependencyPropertyChangedEventArgs e)
|
||||
{
|
||||
var sr = d as CommonStatusRibbon;
|
||||
sr?.OnAggregateStatusTextChanged(e);
|
||||
}
|
||||
|
||||
private void OnAggregateStatusTextChanged(DependencyPropertyChangedEventArgs e)
|
||||
{
|
||||
SetAggregateStatusText(Convert.ToString(e.NewValue));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// retrieves the status text
|
||||
/// to set status text use SetStatusTextNoTranslate or the property Status
|
||||
/// </summary>
|
||||
private string _aggregateStatusText = "---";
|
||||
public string AggregateStatusText
|
||||
{
|
||||
get => _aggregateStatusText;
|
||||
set => SetProperty(ref _aggregateStatusText, value, "AggregateStatusText");
|
||||
}
|
||||
public void SetAggregateStatusText(string s)
|
||||
{
|
||||
if (!Dispatcher.CheckAccess())
|
||||
{
|
||||
Dispatcher.BeginInvoke(new Action(() => SetAggregateStatusText(s)));
|
||||
}
|
||||
else
|
||||
{
|
||||
AggregateStatusText = s;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region AggregateStatusColor
|
||||
public static readonly DependencyProperty SetAggregateStatusColorProperty =
|
||||
DependencyProperty.Register("AggregateStatusColor", typeof(Color), typeof(CommonStatusRibbon),
|
||||
new PropertyMetadata(Colors.AliceBlue, OnAggregateStatusColorChanged));
|
||||
|
||||
private static void OnAggregateStatusColorChanged(DependencyObject d,
|
||||
DependencyPropertyChangedEventArgs e)
|
||||
{
|
||||
var sr = d as CommonStatusRibbon;
|
||||
sr?.OnAggregateStatusColorChanged(e);
|
||||
}
|
||||
|
||||
private void OnAggregateStatusColorChanged(DependencyPropertyChangedEventArgs e)
|
||||
{
|
||||
SetAggregateStatusColor((Color)e.NewValue);
|
||||
}
|
||||
private delegate void SetStatusColorDelegate(Color c);
|
||||
/// <summary>
|
||||
/// sets the color of the ribbon background
|
||||
/// thread friendly
|
||||
/// </summary>
|
||||
/// <param name="c"></param>
|
||||
public void SetAggregateStatusColor(Color c)
|
||||
{
|
||||
if (!Dispatcher.CheckAccess())
|
||||
{
|
||||
Dispatcher.BeginInvoke(new SetStatusColorDelegate(SetAggregateStatusColor), c);
|
||||
return;
|
||||
}
|
||||
AggregateStatusColor = c;
|
||||
}
|
||||
|
||||
private Color _aggregateStatusColor = Colors.AliceBlue;
|
||||
/// <summary>
|
||||
/// determines the color of the status background
|
||||
/// not thread friendly
|
||||
/// SetAggregateStatusColor is thread friendly
|
||||
/// </summary>
|
||||
public Color AggregateStatusColor
|
||||
{
|
||||
get => _aggregateStatusColor;
|
||||
set
|
||||
{
|
||||
SetAlert(false);
|
||||
SetProperty(ref _aggregateStatusColor, value, "AggregateStatusColor");
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private Visibility _alertVisibility = Visibility.Hidden;
|
||||
public Visibility AlertVisibility
|
||||
{
|
||||
get => _alertVisibility;
|
||||
set => SetProperty(ref _alertVisibility, value, "AlertVisibility");
|
||||
}
|
||||
|
||||
|
||||
private SolidColorBrush _textColor = new SolidColorBrush(Colors.Black);
|
||||
public SolidColorBrush TextColor
|
||||
{
|
||||
get => _textColor;
|
||||
set
|
||||
{
|
||||
SetProperty(ref _textColor, value, "TextColor");
|
||||
OnPropertyChanged("TextColor");
|
||||
}
|
||||
}
|
||||
|
||||
private bool _isAlertSet;
|
||||
public delegate void SetAlertDelegate(bool set);
|
||||
public void SetAlert(bool set)
|
||||
{
|
||||
if (!Dispatcher.CheckAccess())
|
||||
{
|
||||
Dispatcher.BeginInvoke(new SetAlertDelegate(SetAlert), set);
|
||||
return;
|
||||
}
|
||||
if (set == _isAlertSet) { return; }
|
||||
_isAlertSet = set;
|
||||
if (set)
|
||||
{
|
||||
//turn on alert
|
||||
TextColor = BrushesAndColors.Brush_ArmSystemForeground;
|
||||
AlertVisibility = Visibility.Visible;
|
||||
}
|
||||
else
|
||||
{
|
||||
//turn off alert
|
||||
TextColor = new SolidColorBrush(Colors.Black);
|
||||
AlertVisibility = Visibility.Hidden;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user