8 Commits

Author SHA1 Message Date
mbabienco df11b65c05 Fix focusing and clipboard use 2026-04-08 12:54:35 +09:00
mbabienco fc963d88f7 Fix deprecations regarding Watermark 2026-04-08 12:54:28 +09:00
mbabienco 600ae58f25 Use OpenGL rendering 2026-04-08 12:54:18 +09:00
mbabienco 0783e0b544 Update packages to Avalonia 12 compatible 2026-04-08 12:54:11 +09:00
mbabienco d90cd1354f Bump version 2026-03-13 08:18:32 +09:00
mbabienco f4dd498d22 Shortcut to view settings dir 2026-03-13 08:14:50 +09:00
mbabienco cd71df8a8e Add yyyy.MM.dd to acceptable formats 2026-03-13 08:10:11 +09:00
mbabienco de621fe9dc Add another file name date parsing format
Also redid code so more formats would be easy
2026-03-13 08:05:11 +09:00
15 changed files with 71 additions and 28 deletions
+1 -1
View File
@@ -3,7 +3,7 @@
; Non-commercial use only ; Non-commercial use only
#define MyAppName "MayShow" #define MyAppName "MayShow"
#define MyAppVersion "1.4.1" #define MyAppVersion "1.4.2"
#define MyAppPublisher "Quickity Quack Productions" #define MyAppPublisher "Quickity Quack Productions"
#define MyAppExeName "MayShow.exe" #define MyAppExeName "MayShow.exe"
+1 -1
View File
@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
VERSION="1.4.1" VERSION="1.4.2"
SRC_DIR="src" # user ran script from main folder SRC_DIR="src" # user ran script from main folder
if [ ! -d "$SRC_DIR" ]; then if [ ! -d "$SRC_DIR" ]; then
SRC_DIR= "../src" # try SRC_DIR= "../src" # try
+1 -1
View File
@@ -1,5 +1,5 @@
<Project> <Project>
<PropertyGroup> <PropertyGroup>
<AvaloniaVersion>11.3.12</AvaloniaVersion> <AvaloniaVersion>12.0.0</AvaloniaVersion>
</PropertyGroup> </PropertyGroup>
</Project> </Project>
+1 -1
View File
@@ -3,7 +3,7 @@ namespace MayShow.Helpers;
class Constants class Constants
{ {
public static string AppVersion = "1.4.1"; public static string AppVersion = "1.4.2";
public static string[] AllowedFileExtensionPatterns = [ "*.png", "*.jpg", "*.jpeg", "*.gif", "*.bmp", "*.webp", "*.pdf", "*.heic", ]; public static string[] AllowedFileExtensionPatterns = [ "*.png", "*.jpg", "*.jpeg", "*.gif", "*.bmp", "*.webp", "*.pdf", "*.heic", ];
public static string[] AllowedFileExtensionsNoStar = [ "png", "jpg", "jpeg", "gif", "bmp", "webp", "pdf", "heic", ]; public static string[] AllowedFileExtensionsNoStar = [ "png", "jpg", "jpeg", "gif", "bmp", "webp", "pdf", "heic", ];
+22 -9
View File
@@ -1,10 +1,12 @@
using System; using System;
using System.Collections.Generic;
using System.Globalization; using System.Globalization;
using System.IO; using System.IO;
using System.Text.Json; using System.Text.Json;
using System.Text.Json.Serialization; using System.Text.Json.Serialization;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using Tmds.DBus.Protocol;
namespace MayShows.Helpers; namespace MayShows.Helpers;
@@ -23,16 +25,27 @@ class Utilities
public static DateOnly? CheckValidDateInString(string str) public static DateOnly? CheckValidDateInString(string str)
{ {
// https://stackoverflow.com/a/14918404/3938401 // https://stackoverflow.com/a/14918404/3938401
var rgx = new Regex(@"\d{4}-\d{2}-\d{2}"); // formats = regex format -> DateTime parsing format
var mat = rgx.Match(str); var formats = new Dictionary<string, string>
if (mat.Success)
{ {
var dtStr = mat.ToString(); {@"\d{4}-\d{2}-\d{2}", "yyyy-MM-dd"},
string[] formats = ["yyyy-MM-dd"]; {@"\d{4}.d{2}.d{2}", "yyyy.MM.dd"},
DateTime parsedDateTime; {@"\d{8}", "yyyyMMdd"}
var didWork = DateTime.TryParseExact(dtStr, formats, CultureInfo.InvariantCulture, };
DateTimeStyles.None, out parsedDateTime); foreach (var data in formats)
return didWork ? DateOnly.FromDateTime(parsedDateTime) : null; {
var rgx = new Regex(data.Key);
var mat = rgx.Match(str);
if (mat.Success)
{
var dtStr = mat.ToString();
var didWork = DateTime.TryParseExact(dtStr, [data.Value], CultureInfo.InvariantCulture,
DateTimeStyles.None, out var parsedDateTime);
if (didWork)
{
return DateOnly.FromDateTime(parsedDateTime);
}
}
} }
return null; return null;
} }
+7 -7
View File
@@ -12,7 +12,7 @@
<PublishTrimmed>true</PublishTrimmed> <PublishTrimmed>true</PublishTrimmed>
<PublishAot>true</PublishAot> <PublishAot>true</PublishAot>
<AssemblyName>MayShow</AssemblyName> <AssemblyName>MayShow</AssemblyName>
<AssemblyVersion>1.4.1</AssemblyVersion> <!-- Also update Constants version --> <AssemblyVersion>1.4.2</AssemblyVersion> <!-- Also update Constants version -->
<ApplicationIcon>MayShow-icon.ico</ApplicationIcon> <ApplicationIcon>MayShow-icon.ico</ApplicationIcon>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
@@ -53,15 +53,15 @@
<PackageReference Include="Avalonia.Themes.Fluent" Version="$(AvaloniaVersion)" /> <PackageReference Include="Avalonia.Themes.Fluent" Version="$(AvaloniaVersion)" />
<PackageReference Include="Avalonia.Fonts.Inter" Version="$(AvaloniaVersion)" /> <PackageReference Include="Avalonia.Fonts.Inter" Version="$(AvaloniaVersion)" />
<PackageReference Include="Avalonia.Controls.DataGrid" Version="$(AvaloniaVersion)" /> <PackageReference Include="Avalonia.Controls.DataGrid" Version="$(AvaloniaVersion)" />
<PackageReference Include="Avalonia.Diagnostics" Version="$(AvaloniaVersion)"> <!-- <PackageReference Include="Avalonia.Diagnostics" Version="$(AvaloniaVersion)">
<IncludeAssets Condition="'$(Configuration)' != 'Debug'">None</IncludeAssets> <IncludeAssets Condition="'$(Configuration)' != 'Debug'">None</IncludeAssets>
<PrivateAssets Condition="'$(Configuration)' != 'Debug'">All</PrivateAssets> <PrivateAssets Condition="'$(Configuration)' != 'Debug'">All</PrivateAssets>
</PackageReference> </PackageReference> -->
<PackageReference Include="PDFsharp-MigraDoc" Version="6.2.4" /> <PackageReference Include="PDFsharp-MigraDoc" Version="6.2.4" />
<PackageReference Include="Magick.NET-Q8-AnyCPU" Version="14.10.4" /> <PackageReference Include="Magick.NET-Q8-AnyCPU" Version="14.11.1" />
<PackageReference Include="Deadpikle.AvaloniaProgressRing" Version="0.10.11-preview20251127001" /> <PackageReference Include="Deadpikle.AvaloniaProgressRing" Version="0.11.0" />
<PackageReference Include="DialogHost.Avalonia" Version="0.10.4" /> <PackageReference Include="DialogHost.Avalonia" Version="0.11.1" />
<PackageReference Include="Xaml.Behaviors.Interactions.DragAndDrop.DataGrid" Version="11.3.9.5" /> <PackageReference Include="Xaml.Behaviors.Interactions.DragAndDrop.DataGrid" Version="12.0.0-rc1" />
<PackageReference Include="Docnet.Core" Version="2.6.0" /> <PackageReference Include="Docnet.Core" Version="2.6.0" />
<PackageReference Include="SixLabors.ImageSharp" Version="3.1.12" /> <PackageReference Include="SixLabors.ImageSharp" Version="3.1.12" />
</ItemGroup> </ItemGroup>
+12 -1
View File
@@ -17,5 +17,16 @@ class Program
=> AppBuilder.Configure<App>() => AppBuilder.Configure<App>()
.UsePlatformDetect() .UsePlatformDetect()
.WithInterFont() .WithInterFont()
.LogToTrace(); .LogToTrace()
.With(new AvaloniaNativePlatformOptions
{
// https://github.com/AvaloniaUI/Avalonia/issues/20971
RenderingMode =
[
// put OpenGL first, to have higher priority over Metal
AvaloniaNativeRenderingMode.OpenGl,
AvaloniaNativeRenderingMode.Metal,
AvaloniaNativeRenderingMode.Software
]
});
} }
+1
View File
@@ -29,6 +29,7 @@ using SixLabors.ImageSharp.Processing;
using System.Reflection.Metadata.Ecma335; using System.Reflection.Metadata.Ecma335;
using Docnet.Core.Readers; using Docnet.Core.Readers;
using MigraDoc.DocumentObjectModel.Visitors; using MigraDoc.DocumentObjectModel.Visitors;
using Avalonia.Input.Platform;
namespace MayShow.ViewModels; namespace MayShow.ViewModels;
+13
View File
@@ -18,6 +18,7 @@ using PdfSharp.Snippets.Font;
using MayShow.Interfaces; using MayShow.Interfaces;
using MayShow.Models; using MayShow.Models;
using MayShow.Helpers; using MayShow.Helpers;
using MayShows.Helpers;
namespace MayShow.ViewModels; namespace MayShow.ViewModels;
@@ -126,6 +127,18 @@ class SettingsViewModel: ChangeNotifier
} }
} }
public void OpenSettingsDir()
{
var topLevel = _topLevelGrabber?.GetTopLevel();
Console.WriteLine(Utilities.GetInternalDataPath());
var dirName = Utilities.GetInternalDataPath();
if (topLevel is not null && dirName != null)
{
var launcher = topLevel.Launcher;
launcher.LaunchUriAsync(new Uri(dirName));
}
}
public void Cancel() public void Cancel()
{ {
DialogHost.Close("DialogHost", null); DialogHost.Close("DialogHost", null);
+1 -1
View File
@@ -11,7 +11,7 @@
MaxWidth="450"> MaxWidth="450">
<StackPanel Orientation="Vertical" <StackPanel Orientation="Vertical"
Spacing="4"> Spacing="4">
<TextBlock Text="MayShow 1.4.1" <TextBlock Text="MayShow 1.4.2"
HorizontalAlignment="Center" HorizontalAlignment="Center"
TextWrapping="Wrap" TextWrapping="Wrap"
FontSize="18" FontSize="18"
+2 -2
View File
@@ -20,12 +20,12 @@
FontSize="16" FontSize="16"
FontWeight="Bold" /> FontWeight="Bold" />
<Label Content="Title" /> <Label Content="Title" />
<TextBox Watermark="Title" <TextBox PlaceholderText="Title"
Text="{Binding ClonedFile.Title}" Text="{Binding ClonedFile.Title}"
VerticalAlignment="Stretch" VerticalAlignment="Stretch"
TextWrapping="Wrap" /> TextWrapping="Wrap" />
<Label Content="Notes" /> <Label Content="Notes" />
<TextBox Watermark="Notes" <TextBox PlaceholderText="Notes"
Text="{Binding ClonedFile.Notes}" Text="{Binding ClonedFile.Notes}"
VerticalAlignment="Stretch" VerticalAlignment="Stretch"
AcceptsReturn="True" AcceptsReturn="True"
+2 -2
View File
@@ -50,7 +50,7 @@
IsVisible="{Binding IsTitleBoxVisible}" /> IsVisible="{Binding IsTitleBoxVisible}" />
<TextBox Text="{Binding ReportTitle}" <TextBox Text="{Binding ReportTitle}"
IsVisible="{Binding IsTitleBoxVisible}" IsVisible="{Binding IsTitleBoxVisible}"
Watermark="Receipts December 2024" PlaceholderText="Receipts December 2024"
Margin="2,0,2,4" Margin="2,0,2,4"
Classes="clearButton" Classes="clearButton"
Name="TitleTextBox"> Name="TitleTextBox">
@@ -121,7 +121,7 @@
<DataGridTemplateColumn.CellEditingTemplate> <DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate DataType="models:ReportFile"> <DataTemplate DataType="models:ReportFile">
<TextBox Text="{Binding Title}" <TextBox Text="{Binding Title}"
Watermark="Title" PlaceholderText="Title"
ToolTip.Tip="{Binding Title}" ToolTip.Tip="{Binding Title}"
Classes="clearButton"> Classes="clearButton">
<TextBox.KeyBindings> <TextBox.KeyBindings>
+1 -1
View File
@@ -27,7 +27,7 @@ public partial class MainView : UserControl
public void UnfocusTextbox() public void UnfocusTextbox()
{ {
var topLevel = TopLevel.GetTopLevel(this); var topLevel = TopLevel.GetTopLevel(this);
topLevel?.FocusManager?.ClearFocus(); topLevel?.FocusManager?.Focus(null);
if (DataContext is MainViewModel mvm) if (DataContext is MainViewModel mvm)
{ {
mvm?.HasUnsavedWork = true; mvm?.HasUnsavedWork = true;
+5
View File
@@ -47,6 +47,11 @@
VerticalAlignment="Top"/> VerticalAlignment="Top"/>
</Grid> </Grid>
<CheckBox IsChecked="{Binding SaveReportJsonDataInInternalDir}">Save report data (names, notes, etc.) in MayShow settings directory (saves in working directory by default)</CheckBox> <CheckBox IsChecked="{Binding SaveReportJsonDataInInternalDir}">Save report data (names, notes, etc.) in MayShow settings directory (saves in working directory by default)</CheckBox>
<Button Command="{Binding OpenSettingsDir}">
<TextBlock>
<Run Text="&#xf07c;"
FontFamily="{StaticResource FontAwesomeSolid}" /> Open MayShow Settings Directory</TextBlock>
</Button>
<TextBlock TextWrapping="Wrap" <TextBlock TextWrapping="Wrap"
Foreground="Red" Foreground="Red"
Text="{Binding ErrorMessage}" Text="{Binding ErrorMessage}"
+1 -1
View File
@@ -3,7 +3,7 @@
<!-- This manifest is used on Windows only. <!-- This manifest is used on Windows only.
Don't remove it as it might cause problems with window transparency and embedded controls. Don't remove it as it might cause problems with window transparency and embedded controls.
For more details visit https://learn.microsoft.com/en-us/windows/win32/sbscs/application-manifests --> For more details visit https://learn.microsoft.com/en-us/windows/win32/sbscs/application-manifests -->
<assemblyIdentity version="1.4.1.0" name="MayShow.Desktop"/> <assemblyIdentity version="1.4.2.0" name="MayShow.Desktop"/>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application> <application>