332 lines
11 KiB
C#
332 lines
11 KiB
C#
using C4IT.FASD.Base;
|
|
using C4IT.MultiLanguage;
|
|
using F4SD_AdaptableIcon;
|
|
using F4SD_AdaptableIcon.Enums;
|
|
using FasdDesktopUi.Basics.Converter;
|
|
using FasdDesktopUi.Basics.UiActions;
|
|
using System.ComponentModel;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Input;
|
|
using static FasdDesktopUi.Basics.UiActions.cUiQuickTipAction;
|
|
|
|
namespace FasdDesktopUi.Basics.UserControls.QuickTip
|
|
{
|
|
public partial class QuickTipStep : UserControl, INotifyPropertyChanged
|
|
{
|
|
|
|
#region Events
|
|
|
|
public event PropertyChangedEventHandler PropertyChanged;
|
|
|
|
#region RequestFocus
|
|
|
|
public static readonly RoutedEvent RequestFocusEvent = EventManager.RegisterRoutedEvent(
|
|
name: nameof(RequestFocus),
|
|
routingStrategy: RoutingStrategy.Bubble,
|
|
handlerType: typeof(RoutedEventHandler),
|
|
ownerType: typeof(QuickTipStep));
|
|
|
|
public event RoutedEventHandler RequestFocus
|
|
{
|
|
add { AddHandler(RequestFocusEvent, value); }
|
|
remove { RemoveHandler(RequestFocusEvent, value); }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region SuccessStateChanged
|
|
|
|
public static readonly RoutedEvent SuccessStateChangedEvent = EventManager.RegisterRoutedEvent(
|
|
name: nameof(SuccessStateChanged),
|
|
routingStrategy: RoutingStrategy.Bubble,
|
|
handlerType: typeof(RoutedEventHandler),
|
|
ownerType: typeof(QuickTipStep));
|
|
|
|
public event RoutedEventHandler SuccessStateChanged
|
|
{
|
|
add { AddHandler(SuccessStateChangedEvent, value); }
|
|
remove { RemoveHandler(SuccessStateChangedEvent, value); }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#endregion
|
|
|
|
#region Properties
|
|
|
|
#region StepData
|
|
|
|
public cUiQuickTipElement StepData
|
|
{
|
|
get { return (cUiQuickTipElement)GetValue(StepDataProperty); }
|
|
set { SetValue(StepDataProperty, value); }
|
|
}
|
|
|
|
public static readonly DependencyProperty StepDataProperty =
|
|
DependencyProperty.Register("StepData", typeof(cUiQuickTipElement), typeof(QuickTipStep), new PropertyMetadata(null, HandleStepDataChanged));
|
|
|
|
private static void HandleStepDataChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
|
{
|
|
if (!(d is QuickTipStep step))
|
|
return;
|
|
|
|
step.UpdateStepIcon();
|
|
step.UpdateStepTypeIcon();
|
|
step.UpdateRequiredIcon();
|
|
}
|
|
|
|
private void UpdateStepIcon()
|
|
{
|
|
if (StepData.ElementType == Enums.enumQuickTipElementType.Automated)
|
|
{
|
|
if (!(StepData.StepUiAction is cUiQuickAction quickAction))
|
|
return;
|
|
|
|
StepIcon = IconDataConverter.Convert(quickAction.QuickActionConfig.Icon);
|
|
}
|
|
else if (StepData.ElementType == Enums.enumQuickTipElementType.Manual)
|
|
StepIcon = StepData.Icon;
|
|
|
|
}
|
|
|
|
private void UpdateStepTypeIcon()
|
|
{
|
|
if (StepData.ElementType == Enums.enumQuickTipElementType.Automated)
|
|
{
|
|
StepTypeIconData = new IconData(enumInternIcons.misc_functionBolt);
|
|
StepTypeIcon.ToolTip = cMultiLanguageSupport.GetItem("QuickTips.Steps.Automated");
|
|
}
|
|
else if (StepData.ElementType == Enums.enumQuickTipElementType.Manual)
|
|
{
|
|
StepTypeIconData = new IconData(enumInternIcons.misc_tool);
|
|
StepTypeIcon.ToolTip = cMultiLanguageSupport.GetItem("QuickTips.Steps.Manual");
|
|
}
|
|
}
|
|
|
|
private void UpdateRequiredIcon()
|
|
{
|
|
if (StepData.IsRequired && (SuccessState == enumQuickActionSuccess.error || SuccessState == enumQuickActionSuccess.unknown))
|
|
{
|
|
RequiredIcon.Visibility = Visibility.Visible;
|
|
RequiredIcon.IsHitTestVisible = true;
|
|
}
|
|
else
|
|
{
|
|
RequiredIcon.Visibility = Visibility.Hidden;
|
|
RequiredIcon.IsHitTestVisible = false;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region StepTypeIconData
|
|
private IconData _stepTypeIconData;
|
|
|
|
public IconData StepTypeIconData
|
|
{
|
|
get => _stepTypeIconData;
|
|
set
|
|
{
|
|
_stepTypeIconData = value;
|
|
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(StepTypeIconData)));
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region HasFocus
|
|
|
|
public bool HasFocus
|
|
{
|
|
get { return (bool)GetValue(HasFocusProperty); }
|
|
set { SetValue(HasFocusProperty, value); }
|
|
}
|
|
|
|
public static readonly DependencyProperty HasFocusProperty =
|
|
DependencyProperty.Register("HasFocus", typeof(bool), typeof(QuickTipStep), new PropertyMetadata(false, HandleHasFocusChanged));
|
|
|
|
private static void HandleHasFocusChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
|
{
|
|
if (d is QuickTipStep step)
|
|
{
|
|
step.UpdateFocusBorder();
|
|
step.Cursor = step.HasFocus ? null : Cursors.Hand;
|
|
}
|
|
}
|
|
|
|
private void RunStepUiAction()
|
|
{
|
|
if (!HasFocus)
|
|
return;
|
|
|
|
cUiActionBase.RaiseEvent(StepData.StepUiAction, this, this);
|
|
}
|
|
|
|
private void UpdateFocusBorder()
|
|
{
|
|
if (HasFocus)
|
|
{
|
|
if (StepData.ElementType == Enums.enumQuickTipElementType.Manual)
|
|
StatusControl.IsHitTestVisible = true;
|
|
|
|
MainBorder.SetResourceReference(BorderBrushProperty, "Color.FunctionMarker");
|
|
}
|
|
else
|
|
{
|
|
StatusControl.IsHitTestVisible = false;
|
|
MainBorder.SetResourceReference(BorderBrushProperty, "BackgroundColor.DetailsPage.DataHistory.TitleColumn");
|
|
}
|
|
}
|
|
|
|
public void HighlightAsRequired() => MainBorder.SetResourceReference(BorderBrushProperty, "Color.Red");
|
|
|
|
#endregion
|
|
|
|
#region StepIcon
|
|
|
|
public IconData StepIcon
|
|
{
|
|
get { return (IconData)GetValue(StepIconProperty); }
|
|
set { SetValue(StepIconProperty, value); }
|
|
}
|
|
|
|
public static readonly DependencyProperty StepIconProperty =
|
|
DependencyProperty.Register("StepIcon", typeof(IconData), typeof(QuickTipStep), new PropertyMetadata(new IconData(enumInternIcons.misc_dot)));
|
|
|
|
#endregion
|
|
|
|
#region SuccessState
|
|
|
|
public enumQuickActionSuccess SuccessState
|
|
{
|
|
get { return (enumQuickActionSuccess)GetValue(SuccessStateProperty); }
|
|
set { SetValue(SuccessStateProperty, value); }
|
|
}
|
|
|
|
public static readonly DependencyProperty SuccessStateProperty =
|
|
DependencyProperty.Register("SuccessState", typeof(enumQuickActionSuccess), typeof(QuickTipStep), new PropertyMetadata(enumQuickActionSuccess.unknown, HandleSuccessStateChanged));
|
|
|
|
private static void HandleSuccessStateChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
|
{
|
|
if (!(d is QuickTipStep step))
|
|
return;
|
|
|
|
step.UpdateStatusControl();
|
|
}
|
|
|
|
private void UpdateStatusControl()
|
|
{
|
|
ErrorIcon.SetResourceReference(AdaptableIcon.AdaptableIcon.PrimaryIconColorProperty, "Color.Menu.Icon");
|
|
UnknownIcon.SetResourceReference(AdaptableIcon.AdaptableIcon.PrimaryIconColorProperty, "Color.Menu.Icon");
|
|
FinishedIcon.SetResourceReference(AdaptableIcon.AdaptableIcon.PrimaryIconColorProperty, "Color.Menu.Icon");
|
|
|
|
ErrorIcon.Opacity = 0.35;
|
|
UnknownIcon.Opacity = 0.35;
|
|
FinishedIcon.Opacity = 0.35;
|
|
|
|
switch (SuccessState)
|
|
{
|
|
case enumQuickActionSuccess.error:
|
|
ErrorIcon.SetResourceReference(AdaptableIcon.AdaptableIcon.PrimaryIconColorProperty, "HighlightColor.Red");
|
|
ErrorIcon.Opacity = 1;
|
|
break;
|
|
case enumQuickActionSuccess.unknown:
|
|
UnknownIcon.SetResourceReference(AdaptableIcon.AdaptableIcon.PrimaryIconColorProperty, "Color.Menu.Icon");
|
|
UnknownIcon.Opacity = 1;
|
|
break;
|
|
case enumQuickActionSuccess.finished:
|
|
case enumQuickActionSuccess.successfull:
|
|
FinishedIcon.SetResourceReference(AdaptableIcon.AdaptableIcon.PrimaryIconColorProperty, "HighlightColor.Green");
|
|
FinishedIcon.Opacity = 1;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
UpdateStepCount();
|
|
UpdateRequiredIcon();
|
|
}
|
|
|
|
#endregion
|
|
|
|
#endregion
|
|
|
|
public QuickTipStep()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
private void MainBorder_TouchDown(object sender, TouchEventArgs e)
|
|
{
|
|
SetFocusForStep();
|
|
RunStepUiAction();
|
|
}
|
|
|
|
private void MainBorder_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
|
|
{
|
|
SetFocusForStep();
|
|
RunStepUiAction();
|
|
}
|
|
|
|
private void SetFocusForStep()
|
|
{
|
|
if (HasFocus)
|
|
return;
|
|
|
|
RoutedEventArgs eventArgs = new RoutedEventArgs(routedEvent: RequestFocusEvent);
|
|
|
|
RaiseEvent(eventArgs);
|
|
}
|
|
|
|
private void UpdateStepCount()
|
|
{
|
|
RoutedEventArgs eventArgs = new RoutedEventArgs(routedEvent: SuccessStateChangedEvent);
|
|
RaiseEvent(eventArgs);
|
|
}
|
|
|
|
private void SelectStatus_TouchDown(object sender, TouchEventArgs e)
|
|
{
|
|
SetSuccessState(sender);
|
|
}
|
|
|
|
private void SelectStatus_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
|
|
{
|
|
SetSuccessState(sender);
|
|
}
|
|
|
|
private void SetSuccessState(object sender)
|
|
{
|
|
if (!(StepData.ElementType == Enums.enumQuickTipElementType.Manual))
|
|
return;
|
|
|
|
if (!(sender is FrameworkElement frameworkElement))
|
|
return;
|
|
|
|
switch (frameworkElement.Tag)
|
|
{
|
|
case "Error":
|
|
SuccessState = enumQuickActionSuccess.error;
|
|
break;
|
|
case "Unknown":
|
|
SuccessState = enumQuickActionSuccess.unknown;
|
|
break;
|
|
case "Finished":
|
|
SuccessState = enumQuickActionSuccess.finished;
|
|
break;
|
|
default:
|
|
return;
|
|
}
|
|
}
|
|
|
|
private void MainBorder_MouseEnter(object sender, MouseEventArgs e)
|
|
{
|
|
HeadingIcon.SetResourceReference(AdaptableIcon.AdaptableIcon.PrimaryIconColorProperty, "Color.Menu.Icon.Hover");
|
|
}
|
|
|
|
private void MainBorder_MouseLeave(object sender, MouseEventArgs e)
|
|
{
|
|
HeadingIcon.SetResourceReference(AdaptableIcon.AdaptableIcon.PrimaryIconColorProperty, "Color.Menu.Icon");
|
|
}
|
|
}
|
|
}
|