inital
This commit is contained in:
222
FasdDesktopUi/Basics/UserControls/SelectionPill.xaml.cs
Normal file
222
FasdDesktopUi/Basics/UserControls/SelectionPill.xaml.cs
Normal 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
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user