diff --git a/Elwig/Helpers/Utils.cs b/Elwig/Helpers/Utils.cs index fd2c5f1..8b60b0c 100644 --- a/Elwig/Helpers/Utils.cs +++ b/Elwig/Helpers/Utils.cs @@ -65,31 +65,31 @@ namespace Elwig.Helpers { return client; } - public static void SetInputChanged(Control input) { - var brush = Brushes.Orange; + private static void SetControlBrush(Control input, Brush brush) { if (input is ComboBox cb) { var border = GetComboBoxBorder(cb); - if (border != null) - border.BorderBrush = brush; + if (border != null) border.BorderBrush = brush; + } else if (input is Xceed.Wpf.Toolkit.CheckComboBox ccb) { + var border = GetComboBoxBorder(ccb); + if (border != null) border.BorderBrush = brush; } else { input.BorderBrush = brush; } } + public static void SetInputChanged(Control input) { + SetControlBrush(input, Brushes.Orange); + } + public static void SetInputInvalid(Control input) { - var brush = Brushes.Red; - if (input is ComboBox cb) { - var border = GetComboBoxBorder(cb); - if (border != null) - border.BorderBrush = brush; - } else { - input.BorderBrush = brush; - } + SetControlBrush(input, Brushes.Red); } public static void ClearInputState(Control input) { if (input is ComboBox cb) { GetComboBoxBorder(cb)?.ClearValue(Border.BorderBrushProperty); + } else if (input is Xceed.Wpf.Toolkit.CheckComboBox ccb) { + GetComboBoxBorder(ccb)?.ClearValue(Border.BorderBrushProperty); } else { input.ClearValue(Control.BorderBrushProperty); } @@ -100,6 +100,11 @@ namespace Elwig.Helpers { return toggleButton?.Template.FindName("templateRoot", toggleButton) as Border; } + private static Border? GetComboBoxBorder(Xceed.Wpf.Toolkit.CheckComboBox ccb) { + var toggleButton = ccb.Template.FindName("toggleButton", ccb) as ToggleButton; + return toggleButton?.Template.FindName("templateRoot", toggleButton) as Border; + } + public static IEnumerable FindAllChildren(DependencyObject depObj) where T : DependencyObject { if (depObj == null) yield return (T)Enumerable.Empty(); diff --git a/Elwig/Windows/AdministrationWindow.cs b/Elwig/Windows/AdministrationWindow.cs index 1ba6652..176e4cb 100644 --- a/Elwig/Windows/AdministrationWindow.cs +++ b/Elwig/Windows/AdministrationWindow.cs @@ -107,7 +107,8 @@ namespace Elwig.Windows { Utils.ClearInputState(tb); foreach (var cb in ComboBoxInputs) Utils.ClearInputState(cb); - // TODO ComboCheckBox + foreach (var ccb in CheckComboBoxInputs) + Utils.ClearInputState(ccb); foreach (var cb in CheckBoxInputs) Utils.ClearInputState(cb); foreach (var rb in RadioButtonInputs) @@ -126,8 +127,10 @@ namespace Elwig.Windows { } protected void LockInputs() { - foreach (var tb in TextBoxInputs) + foreach (var tb in TextBoxInputs) { tb.IsReadOnly = true; + tb.Focusable = false; + } foreach (var cb in ComboBoxInputs) cb.IsEnabled = false; foreach (var ccb in CheckComboBoxInputs) @@ -139,8 +142,10 @@ namespace Elwig.Windows { } protected void UnlockInputs() { - foreach (var tb in TextBoxInputs) + foreach (var tb in TextBoxInputs) { tb.IsReadOnly = false; + tb.Focusable = true; + } foreach (var cb in ComboBoxInputs) cb.IsEnabled = true; foreach (var ccb in CheckComboBoxInputs) @@ -160,7 +165,8 @@ namespace Elwig.Windows { OriginalValues[tb] = tb.Text; foreach (var cb in ComboBoxInputs) OriginalValues[cb] = cb.SelectedItem; - // TODO ComboCheckBox + foreach (var ccb in CheckComboBoxInputs) + OriginalValues[ccb] = ccb.SelectedItems.Cast().ToArray(); foreach (var cb in CheckBoxInputs) OriginalValues[cb] = (cb.IsChecked ?? false) ? bool.TrueString : null; foreach (var rb in RadioButtonInputs) @@ -180,6 +186,8 @@ namespace Elwig.Windows { tb.Text = ""; foreach (var cb in ComboBoxInputs) cb.SelectedItem = null; + foreach (var ccb in CheckComboBoxInputs) + ccb.SelectedItems.Clear(); foreach (var cb in CheckBoxInputs) cb.IsChecked = false; foreach (var rb in RadioButtonInputs) @@ -200,6 +208,8 @@ namespace Elwig.Windows { return OriginalValues[tb]?.ToString() != tb.Text; } else if (input is ComboBox sb) { return OriginalValues[sb] != sb.SelectedItem; + } else if (input is CheckComboBox ccb) { + return !ccb.SelectedItems.Cast().ToArray().SequenceEqual(((object[]?)OriginalValues[ccb]) ?? Array.Empty()); } else if (input is CheckBox cb) { return (OriginalValues[cb] != null) != (cb.IsChecked ?? false); } else if (input is RadioButton rb) {