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,182 @@
using FasdDesktopUi.Basics.Models;
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 static C4IT.Logging.cLogManager;
namespace FasdDesktopUi.Basics.UserControls
{
public partial class EditWidgetValueControl : UserControl, IFocusInvoker
{
#region Properties and fields
private object originalValue;
private bool isValueChanged = false;
private Action setFocus;
public int? ParentIndex { get; set; }
public UIElement ParentElement { get; set; }
#region EditableValueInformation
public cEditableValueInformationBase EditableValueInformation
{
get { return (cEditableValueInformationBase)GetValue(EditableValueInformationProperty); }
set { SetValue(EditableValueInformationProperty, value); }
}
public static readonly DependencyProperty EditableValueInformationProperty =
DependencyProperty.Register("EditableValueInformation", typeof(cEditableValueInformationBase), typeof(EditWidgetValueControl), new PropertyMetadata(null, new PropertyChangedCallback(EditableValueChanged)));
private static void EditableValueChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
try
{
if (!(d is EditWidgetValueControl _me))
return;
_me.originalValue = _me.EditableValueInformation.CurrentValue;
_me.UpdateEditControlBorder();
}
catch (Exception E)
{
LogException(E);
}
}
#endregion
#endregion
public EditWidgetValueControl()
{
InitializeComponent();
}
private void UpdateEditControlBorder()
{
try
{
switch (EditableValueInformation)
{
case cEditValueInformationSelection editSelectionInformation:
{
if (editSelectionInformation.SelectionValues is null || editSelectionInformation.SelectionValues?.Count <= 0)
return;
ComboBox editComboBox = new ComboBox();
foreach (var listValue in editSelectionInformation.SelectionValues)
{
ComboBoxItem tempComboBoxItem = new ComboBoxItem() { Content = listValue.Value, Tag = listValue.Key };
editComboBox.Items.Add(tempComboBoxItem);
}
var currentSelectedValue = editSelectionInformation.SelectionValues.FirstOrDefault(value => value.Key?.Equals(editSelectionInformation.CurrentValue) ?? false);
editComboBox.SelectedIndex = editSelectionInformation.SelectionValues.IndexOf(currentSelectedValue);
editComboBox.DropDownOpened += (sender, e) => cFocusInvoker.InvokeGotFocus(this, e);
editComboBox.DropDownClosed += (sender, e) => cFocusInvoker.InvokeLostFocus(this, e);
editComboBox.SelectionChanged += (sender, e) =>
{
if (editComboBox.SelectedItem is FrameworkElement selectedElement)
UpdateEditIcon(selectedElement.Tag);
};
EditControlBorder.Child = editComboBox;
EditButton.Visibility = Visibility.Collapsed;
}
break;
case cEditValueInformationText editTextInformation:
{
if (editTextInformation.CurrentValue is null)
return;
TextBox editTextBox = new TextBox() { Text = editTextInformation.CurrentValue.ToString() };
editTextBox.TextChanged += (sender, e) => UpdateEditIcon(editTextBox.Text);
EditButton.Visibility = Visibility.Visible;
EditControlBorder.Child = editTextBox;
setFocus = (() =>
{
editTextBox.Focus();
editTextBox.Select(0, editTextBox.Text.Length);
});
}
break;
default:
break;
}
}
catch (Exception E)
{
LogException(E);
}
}
private void UpdateEditIcon(object newValue)
{
try
{
if (originalValue is null || newValue is null)
return;
isValueChanged = originalValue.ToString().Equals(newValue.ToString(), StringComparison.InvariantCultureIgnoreCase) is false;
if (isValueChanged)
EditButton.SelectedMaterialIcon = MaterialIcons.MaterialIconType.ic_undo;
else
EditButton.SelectedMaterialIcon = MaterialIcons.MaterialIconType.ic_edit;
}
catch (Exception E)
{
LogException(E);
}
}
#region Evetns
#region EditButton_Click
private void EditButton_Click()
{
if (isValueChanged)
{
UpdateEditControlBorder();
UpdateEditIcon(originalValue);
}
else
{
setFocus?.Invoke();
}
}
private void EditButton_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
EditButton_Click();
}
private void EditButton_TouchDown(object sender, TouchEventArgs e)
{
EditButton_Click();
}
#endregion
#endregion
}
}