From 69b9e8bcfe4852db0ce0769b929f02c06e2e3bf2 Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Mon, 24 Jun 2024 14:37:10 +0200 Subject: [PATCH] Added derived DateTimePicker to use custom keyboard parsing (numbers only) --- src/BreCalClient/DateTimePickerExt.cs | 44 +++++++++++++++++++ src/BreCalClient/EditShipcallControl.xaml | 10 ++--- .../EditTimesAgencyIncomingControl.xaml | 9 ++-- .../EditTimesAgencyOutgoingControl.xaml | 7 ++- .../EditTimesAgencyOutgoingControl.xaml.cs | 25 ++++++++--- .../EditTimesAgencyShiftingControl.xaml | 15 +++---- src/BreCalClient/EditTimesControl.xaml | 35 +++++++-------- .../EditTimesTerminalControl.xaml | 28 ++++++------ 8 files changed, 112 insertions(+), 61 deletions(-) create mode 100644 src/BreCalClient/DateTimePickerExt.cs diff --git a/src/BreCalClient/DateTimePickerExt.cs b/src/BreCalClient/DateTimePickerExt.cs new file mode 100644 index 0000000..e448d34 --- /dev/null +++ b/src/BreCalClient/DateTimePickerExt.cs @@ -0,0 +1,44 @@ +using System.Text.RegularExpressions; +using System.Windows.Input; +using Xceed.Wpf.Toolkit; + +namespace BreCalClient +{ + public class DateTimePickerExt : DateTimePicker + { + protected override void OnPreviewTextInput(TextCompositionEventArgs e) + { + base.OnPreviewTextInput(e); + + // Die vom Agenten "vorgeschlagene" Zeit könnte auch der Watermark sein? + + string text = this.Text + e.Text; + if (this.Template.FindName("PART_TextBox", this) is not WatermarkTextBox tb) return; + + if (Regex.IsMatch(text, @"^\d{3}")) + { + e.Handled = true; + tb.Text = Regex.Replace(text, @"(\d{2})(\d)", "$1.$2"); + tb.CaretIndex = tb.Text.Length; + } + else if (Regex.IsMatch(text, @"^(\d{2}\.\d{3})")) + { + e.Handled = true; + tb.Text = Regex.Replace(text, @"^(\d{2}\.\d{2})(\d)", "$1.$2"); + tb.CaretIndex = tb.Text.Length; + } + else if (Regex.IsMatch(text, @"^(\d{2}\.\d{2}\.\d{2} \d{3})")) + { + e.Handled = true; + tb.Text = Regex.Replace(text, @"(\d{2}\.\d{2}\.\d{2} \d{2})(\d)", "$1:$2"); + tb.CaretIndex = tb.Text.Length; + } + else if (Regex.IsMatch(text, @"^(\d{2}\.\d{2}\.\d{4} \d{3})")) + { + e.Handled = true; + tb.Text = Regex.Replace(text, @"(\d{2}\.\d{2}\.\d{4} \d{2})(\d)", "$1:$2"); + tb.CaretIndex = tb.Text.Length; + } + } + } +} diff --git a/src/BreCalClient/EditShipcallControl.xaml b/src/BreCalClient/EditShipcallControl.xaml index 6ebe2cf..71eac00 100644 --- a/src/BreCalClient/EditShipcallControl.xaml +++ b/src/BreCalClient/EditShipcallControl.xaml @@ -4,7 +4,7 @@ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:BreCalClient" - xmlns:p = "clr-namespace:BreCalClient.Resources" + xmlns:p = "clr-namespace:BreCalClient.Resources" xmlns:api="clr-namespace:BreCalClient.misc.Model" xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit" mc:Ignorable="d" Left="{local:SettingBinding W1Left}" Top="{local:SettingBinding W1Top}" @@ -46,7 +46,7 @@