Files
C4IT-F4SD-Client/FasdDesktopUi/Basics/UserControls/QuickActionSelector.xaml.cs
2025-11-11 11:03:42 +01:00

235 lines
7.3 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
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.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using C4IT.FASD.Base;
using C4IT.Logging;
using F4SD_AdaptableIcon.Enums;
using FasdDesktopUi.Basics.Models;
using static C4IT.Logging.cLogManager;
namespace FasdDesktopUi.Basics.UserControls
{
public partial class QuickActionSelector : UserControl, IBlurInvoker
{
#region Properties
public Action CloseButtonClickedAction { get; set; }
public Action<bool> LockStatusChanged { get; set; }
#region IsLocked DependencyProperty
public bool IsLocked
{
get { return (bool)GetValue(IsLockedProperty); }
set { SetValue(IsLockedProperty, value); }
}
public static readonly DependencyProperty IsLockedProperty =
DependencyProperty.Register("IsLocked", typeof(bool), typeof(QuickActionSelector), new PropertyMetadata(new PropertyChangedCallback(HandleLockedChanged)));
private static void HandleLockedChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
try
{
if (!(d is QuickActionSelector _me))
{
return;
}
_me.CloseButton.IsEnabled = _me.IsLocked ? false : true;
}
catch (Exception E)
{
LogException(E);
}
}
#endregion
#region QuickActionSelectorHeading DependencyProperty
public static readonly DependencyProperty QuickActionSelectorHeadingProperty =
DependencyProperty.Register("QuickActionSelectorHeading", typeof(string), typeof(QuickActionSelector), new PropertyMetadata(null));
public string QuickActionSelectorHeading
{
get { return (string)GetValue(QuickActionSelectorHeadingProperty); }
set { SetValue(QuickActionSelectorHeadingProperty, value); }
}
#endregion
#region QuickActionList DependencyProperty
public static readonly DependencyProperty QuickActionListProperty =
DependencyProperty.Register("QuickActionList", typeof(List<cMenuDataBase>), typeof(QuickActionSelector), new PropertyMetadata(null));
public List<cMenuDataBase> QuickActionList
{
get { return (List<cMenuDataBase>)GetValue(QuickActionListProperty); }
set { SetValue(QuickActionListProperty, value); }
}
#endregion
#region TempQuickActionSelectorHeading Property
public string TempQuickActionSelectorHeading { get; set; }
#endregion
#region TempQuickActionList DependencyProperty
public static readonly DependencyProperty TempQuickActionListProperty =
DependencyProperty.Register("TempQuickActionList", typeof(List<cMenuDataBase>), typeof(QuickActionSelector), new PropertyMetadata(null));
public List<cMenuDataBase> TempQuickActionList
{
get { return (List<cMenuDataBase>)GetValue(TempQuickActionListProperty); }
set { SetValue(TempQuickActionListProperty, value); }
}
#endregion
#endregion
public QuickActionSelector()
{
InitializeComponent();
}
public void BlurInvoker_IsActiveChanged(object sender, DependencyPropertyChangedEventArgs e)
{
BlurInvoker.InvokeVisibilityChanged(this, new EventArgs());
}
public bool BlurInvoker_IsActive => IsVisible;
#region LockButton_Click
private void LockButton_MouseLeave(object sender, MouseEventArgs e)
{
try
{
(sender as AdaptableIcon.AdaptableIcon).ClearValue(AdaptableIcon.AdaptableIcon.PrimaryIconColorProperty);
(sender as AdaptableIcon.AdaptableIcon).ClearValue(AdaptableIcon.AdaptableIcon.SelectedInternIconProperty);
(sender as AdaptableIcon.AdaptableIcon).ClearValue(AdaptableIcon.AdaptableIcon.BorderPaddingProperty);
}
catch (Exception E)
{
LogException(E);
}
}
private void LockButton_Click(object sender)
{
try
{
if (sender is AdaptableIcon.AdaptableIcon senderIcon)
{
if (IsLocked)
{
senderIcon.SetResourceReference(AdaptableIcon.AdaptableIcon.PrimaryIconColorProperty, "Color.SoftContrast");
senderIcon.SelectedInternIcon = enumInternIcons.lock_open;
}
else
{
senderIcon.SetResourceReference(AdaptableIcon.AdaptableIcon.PrimaryIconColorProperty, "Color.Menu.Icon");
senderIcon.SelectedInternIcon = enumInternIcons.lock_closed;
}
senderIcon.BorderPadding = new Thickness(5.5);
}
IsLocked = !IsLocked;
LockStatusChanged?.Invoke(IsLocked);
}
catch (Exception E)
{
LogException(E);
}
}
private void LockButton_TouchDown(object sender, TouchEventArgs e)
{
LockButton_Click(sender);
}
private void LockButton_MouseUp(object sender, MouseButtonEventArgs e)
{
LockButton_Click(sender);
}
#endregion
#region CloseButton
private void CloseButton_Click()
{
try
{
if (IsLocked)
return;
QuickActionList = null;
Visibility = Visibility.Collapsed;
if (CloseButtonClickedAction != null)
CloseButtonClickedAction.Invoke();
}
catch (Exception E)
{
LogException(E);
}
}
private void CloseButton_TouchDown(object sender, TouchEventArgs e)
{
CloseButton_Click();
}
private void CloseButton_MouseUp(object sender, MouseButtonEventArgs e)
{
CloseButton_Click();
}
#endregion
#region BackButton
private void BackButton_Click()
{
QuickActionSelectorHeading = TempQuickActionSelectorHeading;
TempQuickActionSelectorHeading = null;
QuickActionList = TempQuickActionList;
TempQuickActionList = null;
}
private void BackButton_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
BackButton_Click();
}
private void BackButton_TouchDown(object sender, TouchEventArgs e)
{
BackButton_Click();
}
#endregion
}
}