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,222 @@
using C4IT.FASD.Base;
using F4SD_AdaptableIcon.Enums;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.InteropServices.WindowsRuntime;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using static C4IT.Logging.cLogManager;
namespace FasdDesktopUi.Basics.UserControls
{
public partial class SelectionPill : UserControl
{
#region PillText
public string PillText
{
get { return (string)GetValue(PillTextProperty); }
set { SetValue(PillTextProperty, value); }
}
public static readonly DependencyProperty PillTextProperty =
DependencyProperty.Register("PillText", typeof(string), typeof(SelectionPill), new PropertyMetadata(string.Empty));
#endregion
#region Icons
private static void SelectedIconChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
try
{
if (!(d is SelectionPill me))
return;
if (e.NewValue is null)
return;
switch (e.NewValue)
{
case enumInternIcons _:
me.SelectedMaterialIcon = null;
me.SelectedGif = null;
break;
case MaterialIcons.MaterialIconType _:
me.SelectedInternIcon = null;
me.SelectedGif = null;
break;
case enumInternGif _:
me.SelectedInternIcon = null;
me.SelectedMaterialIcon = null;
break;
}
if (me.SelectedInternIcon is null && me.SelectedMaterialIcon is null && me.SelectedGif is null)
me.PillIcon.Visibility = Visibility.Collapsed;
else
me.PillIcon.Visibility = Visibility.Visible;
}
catch (Exception E)
{
LogException(E);
}
}
public enumInternIcons? SelectedInternIcon
{
get { return (enumInternIcons?)GetValue(SelectedInternIconProperty); }
set { SetValue(SelectedInternIconProperty, value); }
}
public static readonly DependencyProperty SelectedInternIconProperty =
DependencyProperty.Register("SelectedInternIcon", typeof(enumInternIcons?), typeof(SelectionPill), new PropertyMetadata(null, new PropertyChangedCallback(SelectedIconChanged)));
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(SelectionPill), new PropertyMetadata(null, new PropertyChangedCallback(SelectedIconChanged)));
public enumInternGif? SelectedGif
{
get { return (enumInternGif?)GetValue(SelectedGifProperty); }
set { SetValue(SelectedGifProperty, value); }
}
public static readonly DependencyProperty SelectedGifProperty =
DependencyProperty.Register("SelectedGif", typeof(enumInternGif?), typeof(SelectionPill), new PropertyMetadata(null, new PropertyChangedCallback(SelectedIconChanged)));
#endregion
private static List<SelectionPill> allPills = new List<SelectionPill>();
// Dependency Property für die Gruppenzugehörigkeit
public static readonly DependencyProperty GroupNameProperty =
DependencyProperty.Register("GroupName", typeof(string), typeof(SelectionPill), new PropertyMetadata(""));
public string GroupName
{
get { return (string)GetValue(GroupNameProperty); }
set { SetValue(GroupNameProperty, value); }
}
// Dependency Property für den Schalter "selectOne"
public static readonly DependencyProperty SelectOneProperty =
DependencyProperty.Register("SelectOne", typeof(bool), typeof(SelectionPill), new PropertyMetadata(false));
public bool SelectOne
{
get { return (bool)GetValue(SelectOneProperty); }
set { SetValue(SelectOneProperty, value); }
}
#region IsSelected
public event EventHandler IsSelectedChanged;
private static void OnIsSelectedChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
try
{
if (d is SelectionPill pill)
{
pill.IsSelectedChanged?.Invoke(pill, EventArgs.Empty);
}
}
catch (Exception E)
{
LogException(E);
}
}
public bool IsSelected
{
get { return (bool)GetValue(IsSelectedProperty); }
set { SetValue(IsSelectedProperty, value); }
}
public static readonly DependencyProperty IsSelectedProperty =
DependencyProperty.Register("IsSelected", typeof(bool), typeof(SelectionPill), new PropertyMetadata(false, new PropertyChangedCallback(OnIsSelectedChanged)));
#endregion
public SelectionPill()
{
InitializeComponent();
allPills.Add(this);
}
public static void RemovePill(SelectionPill pill)
{
if (allPills.Contains(pill))
{
allPills.Remove(pill);
}
}
private void DeselectOtherPillsInGroup()
{
if (!string.IsNullOrEmpty(GroupName) && SelectOne && IsSelected)
{
var pillsInGroup = allPills.Where(pill => pill.GroupName == this.GroupName && pill != this);
foreach (var pill in pillsInGroup)
{
pill.IsSelected = false;
}
}
}
#region PillBorder_Click
private void PillBorder_Click()
{
if (!SelectOne || string.IsNullOrEmpty(GroupName))
{
IsSelected = !IsSelected;
}
else if (!IsSelected) // Nur den Zustand ändern und andere deselektieren, wenn nicht bereits ausgewählt
{
IsSelected = true;
DeselectOtherPillsInGroup(); // Deselect other pills in the group
}
var _h = Dispatcher.Invoke(async () =>
{
DoubleAnimation doubleAnimation = new DoubleAnimation(0.7, TimeSpan.FromSeconds(0.1)) { AutoReverse = true };
PillBorder.BeginAnimation(OpacityProperty, doubleAnimation);
await Task.Delay(205);
PillBorder.BeginAnimation(OpacityProperty, null);
});
}
private void PillBorder_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
PillBorder_Click();
}
private void PillBorder_TouchDown(object sender, TouchEventArgs e)
{
PillBorder_Click();
}
#endregion
}
}