diff --git a/Elwig/Controls/IntegerUpDown.cs b/Elwig/Controls/IntegerUpDown.cs
new file mode 100644
index 0000000..523b740
--- /dev/null
+++ b/Elwig/Controls/IntegerUpDown.cs
@@ -0,0 +1,106 @@
+using System;
+using System.Linq;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Controls.Primitives;
+using System.Windows.Input;
+
+namespace Elwig.Controls {
+ public class IntegerUpDown : TextBox {
+
+ public static readonly DependencyProperty MinimumProperty = DependencyProperty.Register("Miminum", typeof(int?), typeof(IntegerUpDown), new FrameworkPropertyMetadata(null));
+ public int? Minimum {
+ get => (int?)GetValue(MinimumProperty);
+ set => SetValue(MinimumProperty, value);
+ }
+
+ public static readonly DependencyProperty MaximumProperty = DependencyProperty.Register("Maximum", typeof(int?), typeof(IntegerUpDown), new FrameworkPropertyMetadata(null));
+ public int? Maximum {
+ get => (int?)GetValue(MaximumProperty);
+ set => SetValue(MaximumProperty, value);
+ }
+
+ public int? Value {
+ get => int.TryParse(Text, out var res) ? res : null;
+ set => Text = $"{value}";
+ }
+
+ static IntegerUpDown() {
+ DefaultStyleKeyProperty.OverrideMetadata(typeof(IntegerUpDown), new FrameworkPropertyMetadata(typeof(IntegerUpDown)));
+ }
+
+ public IntegerUpDown() {
+ TextChanged += IntegerUpDown_TextChanged;
+ LostFocus += IntegerUpDown_LostFocus;
+ KeyUp += IntegerUpDown_KeyUp;
+ }
+
+ public override void OnApplyTemplate() {
+ var incButton = GetTemplateChild("IncrementButton") as RepeatButton;
+ var decButton = GetTemplateChild("DecrementButton") as RepeatButton;
+ incButton!.Click += IncrementButton_Click;
+ decButton!.Click += DecrementButton_Click;
+ base.OnApplyTemplate();
+ }
+
+ private void IntegerUpDown_TextChanged(object sender, TextChangedEventArgs evt) {
+ var idx = CaretIndex;
+ Text = new string(Text.Where(char.IsAsciiDigit).Take(4).ToArray());
+ CaretIndex = idx;
+ evt.Handled = !(Value >= Minimum && Value <= Maximum);
+ if (idx >= 4) {
+ if (Value < Minimum) {
+ Value = Minimum;
+ } else if (Value > Maximum) {
+ Value = Maximum;
+ }
+ CaretIndex = 4;
+ }
+ }
+
+ private void IntegerUpDown_LostFocus(object sender, RoutedEventArgs evt) {
+ if (Value < Minimum) {
+ Value = Minimum;
+ } else if (Value > Maximum) {
+ Value = Maximum;
+ }
+ }
+
+ private void IncrementButton_Click(object sender, RoutedEventArgs evt) {
+ Value = Math.Min((Value ?? 0) + 1, Maximum ?? int.MaxValue);
+ }
+
+ private void DecrementButton_Click(object sender, RoutedEventArgs evt) {
+ Value = Math.Max((Value ?? 0) - 1, Minimum ?? int.MinValue);
+ }
+
+ private void IntegerUpDown_KeyUp(object sender, KeyEventArgs evt) {
+ switch (evt.Key) {
+ case Key.Up:
+ case Key.Add:
+ case Key.OemPlus:
+ Value = Math.Min((Value ?? 0) + 1, Maximum ?? int.MaxValue);
+ evt.Handled = true;
+ CaretIndex = 4;
+ break;
+ case Key.Down:
+ case Key.Subtract:
+ case Key.OemMinus:
+ Value = Math.Max((Value ?? 0) - 1, Minimum ?? int.MinValue);
+ evt.Handled = true;
+ CaretIndex = 4;
+ break;
+ case Key.PageUp:
+ Value = Math.Min((Value ?? 0) + 10, Maximum ?? int.MaxValue);
+ evt.Handled = true;
+ CaretIndex = 4;
+ break;
+ case Key.PageDown:
+ Value = Math.Max((Value ?? 0) - 10, Minimum ?? int.MinValue);
+ evt.Handled = true;
+ CaretIndex = 4;
+ break;
+ }
+ }
+ }
+}
diff --git a/Elwig/Controls/IntegerUpDown.xaml b/Elwig/Controls/IntegerUpDown.xaml
new file mode 100644
index 0000000..bda2c84
--- /dev/null
+++ b/Elwig/Controls/IntegerUpDown.xaml
@@ -0,0 +1,52 @@
+
+
+
diff --git a/Elwig/Themes/Generic.xaml b/Elwig/Themes/Generic.xaml
index 061707b..4b3354d 100644
--- a/Elwig/Themes/Generic.xaml
+++ b/Elwig/Themes/Generic.xaml
@@ -1,5 +1,6 @@
+
diff --git a/Elwig/Windows/DeliveryAdminWindow.xaml b/Elwig/Windows/DeliveryAdminWindow.xaml
index 25427f6..a30994c 100644
--- a/Elwig/Windows/DeliveryAdminWindow.xaml
+++ b/Elwig/Windows/DeliveryAdminWindow.xaml
@@ -175,9 +175,9 @@
-
+
diff --git a/Elwig/Windows/DeliveryAdminWindow.xaml.cs b/Elwig/Windows/DeliveryAdminWindow.xaml.cs
index 1a7eca1..058ccd2 100644
--- a/Elwig/Windows/DeliveryAdminWindow.xaml.cs
+++ b/Elwig/Windows/DeliveryAdminWindow.xaml.cs
@@ -1344,8 +1344,8 @@ namespace Elwig.Windows {
await RefreshDeliveryListQuery(true);
}
- private async void SeasonInput_ValueChanged(object sender, RoutedEventArgs evt) {
- if (SeasonInput.Value == null) return;
+ private async void SeasonInput_TextChanged(object sender, TextChangedEventArgs evt) {
+ if (SeasonInput.Value == null || TodayOnlyInput == null || AllSeasonsInput == null) return;
TodayOnlyInput.IsChecked = false;
AllSeasonsInput.IsChecked = false;
await RefreshDeliveryListQuery();
diff --git a/Elwig/Windows/MainWindow.xaml b/Elwig/Windows/MainWindow.xaml
index 4d0af8e..7fec366 100644
--- a/Elwig/Windows/MainWindow.xaml
+++ b/Elwig/Windows/MainWindow.xaml
@@ -3,7 +3,7 @@
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Elwig.Windows"
- xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
+ xmlns:ctrl="clr-namespace:Elwig.Controls"
Title="Elwig" Height="390" Width="520" ResizeMode="CanMinimize"
Loaded="Window_Loaded" Closing="Window_Closing">
@@ -71,9 +71,9 @@
-
+ TextChanged="SeasonInput_TextChanged"/>