diff --git a/Elwig/App.xaml b/Elwig/App.xaml index 29d0516..bba2122 100644 --- a/Elwig/App.xaml +++ b/Elwig/App.xaml @@ -2,11 +2,12 @@ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:Elwig" - xmlns:controls="clr-namespace:Elwig.Controls" + xmlns:ctrl="clr-namespace:Elwig.Controls" StartupUri="Windows\MainWindow.xaml" xmlns:ui="http://schemas.modernwpf.com/2019"> - + + diff --git a/Elwig/Controls/BoolToValueConverter.cs b/Elwig/Controls/BoolToValueConverter.cs index 127d761..82a1f92 100644 --- a/Elwig/Controls/BoolToValueConverter.cs +++ b/Elwig/Controls/BoolToValueConverter.cs @@ -1,16 +1,17 @@ using System; using System.Windows.Data; +using System.Globalization; namespace Elwig.Controls { public class BoolToValueConverter : IValueConverter { public T FalseValue { get; set; } public T TrueValue { get; set; } - public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { return (bool)value ? TrueValue : FalseValue; } - public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { return value?.Equals(TrueValue) ?? false; } } diff --git a/Elwig/Controls/UnitTextBox.xaml b/Elwig/Controls/UnitTextBox.xaml new file mode 100644 index 0000000..7691c1d --- /dev/null +++ b/Elwig/Controls/UnitTextBox.xaml @@ -0,0 +1,11 @@ + + + + + + diff --git a/Elwig/Controls/UnitTextBox.xaml.cs b/Elwig/Controls/UnitTextBox.xaml.cs new file mode 100644 index 0000000..a3093e6 --- /dev/null +++ b/Elwig/Controls/UnitTextBox.xaml.cs @@ -0,0 +1,31 @@ +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; + +namespace Elwig.Controls { + public partial class UnitTextBox : UserControl { + + public event TextChangedEventHandler? TextChanged; + + public static readonly DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(string), typeof(UnitTextBox)); + public string Text { + get => (string)GetValue(TextProperty); + set => SetValue(TextProperty, value); + } + + public static readonly DependencyProperty UnitProperty = DependencyProperty.Register("Unit", typeof(string), typeof(UnitTextBox)); + public string Unit { + get => (string)GetValue(UnitProperty); + set => SetValue(UnitProperty, value); + } + + public UnitTextBox() { + InitializeComponent(); + DataContext = this; + } + + private void TextBox_TextChanged(object sender, TextChangedEventArgs evt) { + if (TextChanged != null) TextChanged(sender, evt); + } + } +} diff --git a/Elwig/Controls/WidthToPaddingConverter.cs b/Elwig/Controls/WidthToPaddingConverter.cs new file mode 100644 index 0000000..b73d888 --- /dev/null +++ b/Elwig/Controls/WidthToPaddingConverter.cs @@ -0,0 +1,16 @@ +using System; +using System.Windows; +using System.Windows.Data; +using System.Globalization; + +namespace Elwig.Controls { + public class WidthToPaddingConverter : IValueConverter { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { + return new Thickness(2, 2, 4 + (double)value, 2); + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { + return ((Thickness)value).Right - 4; + } + } +} diff --git a/Elwig/Windows/AdministrationWindow.cs b/Elwig/Windows/AdministrationWindow.cs index 532b0d4..7a6eb05 100644 --- a/Elwig/Windows/AdministrationWindow.cs +++ b/Elwig/Windows/AdministrationWindow.cs @@ -1,3 +1,4 @@ +using Elwig.Controls; using Elwig.Helpers; using Elwig.Models; using System; @@ -105,6 +106,7 @@ namespace Elwig.Windows { } protected void ValidateInput(Control input, bool valid) { + if (input is UnitTextBox utbx) input = utbx.TextBox; Valid[input] = valid; } @@ -205,6 +207,7 @@ namespace Elwig.Windows { } protected void SetOriginalValue(Control input, object? value) { + if (input is UnitTextBox utbx) input = utbx.TextBox; OriginalValues[input] = value is bool b ? b.ToString() : value; if (InputHasChanged(input)) { ControlUtils.SetInputChanged(input); @@ -214,15 +217,18 @@ namespace Elwig.Windows { } protected void SetOriginalValue(Control input) { + if (input is UnitTextBox utbx) input = utbx.TextBox; SetOriginalValue(input, ControlUtils.GetInputValue(input)); } protected void UnsetOriginalValue(Control input) { + if (input is UnitTextBox utbx) input = utbx.TextBox; OriginalValues.Remove(input); ControlUtils.ClearInputState(input); } protected void SetDefaultValue(Control input, object? value) { + if (input is UnitTextBox utbx) input = utbx.TextBox; DefaultValues[input] = value is bool b ? b.ToString() : value; if (!InputHasChanged(input)) { if (InputIsNotDefault(input)) { @@ -234,10 +240,12 @@ namespace Elwig.Windows { } protected void SetDefaultValue(Control input) { + if (input is UnitTextBox utbx) input = utbx.TextBox; SetDefaultValue(input, ControlUtils.GetInputValue(input)); } protected void UnsetDefaultValue(Control input) { + if (input is UnitTextBox utbx) input = utbx.TextBox; DefaultValues.Remove(input); if (!InputHasChanged(input)) { ControlUtils.ClearInputState(input); @@ -261,10 +269,12 @@ namespace Elwig.Windows { protected bool IsValid => Valid.All(kv => kv.Value); protected bool GetInputValid(Control input) { + if (input is UnitTextBox utbx) input = utbx.TextBox; return Valid[input]; } protected bool InputHasChanged(Control input) { + if (input is UnitTextBox utbx) input = utbx.TextBox; if (!OriginalValues.ContainsKey(input)) { return false; } else if (input is TextBox tb) { @@ -283,6 +293,7 @@ namespace Elwig.Windows { } protected bool InputIsNotDefault(Control input) { + if (input is UnitTextBox utbx) input = utbx.TextBox; if (!DefaultValues.ContainsKey(input)) { return false; } else if (input is TextBox tb) { @@ -458,15 +469,15 @@ namespace Elwig.Windows { UpdateComboBox((Control)sender); } - protected void IntegerInput_TextChanged(object sender, RoutedEventArgs evt) { + protected void IntegerInput_TextChanged(object sender, TextChangedEventArgs evt) { InputTextChanged((TextBox)sender, Validator.CheckInteger); } - protected void DecimalInput_TextChanged(object sender, RoutedEventArgs evt) { + protected void DecimalInput_TextChanged(object sender, TextChangedEventArgs evt) { InputTextChanged((TextBox)sender, Validator.CheckDecimal); } - protected void PartialDateInput_TextChanged(object sender, RoutedEventArgs evt) { + protected void PartialDateInput_TextChanged(object sender, TextChangedEventArgs evt) { InputTextChanged((TextBox)sender, Validator.CheckPartialDate); } @@ -474,7 +485,7 @@ namespace Elwig.Windows { InputLostFocus((TextBox)sender, Validator.CheckPartialDate); } - protected void DateInput_TextChanged(object sender, RoutedEventArgs evt) { + protected void DateInput_TextChanged(object sender, TextChangedEventArgs evt) { InputTextChanged((TextBox)sender, Validator.CheckDate); } @@ -482,7 +493,7 @@ namespace Elwig.Windows { InputLostFocus((TextBox)sender, Validator.CheckDate); } - protected void TimeInput_TextChanged(object sender, RoutedEventArgs evt) { + protected void TimeInput_TextChanged(object sender, TextChangedEventArgs evt) { InputTextChanged((TextBox)sender, Validator.CheckTime); } @@ -490,7 +501,7 @@ namespace Elwig.Windows { InputLostFocus((TextBox)sender, Validator.CheckTime); } - protected void PlzInput_TextChanged(object sender, RoutedEventArgs evt) { + protected void PlzInput_TextChanged(object sender, TextChangedEventArgs evt) { var plz = (TextBox)sender; InputTextChanged(plz, Validator.CheckPlz); if ("PLZ".Equals(plz.Tag)) @@ -504,7 +515,7 @@ namespace Elwig.Windows { UpdatePlz(plz, GetPlzOrtInput(plz)); } - protected void EmailAddressInput_TextChanged(object sender, RoutedEventArgs evt) { + protected void EmailAddressInput_TextChanged(object sender, TextChangedEventArgs evt) { InputTextChanged((TextBox)sender, Validator.CheckEmailAddress); } @@ -512,7 +523,7 @@ namespace Elwig.Windows { InputLostFocus((TextBox)sender, Validator.CheckEmailAddress); } - protected void PhoneNrInput_TextChanged(object sender, RoutedEventArgs evt) { + protected void PhoneNrInput_TextChanged(object sender, TextChangedEventArgs evt) { InputTextChanged((TextBox)sender, Validator.CheckPhoneNumber); } @@ -520,7 +531,7 @@ namespace Elwig.Windows { InputLostFocus((TextBox)sender, Validator.CheckPhoneNumber); } - protected void IbanInput_TextChanged(object sender, RoutedEventArgs evt) { + protected void IbanInput_TextChanged(object sender, TextChangedEventArgs evt) { InputTextChanged((TextBox)sender, Validator.CheckIban); } @@ -528,7 +539,7 @@ namespace Elwig.Windows { InputLostFocus((TextBox)sender, Validator.CheckIban); } - protected void BicInput_TextChanged(object sender, RoutedEventArgs evt) { + protected void BicInput_TextChanged(object sender, TextChangedEventArgs evt) { InputTextChanged((TextBox)sender, Validator.CheckBic); } @@ -536,7 +547,7 @@ namespace Elwig.Windows { InputLostFocus((TextBox)sender, Validator.CheckBic); } - protected void UstIdNrInput_TextChanged(object sender, RoutedEventArgs evt) { + protected void UstIdNrInput_TextChanged(object sender, TextChangedEventArgs evt) { InputTextChanged((TextBox)sender, Validator.CheckUstIdNr); } @@ -544,7 +555,7 @@ namespace Elwig.Windows { InputLostFocus((TextBox)sender, Validator.CheckUstIdNr); } - protected void LfbisNrInput_TextChanged(object sender, RoutedEventArgs evt) { + protected void LfbisNrInput_TextChanged(object sender, TextChangedEventArgs evt) { InputTextChanged((TextBox)sender, Validator.CheckLfbisNr); } @@ -552,7 +563,7 @@ namespace Elwig.Windows { InputLostFocus((TextBox)sender, Validator.CheckLfbisNr); } - protected void UpperCaseInput_TextChanged(object sender, RoutedEventArgs evt) { + protected void UpperCaseInput_TextChanged(object sender, TextChangedEventArgs evt) { InputTextChanged((TextBox)sender, Validator.CheckUpperCase); } diff --git a/Elwig/Windows/AreaComAdminWindow.xaml b/Elwig/Windows/AreaComAdminWindow.xaml index 93bc3f5..bb17af2 100644 --- a/Elwig/Windows/AreaComAdminWindow.xaml +++ b/Elwig/Windows/AreaComAdminWindow.xaml @@ -4,6 +4,7 @@ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:Elwig.Windows" + xmlns:ctrl="clr-namespace:Elwig.Controls" mc:Ignorable="d" xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit" Title="Flächenbindungen - Elwig" Height="480" Width="1100" @@ -161,8 +162,8 @@ TextChanged="GstNrInput_TextChanged" LostFocus="GstNrInput_LostFocus"/>