Compare commits

..

6 Commits

Author SHA1 Message Date
lorenz.stechauner 601ac548fe Tests: Update dependencies
Test / Run tests (push) Successful in 2m7s
2024-06-03 18:30:42 +02:00
lorenz.stechauner 4e477c38e0 Elwig: Update dependencies 2024-06-03 18:30:34 +02:00
lorenz.stechauner 46fc0db6ba IntegerUpDown: Fix xml spacing
Test / Run tests (push) Successful in 1m41s
2024-06-03 17:13:37 +02:00
lorenz.stechauner a531e948c1 [#37] IntegerUpDown: Add middle line
Test / Run tests (push) Successful in 1m42s
2024-06-03 17:07:40 +02:00
lorenz.stechauner cc4ec6c5db [#37] Controls: Implement IntegerUpDown
Test / Run tests (push) Successful in 2m28s
2024-06-03 16:59:45 +02:00
lorenz.stechauner ff375e3caf curl: Add '--fail' argument to return a meaningful status code
Test / Run tests (push) Successful in 1m54s
2024-05-15 00:24:42 +02:00
13 changed files with 182 additions and 22 deletions
+106
View File
@@ -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;
}
}
}
}
+52
View File
@@ -0,0 +1,52 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:ctrl="clr-namespace:Elwig.Controls">
<Style TargetType="ctrl:IntegerUpDown" BasedOn="{StaticResource {x:Type TextBox}}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ctrl:IntegerUpDown">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="18"/>
</Grid.ColumnDefinitions>
<Border x:Name="Border" BorderThickness="1,1,0,1"
BorderBrush="{Binding Path=BorderBrush, RelativeSource={RelativeSource TemplatedParent}, Mode=OneWay}"
SnapsToDevicePixels="True" Grid.RowSpan="2">
<ScrollViewer x:Name="PART_ContentHost" VerticalAlignment="Center"/>
</Border>
<RepeatButton x:Name="IncrementButton" Padding="0" Height="Auto" Width="Auto" BorderThickness="1,1,1,1"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.Row="0" Grid.Column="1">
<Path x:Name="IconIncrement" Data="M 0,4 L 4,0 L 8,4 Z" Fill="#FF444444"
HorizontalAlignment="Center" VerticalAlignment="Center"/>
</RepeatButton>
<RepeatButton x:Name="DecrementButton" Padding="0" Height="Auto" Width="Auto" BorderThickness="1,0,1,1"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.Row="1" Grid.Column="1">
<Path x:Name="IconDecrement" Data="M 0,0 L 4,4 L 8,0 Z" Fill="#FF444444"
HorizontalAlignment="Center" VerticalAlignment="Center"/>
</RepeatButton>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter TargetName="Border" Property="BorderBrush" Value="LightGray"/>
<Setter TargetName="IconIncrement" Property="Fill" Value="#FF888888"/>
<Setter TargetName="IconDecrement" Property="Fill" Value="#FF888888"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="TextAlignment" Value="Right"/>
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Foreground" Value="Gray"/>
</Trigger>
</Style.Triggers>
</Style>
</ResourceDictionary>
+6 -6
View File
@@ -27,15 +27,15 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="Extended.Wpf.Toolkit" Version="4.6.0" /> <PackageReference Include="Extended.Wpf.Toolkit" Version="4.6.0" />
<PackageReference Include="LinqKit" Version="1.2.5" /> <PackageReference Include="LinqKit" Version="1.2.5" />
<PackageReference Include="MailKit" Version="4.5.0" /> <PackageReference Include="MailKit" Version="4.6.0" />
<PackageReference Include="Microsoft.AspNetCore.Razor.Language" Version="6.0.29" /> <PackageReference Include="Microsoft.AspNetCore.Razor.Language" Version="6.0.31" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Proxies" Version="8.0.4" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Proxies" Version="8.0.6" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="8.0.4" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="8.0.6" />
<PackageReference Include="Microsoft.Extensions.Configuration.Ini" Version="8.0.0" /> <PackageReference Include="Microsoft.Extensions.Configuration.Ini" Version="8.0.0" />
<PackageReference Include="Microsoft.Web.WebView2" Version="1.0.2478.35" /> <PackageReference Include="Microsoft.Web.WebView2" Version="1.0.2535.41" />
<PackageReference Include="NJsonSchema" Version="11.0.0" /> <PackageReference Include="NJsonSchema" Version="11.0.0" />
<PackageReference Include="RazorLight" Version="2.3.1" /> <PackageReference Include="RazorLight" Version="2.3.1" />
<PackageReference Include="ScottPlot.WPF" Version="5.0.31" /> <PackageReference Include="ScottPlot.WPF" Version="5.0.34" />
<PackageReference Include="System.IO.Ports" Version="8.0.0" /> <PackageReference Include="System.IO.Ports" Version="8.0.0" />
<PackageReference Include="System.Text.Encoding.CodePages" Version="8.0.0" /> <PackageReference Include="System.Text.Encoding.CodePages" Version="8.0.0" />
</ItemGroup> </ItemGroup>
+1
View File
@@ -1,5 +1,6 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"> <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<ResourceDictionary.MergedDictionaries> <ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Elwig;component/Controls/UnitTextBox.xaml"/> <ResourceDictionary Source="/Elwig;component/Controls/UnitTextBox.xaml"/>
<ResourceDictionary Source="/Elwig;component/Controls/IntegerUpDown.xaml"/>
</ResourceDictionary.MergedDictionaries> </ResourceDictionary.MergedDictionaries>
</ResourceDictionary> </ResourceDictionary>
+3 -3
View File
@@ -175,9 +175,9 @@
</TextBlock> </TextBlock>
</TextBox.ToolTip> </TextBox.ToolTip>
</TextBox> </TextBox>
<xctk:IntegerUpDown x:Name="SeasonInput" Grid.ColumnSpan="3" Height="25" Width="56" FontSize="14" Minimum="1000" Maximum="9999" <ctrl:IntegerUpDown x:Name="SeasonInput" Grid.ColumnSpan="3" Height="25" Width="56" FontSize="14" Minimum="1900" Maximum="9999"
Margin="0,10,100,0" VerticalAlignment="Top" HorizontalAlignment="Right" Margin="0,10,100,0" VerticalAlignment="Top" HorizontalAlignment="Right" Text="2020"
ValueChanged="SeasonInput_ValueChanged"/> TextChanged="SeasonInput_TextChanged"/>
<CheckBox x:Name="TodayOnlyInput" Content="Nur heute" <CheckBox x:Name="TodayOnlyInput" Content="Nur heute"
HorizontalAlignment="Right" Margin="0,7,18,0" VerticalAlignment="Top" Grid.Column="1" Grid.ColumnSpan="2" HorizontalAlignment="Right" Margin="0,7,18,0" VerticalAlignment="Top" Grid.Column="1" Grid.ColumnSpan="2"
Checked="TodayOnlyInput_Changed" Unchecked="TodayOnlyInput_Changed"/> Checked="TodayOnlyInput_Changed" Unchecked="TodayOnlyInput_Changed"/>
+2 -2
View File
@@ -1344,8 +1344,8 @@ namespace Elwig.Windows {
await RefreshDeliveryListQuery(true); await RefreshDeliveryListQuery(true);
} }
private async void SeasonInput_ValueChanged(object sender, RoutedEventArgs evt) { private async void SeasonInput_TextChanged(object sender, TextChangedEventArgs evt) {
if (SeasonInput.Value == null) return; if (SeasonInput.Value == null || TodayOnlyInput == null || AllSeasonsInput == null) return;
TodayOnlyInput.IsChecked = false; TodayOnlyInput.IsChecked = false;
AllSeasonsInput.IsChecked = false; AllSeasonsInput.IsChecked = false;
await RefreshDeliveryListQuery(); await RefreshDeliveryListQuery();
+3 -3
View File
@@ -3,7 +3,7 @@
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Elwig.Windows" 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" Title="Elwig" Height="390" Width="520" ResizeMode="CanMinimize"
Loaded="Window_Loaded" Closing="Window_Closing"> Loaded="Window_Loaded" Closing="Window_Closing">
<Window.Resources> <Window.Resources>
@@ -71,9 +71,9 @@
<Grid> <Grid>
<Border BorderBrush="LightGray" BorderThickness="1"/> <Border BorderBrush="LightGray" BorderThickness="1"/>
<Label Content="Saison:" Margin="0,10,100,0" VerticalAlignment="Top" HorizontalAlignment="Center" Padding="2,4,2,4" Height="25"/> <Label Content="Saison:" Margin="0,10,100,0" VerticalAlignment="Top" HorizontalAlignment="Center" Padding="2,4,2,4" Height="25"/>
<xctk:IntegerUpDown Name="SeasonInput" Height="25" Width="56" FontSize="14" Minimum="1000" Maximum="9999" <ctrl:IntegerUpDown x:Name="SeasonInput" Height="25" Width="56" FontSize="14" Minimum="1900" Maximum="9999"
Margin="0,10,0,0" VerticalAlignment="Top" HorizontalAlignment="Center" Margin="0,10,0,0" VerticalAlignment="Top" HorizontalAlignment="Center"
ValueChanged="SeasonInput_ValueChanged"/> TextChanged="SeasonInput_TextChanged"/>
<Button x:Name="DeliveryConfirmationButton" Content="Anlieferungsbestätigung" <Button x:Name="DeliveryConfirmationButton" Content="Anlieferungsbestätigung"
Click="DeliveryConfirmationButton_Click" Click="DeliveryConfirmationButton_Click"
+3 -2
View File
@@ -14,6 +14,7 @@ using System.Linq;
using System.Reflection; using System.Reflection;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows; using System.Windows;
using System.Windows.Controls;
using System.Windows.Input; using System.Windows.Input;
namespace Elwig.Windows { namespace Elwig.Windows {
@@ -147,7 +148,7 @@ namespace Elwig.Windows {
} }
protected override Task OnRenewContext(AppDbContext ctx) { protected override Task OnRenewContext(AppDbContext ctx) {
SeasonInput_ValueChanged(null, null); SeasonInput_TextChanged(null, null);
return Task.CompletedTask; return Task.CompletedTask;
} }
@@ -159,7 +160,7 @@ namespace Elwig.Windows {
Height = 390; Height = 390;
} }
private async void SeasonInput_ValueChanged(object? sender, RoutedEventArgs? evt) { private async void SeasonInput_TextChanged(object? sender, TextChangedEventArgs? evt) {
using var ctx = new AppDbContext(); using var ctx = new AppDbContext();
var s0 = await ctx.Seasons.FindAsync(SeasonInput.Value); var s0 = await ctx.Seasons.FindAsync(SeasonInput.Value);
var valid = (s0 != null); var valid = (s0 != null);
+1 -1
View File
@@ -1,5 +1,5 @@
::mkdir "C:\Program Files\Elwig" ::mkdir "C:\Program Files\Elwig"
::curl -s -L "https://github.com/emendelson/pdftoprinter/raw/main/PDFtoPrinter.exe" -z "C:\Program Files\Elwig\PDFtoPrinter.exe" -o "C:\Program Files\Elwig\PDFtoPrinter.exe" ::curl --fail -s -L "https://github.com/emendelson/pdftoprinter/raw/main/PDFtoPrinter.exe" -z "C:\Program Files\Elwig\PDFtoPrinter.exe" -o "C:\Program Files\Elwig\PDFtoPrinter.exe"
mkdir "C:\ProgramData\Elwig\resources" mkdir "C:\ProgramData\Elwig\resources"
copy /b /y Documents\*.css "C:\ProgramData\Elwig\resources" copy /b /y Documents\*.css "C:\ProgramData\Elwig\resources"
copy /b /y Documents\*.cshtml "C:\ProgramData\Elwig\resources" copy /b /y Documents\*.cshtml "C:\ProgramData\Elwig\resources"
+1 -1
View File
@@ -25,7 +25,7 @@
</Task> </Task>
</UsingTask> </UsingTask>
<Target Name="CustomBeforeBuild" BeforeTargets="BeforeBuild"> <Target Name="CustomBeforeBuild" BeforeTargets="BeforeBuild">
<Exec Command="curl -s -L &quot;https://github.com/emendelson/pdftoprinter/raw/main/PDFtoPrinter.exe&quot; -z &quot;$(ProjectDir)\Files\PDFtoPrinter.exe&quot; -o &quot;$(ProjectDir)\Files\PDFtoPrinter.exe&quot;" /> <Exec Command="curl --fail -s -L &quot;https://github.com/emendelson/pdftoprinter/raw/main/PDFtoPrinter.exe&quot; -z &quot;$(ProjectDir)\Files\PDFtoPrinter.exe&quot; -o &quot;$(ProjectDir)\Files\PDFtoPrinter.exe&quot;" />
<Exec Command="dotnet publish &quot;$(ProjectDir)\..\Elwig\Elwig.csproj&quot; &quot;/p:PublishProfile=$(ProjectDir)\..\Elwig\Properties\PublishProfiles\FolderProfile.pubxml&quot;" /> <Exec Command="dotnet publish &quot;$(ProjectDir)\..\Elwig\Elwig.csproj&quot; &quot;/p:PublishProfile=$(ProjectDir)\..\Elwig\Properties\PublishProfiles\FolderProfile.pubxml&quot;" />
<GetFileVersion AssemblyPath="..\Elwig\bin\Publish\Elwig.exe"> <GetFileVersion AssemblyPath="..\Elwig\bin\Publish\Elwig.exe">
<Output TaskParameter="Version" PropertyName="ElwigFileVersion" /> <Output TaskParameter="Version" PropertyName="ElwigFileVersion" />
+2 -2
View File
@@ -5,8 +5,8 @@
<Cultures>de-AT</Cultures> <Cultures>de-AT</Cultures>
</PropertyGroup> </PropertyGroup>
<Target Name="CustomBeforeBuild" BeforeTargets="BeforeBuild"> <Target Name="CustomBeforeBuild" BeforeTargets="BeforeBuild">
<Exec Command="curl -s -L &quot;https://go.microsoft.com/fwlink/p/?LinkId=2124703&quot; -z &quot;$(ProjectDir)\Files\MicrosoftEdgeWebview2Setup.exe&quot; -o &quot;$(ProjectDir)\Files\MicrosoftEdgeWebview2Setup.exe&quot;" /> <Exec Command="curl --fail -s -L &quot;https://go.microsoft.com/fwlink/p/?LinkId=2124703&quot; -z &quot;$(ProjectDir)\Files\MicrosoftEdgeWebview2Setup.exe&quot; -o &quot;$(ProjectDir)\Files\MicrosoftEdgeWebview2Setup.exe&quot;" />
<Exec Command="curl -s -L &quot;https://aka.ms/vs/17/release/vc_redist.x86.exe&quot; -z &quot;$(ProjectDir)\Files\VC_redist.x86.exe&quot; -o &quot;$(ProjectDir)\Files\VC_redist.x86.exe&quot;" /> <Exec Command="curl --fail -s -L &quot;https://aka.ms/vs/17/release/vc_redist.x86.exe&quot; -z &quot;$(ProjectDir)\Files\VC_redist.x86.exe&quot; -o &quot;$(ProjectDir)\Files\VC_redist.x86.exe&quot;" />
<PropertyGroup> <PropertyGroup>
<DefineConstants>ElwigProjectDir=..\Elwig</DefineConstants> <DefineConstants>ElwigProjectDir=..\Elwig</DefineConstants>
</PropertyGroup> </PropertyGroup>
+1 -1
View File
@@ -19,7 +19,7 @@
</Target> </Target>
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.9.0" /> <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.10.0" />
<PackageReference Include="NReco.PdfRenderer" Version="1.5.3" /> <PackageReference Include="NReco.PdfRenderer" Version="1.5.3" />
<PackageReference Include="NUnit" Version="4.1.0" /> <PackageReference Include="NUnit" Version="4.1.0" />
<PackageReference Include="NUnit3TestAdapter" Version="4.5.0" /> <PackageReference Include="NUnit3TestAdapter" Version="4.5.0" />
+1 -1
View File
@@ -1 +1 @@
curl -s -L "https://elwig.at/files/create.sql?v=19" -u "elwig:ganzGeheim123!" -o "Resources\Sql\Create.sql" curl --fail -s -L "https://elwig.at/files/create.sql?v=19" -u "elwig:ganzGeheim123!" -o "Resources\Sql\Create.sql"