This commit is contained in:
Meik
2025-11-11 11:03:42 +01:00
commit dc3e8a2e4c
582 changed files with 191465 additions and 0 deletions

View File

@@ -0,0 +1,373 @@
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);
}
}
}
}