374 lines
13 KiB
C#
374 lines
13 KiB
C#
using F4SD_AdaptableIcon.Enums;
|
|
using System;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Input;
|
|
using System.Windows.Media;
|
|
using static C4IT.Logging.cLogManager;
|
|
|
|
namespace FasdDesktopUi.Basics.UserControls.AdaptableIcon
|
|
{
|
|
public partial class AdaptableIcon : UserControl, ICommandSource
|
|
{
|
|
private readonly cIconPainter.cIconInformation iconInformation = new cIconPainter.cIconInformation();
|
|
|
|
#region Properties
|
|
|
|
#region Command Properties
|
|
|
|
public ICommand Command
|
|
{
|
|
get { return (ICommand)GetValue(CommandProperty); }
|
|
set { SetValue(CommandProperty, value); }
|
|
}
|
|
|
|
public static readonly DependencyProperty CommandProperty =
|
|
DependencyProperty.Register("Command", typeof(ICommand), typeof(AdaptableIcon), new PropertyMetadata(null));
|
|
|
|
|
|
public object CommandParameter
|
|
{
|
|
get { return (object)GetValue(CommandParameterProperty); }
|
|
set { SetValue(CommandParameterProperty, value); }
|
|
}
|
|
|
|
public static readonly DependencyProperty CommandParameterProperty =
|
|
DependencyProperty.Register("CommandParameter", typeof(object), typeof(AdaptableIcon), new PropertyMetadata(null));
|
|
|
|
|
|
public IInputElement CommandTarget
|
|
{
|
|
get { return (IInputElement)GetValue(CommandTargetProperty); }
|
|
set { SetValue(CommandTargetProperty, value); }
|
|
}
|
|
|
|
public static readonly DependencyProperty CommandTargetProperty =
|
|
DependencyProperty.Register("CommandTarget", typeof(IInputElement), typeof(AdaptableIcon), new PropertyMetadata(null));
|
|
|
|
|
|
protected override void OnMouseLeftButtonUp(MouseButtonEventArgs e)
|
|
{
|
|
base.OnMouseLeftButtonUp(e);
|
|
|
|
try
|
|
{
|
|
if (Command is null)
|
|
return;
|
|
|
|
if (!Command.CanExecute(CommandParameter))
|
|
return;
|
|
|
|
if (Command is RoutedCommand routedCommand)
|
|
routedCommand.Execute(CommandParameter, CommandTarget);
|
|
else
|
|
Command.Execute(CommandParameter);
|
|
}
|
|
catch (Exception E)
|
|
{
|
|
LogException(E);
|
|
}
|
|
}
|
|
|
|
protected override void OnTouchDown(TouchEventArgs e)
|
|
{
|
|
base.OnTouchDown(e);
|
|
|
|
try
|
|
{
|
|
if (Command is null)
|
|
return;
|
|
|
|
if (!Command.CanExecute(CommandParameter))
|
|
return;
|
|
|
|
if (Command is RoutedCommand routedCommand)
|
|
routedCommand.Execute(CommandParameter, CommandTarget);
|
|
else
|
|
Command.Execute(CommandParameter);
|
|
}
|
|
catch (Exception E)
|
|
{
|
|
LogException(E);
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
public string IconName { get => iconInformation?.IconName; }
|
|
|
|
#region IconBackgroundColor DP
|
|
|
|
public static readonly DependencyProperty IconBackgroundColorProperty =
|
|
DependencyProperty.Register("IconBackgroundColor", typeof(Brush), typeof(AdaptableIcon), new PropertyMetadata(Brushes.Transparent, new PropertyChangedCallback(IconInformationChanged)));
|
|
|
|
public Brush IconBackgroundColor
|
|
{
|
|
get { return (Brush)GetValue(IconBackgroundColorProperty); }
|
|
set { SetValue(IconBackgroundColorProperty, value); }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region IconHeight DP
|
|
|
|
public static readonly DependencyProperty IconHeightProperty =
|
|
DependencyProperty.Register("IconHeight", typeof(double), typeof(AdaptableIcon), new PropertyMetadata(30.0, new PropertyChangedCallback(IconInformationChanged)));
|
|
public double IconHeight
|
|
{
|
|
get { return (double)GetValue(IconHeightProperty); }
|
|
set { SetValue(IconHeightProperty, value); }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region IconWidth DP
|
|
|
|
public static readonly DependencyProperty IconWidthProperty =
|
|
DependencyProperty.Register("IconWidth", typeof(double), typeof(AdaptableIcon), new PropertyMetadata(30.0, new PropertyChangedCallback(IconInformationChanged)));
|
|
public double IconWidth
|
|
{
|
|
get { return (double)GetValue(IconWidthProperty); }
|
|
set { SetValue(IconWidthProperty, value); }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region BorderPadding DP
|
|
|
|
public static readonly DependencyProperty BorderPaddingProperty =
|
|
DependencyProperty.Register("BorderPadding", typeof(Thickness), typeof(AdaptableIcon), new PropertyMetadata(new Thickness(7.5), new PropertyChangedCallback(IconInformationChanged)));
|
|
public Thickness BorderPadding
|
|
{
|
|
get { return (Thickness)GetValue(BorderPaddingProperty); }
|
|
set { SetValue(BorderPaddingProperty, value); }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region IconCornerRadius DP
|
|
|
|
public static readonly DependencyProperty IconCornerRadiusProperty =
|
|
DependencyProperty.Register("IconCornerRadius", typeof(CornerRadius), typeof(AdaptableIcon), new PropertyMetadata(new CornerRadius(5), new PropertyChangedCallback(IconInformationChanged)));
|
|
public CornerRadius IconCornerRadius
|
|
{
|
|
get { return (CornerRadius)GetValue(IconCornerRadiusProperty); }
|
|
set { SetValue(IconCornerRadiusProperty, value); }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region PrimaryIconColor DP
|
|
|
|
public static readonly DependencyProperty PrimaryIconColorProperty =
|
|
DependencyProperty.Register("PrimaryIconColor", typeof(SolidColorBrush), typeof(AdaptableIcon), new PropertyMetadata(Brushes.Black, new PropertyChangedCallback(IconInformationChanged)));
|
|
public SolidColorBrush PrimaryIconColor
|
|
{
|
|
get { return (SolidColorBrush)GetValue(PrimaryIconColorProperty); }
|
|
set { SetValue(PrimaryIconColorProperty, value); }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region SecondaryIconColor DP
|
|
|
|
public static readonly DependencyProperty SecondaryIconColorProperty =
|
|
DependencyProperty.Register("SecondaryIconColor", typeof(Brush), typeof(AdaptableIcon), new PropertyMetadata(Brushes.White, new PropertyChangedCallback(IconInformationChanged)));
|
|
public Brush SecondaryIconColor
|
|
{
|
|
get { return (Brush)GetValue(SecondaryIconColorProperty); }
|
|
set { SetValue(SecondaryIconColorProperty, value); }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region SelectedInternIcon
|
|
|
|
public enumInternIcons? SelectedInternIcon
|
|
{
|
|
get { return (enumInternIcons?)GetValue(SelectedInternIconProperty); }
|
|
set { SetValue(SelectedInternIconProperty, value); }
|
|
}
|
|
|
|
public static readonly DependencyProperty SelectedInternIconProperty =
|
|
DependencyProperty.Register("SelectedInternIcon", typeof(enumInternIcons?), typeof(AdaptableIcon), new PropertyMetadata(null, new PropertyChangedCallback(SelectedIconChanged)), ValidateInternIcon);
|
|
|
|
private static bool ValidateInternIcon(object o)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region SelectedInternGif
|
|
|
|
public static readonly DependencyProperty SelectedInternGifProperty =
|
|
DependencyProperty.Register("SelectedInternGif", typeof(enumInternGif?), typeof(AdaptableIcon), new PropertyMetadata(null, new PropertyChangedCallback(SelectedIconChanged)));
|
|
|
|
public enumInternGif? SelectedInternGif
|
|
{
|
|
get { return (enumInternGif?)GetValue(SelectedInternGifProperty); }
|
|
set { SetValue(SelectedInternGifProperty, value); }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region SelectedMaterialIcon
|
|
|
|
public MaterialIcons.MaterialIconType? SelectedMaterialIcon
|
|
{
|
|
get { return (MaterialIcons.MaterialIconType?)GetValue(SelectedMaterialIconProperty); }
|
|
set { SetValue(SelectedMaterialIconProperty, value); }
|
|
}
|
|
|
|
public static readonly DependencyProperty SelectedMaterialIconProperty =
|
|
DependencyProperty.Register("SelectedMaterialIcon", typeof(MaterialIcons.MaterialIconType?), typeof(AdaptableIcon), new PropertyMetadata(null, new PropertyChangedCallback(SelectedIconChanged)));
|
|
|
|
#endregion
|
|
|
|
#region SelectedCountryCode
|
|
|
|
public enumCountryCode? SelectedCountryCode
|
|
{
|
|
get { return (enumCountryCode?)GetValue(SelectedCountryCodeProperty); }
|
|
set { SetValue(SelectedCountryCodeProperty, value); }
|
|
}
|
|
|
|
public static readonly DependencyProperty SelectedCountryCodeProperty =
|
|
DependencyProperty.Register("SelectedCountryCode", typeof(enumCountryCode?), typeof(AdaptableIcon), new PropertyMetadata(null, new PropertyChangedCallback(SelectedIconChanged)));
|
|
|
|
#endregion
|
|
|
|
|
|
private static void IconInformationChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
|
{
|
|
try
|
|
{
|
|
if (d is AdaptableIcon _me)
|
|
_me.UpdateIconInformation();
|
|
}
|
|
catch (Exception E)
|
|
{
|
|
LogException(E);
|
|
}
|
|
}
|
|
|
|
private static void SelectedIconChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
|
{
|
|
try
|
|
{
|
|
if (System.ComponentModel.DesignerProperties.GetIsInDesignMode(d))
|
|
return;
|
|
|
|
if (!(d is AdaptableIcon _me))
|
|
return;
|
|
|
|
if (e.NewValue is null)
|
|
return;
|
|
|
|
if (e.NewValue is enumInternIcons selectedInternIcon)
|
|
_me.iconInformation.UpdateIconInformation(selectedInternIcon);
|
|
|
|
if (e.NewValue is enumInternGif selectedInternGif)
|
|
_me.iconInformation.UpdateIconInformation(selectedInternGif);
|
|
|
|
if (e.NewValue is MaterialIcons.MaterialIconType selectedMaterialIcon)
|
|
_me.iconInformation.UpdateIconInformation(selectedMaterialIcon);
|
|
|
|
if (e.NewValue is enumCountryCode selectedCountryCode)
|
|
_me.iconInformation.UpdateIconInformation(selectedCountryCode);
|
|
|
|
_me.UpdateIconInformation();
|
|
}
|
|
catch (Exception E)
|
|
{
|
|
LogException(E);
|
|
}
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
public AdaptableIcon()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
protected override void OnInitialized(EventArgs e)
|
|
{
|
|
base.OnInitialized(e);
|
|
UpdateIconInformation();
|
|
}
|
|
|
|
public (enumInternIcons?, enumInternGif?, MaterialIcons.MaterialIconType?, enumCountryCode?) GetCurrentIcon()
|
|
{
|
|
return (SelectedInternIcon, SelectedInternGif, SelectedMaterialIcon, SelectedCountryCode);
|
|
}
|
|
|
|
public void SetIcon((enumInternIcons? InternIcon, enumInternGif? InternGif, MaterialIcons.MaterialIconType? MaterialIcon, enumCountryCode? CountryCode) IconValues)
|
|
{
|
|
try
|
|
{
|
|
SelectedInternIcon = IconValues.InternIcon;
|
|
SelectedInternGif = IconValues.InternGif;
|
|
SelectedMaterialIcon = IconValues.MaterialIcon;
|
|
SelectedCountryCode = IconValues.CountryCode;
|
|
}
|
|
catch (Exception E)
|
|
{
|
|
LogException(E);
|
|
}
|
|
}
|
|
|
|
private void UpdateIconInformation()
|
|
{
|
|
try
|
|
{
|
|
iconInformation.IconHeightInPx = IconHeight;
|
|
iconInformation.IconWidthInPx = IconWidth;
|
|
iconInformation.PrimaryIconColor = PrimaryIconColor;
|
|
iconInformation.SecondaryIconColor = SecondaryIconColor;
|
|
|
|
UpdateIcon();
|
|
UpdateIconBorder();
|
|
}
|
|
catch (Exception E)
|
|
{
|
|
LogException(E);
|
|
}
|
|
}
|
|
|
|
private void UpdateIcon()
|
|
{
|
|
try
|
|
{
|
|
MainGrid.Children.Clear();
|
|
|
|
var newIcon = cIconPainter.GetIcon(iconInformation);
|
|
|
|
if (newIcon != null)
|
|
MainGrid.Children.Add(newIcon);
|
|
}
|
|
catch (Exception E)
|
|
{
|
|
LogException(E);
|
|
}
|
|
}
|
|
|
|
private void UpdateIconBorder()
|
|
{
|
|
try
|
|
{
|
|
IconBorder.Background = IconBackgroundColor;
|
|
IconBorder.Height = IconHeight;
|
|
IconBorder.Width = IconWidth;
|
|
IconBorder.CornerRadius = IconCornerRadius;
|
|
IconBorder.Padding = BorderPadding;
|
|
}
|
|
catch (Exception E)
|
|
{
|
|
LogException(E);
|
|
}
|
|
}
|
|
}
|
|
}
|