avalonia structure refactoring

This commit is contained in:
EugeneTes
2026-04-01 09:34:02 +02:00
parent 1c7a4abd5c
commit 1032a5a28c
24 changed files with 65 additions and 31 deletions

View File

@@ -12,6 +12,7 @@ using VisionBuilder.UI.IOCommander;
using VisionBuilder.UI.Recipes.HawkeyeRecipe; using VisionBuilder.UI.Recipes.HawkeyeRecipe;
using VisionBuilder.UI.Ringbuffer; using VisionBuilder.UI.Ringbuffer;
using VisionBuilder.UI.Statistics; using VisionBuilder.UI.Statistics;
using VisionBuilder.UI.Avalonia;
using VisionBuilder.UI.Avalonia.Uno.Views; using VisionBuilder.UI.Avalonia.Uno.Views;
using Lindt.Colorballs.Duo.Utils; using Lindt.Colorballs.Duo.Utils;

View File

@@ -1,6 +1,6 @@
<Window xmlns="https://github.com/avaloniaui" <Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:views="using:VisionBuilder.UI.Avalonia.Uno.Views" xmlns:views="using:VisionBuilder.UI.Avalonia.Views"
x:Class="VisionBuilder.UI.Avalonia.Uno.Views.MainWindow" x:Class="VisionBuilder.UI.Avalonia.Uno.Views.MainWindow"
Title="VisionBuilder UNO" Title="VisionBuilder UNO"
Width="1920" Height="1080" Width="1920" Height="1080"

View File

@@ -7,6 +7,7 @@ using Avalonia.Controls.Primitives;
using Avalonia.Interactivity; using Avalonia.Interactivity;
using Avalonia.Media; using Avalonia.Media;
using Avalonia.Threading; using Avalonia.Threading;
using VisionBuilder.UI.Avalonia;
using VisionBuilder.UI.Common.ViewModel; using VisionBuilder.UI.Common.ViewModel;
using VisionBuilder.UI.Common.ViewModel.Classes; using VisionBuilder.UI.Common.ViewModel.Classes;

View File

@@ -11,12 +11,9 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Avalonia" Version="11.2.3" />
<PackageReference Include="Avalonia.Desktop" Version="11.2.3" /> <PackageReference Include="Avalonia.Desktop" Version="11.2.3" />
<PackageReference Include="Avalonia.Themes.Fluent" Version="11.2.3" />
<PackageReference Include="Avalonia.LinuxFramebuffer" Version="11.2.3" /> <PackageReference Include="Avalonia.LinuxFramebuffer" Version="11.2.3" />
<PackageReference Include="Ninject.Extensions.ChildKernel" Version="3.3.0" /> <PackageReference Include="Ninject.Extensions.ChildKernel" Version="3.3.0" />
<PackageReference Include="OpenCvSharp4" Version="4.10.0.20241108" />
<PackageReference Include="OpenCvSharp4.runtime.win" Version="4.10.0.20241108" /> <PackageReference Include="OpenCvSharp4.runtime.win" Version="4.10.0.20241108" />
<PackageReference Include="swety.OpenCvSharp4.runtime.linux-arm64" Version="4.10.0.20241108" /> <PackageReference Include="swety.OpenCvSharp4.runtime.linux-arm64" Version="4.10.0.20241108" />
<!-- Override transitive GPU OnnxRuntime with CPU-only (GPU has no linux-arm64 natives) --> <!-- Override transitive GPU OnnxRuntime with CPU-only (GPU has no linux-arm64 natives) -->
@@ -27,6 +24,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\VisionBuilder.UI.Avalonia\VisionBuilder.UI.Avalonia.csproj" />
<ProjectReference Include="..\framework\Inspectron.Settings\Inspectron.Settings.csproj" /> <ProjectReference Include="..\framework\Inspectron.Settings\Inspectron.Settings.csproj" />
<ProjectReference Include="..\Hawkeye.VisionBuilder.UI.Sources.Emulation\Hawkeye.VisionBuilder.UI.Sources.Emulation.csproj" /> <ProjectReference Include="..\Hawkeye.VisionBuilder.UI.Sources.Emulation\Hawkeye.VisionBuilder.UI.Sources.Emulation.csproj" />
<ProjectReference Include="..\VisionBuilder.UI.Camera\VisionBuilder.UI.Camera.csproj" /> <ProjectReference Include="..\VisionBuilder.UI.Camera\VisionBuilder.UI.Camera.csproj" />

View File

@@ -1,7 +1,7 @@
using Inspectron.Settings; using Inspectron.Settings;
using VisionBuilder.UI.Common; using VisionBuilder.UI.Common;
namespace VisionBuilder.UI.Avalonia.Uno; namespace VisionBuilder.UI.Avalonia;
public class AvaloniaUISettings : ISettings public class AvaloniaUISettings : ISettings
{ {

View File

@@ -1,7 +1,7 @@
using System.Globalization; using System.Globalization;
using Avalonia.Data.Converters; using Avalonia.Data.Converters;
namespace VisionBuilder.UI.Avalonia.Uno.Converters; namespace VisionBuilder.UI.Avalonia.Converters;
public class BoolToVisibilityConverter : IValueConverter public class BoolToVisibilityConverter : IValueConverter
{ {

View File

@@ -1,9 +1,9 @@
using System.Globalization; using System.Globalization;
using Avalonia.Data.Converters; using Avalonia.Data.Converters;
using OpenCvSharp; using OpenCvSharp;
using VisionBuilder.UI.Avalonia.Uno.Services; using VisionBuilder.UI.Avalonia.Services;
namespace VisionBuilder.UI.Avalonia.Uno.Converters; namespace VisionBuilder.UI.Avalonia.Converters;
public class MatToBitmapConverter : IValueConverter public class MatToBitmapConverter : IValueConverter
{ {

View File

@@ -3,9 +3,9 @@ using VisionBuilder.UI.Common;
using VisionBuilder.UI.Common.Processing; using VisionBuilder.UI.Common.Processing;
using VisionBuilder.UI.Common.Services; using VisionBuilder.UI.Common.Services;
using VisionBuilder.UI.Common.ViewModel.Interfaces.UI; using VisionBuilder.UI.Common.ViewModel.Interfaces.UI;
using VisionBuilder.UI.Avalonia.Uno.Services; using VisionBuilder.UI.Avalonia.Services;
namespace VisionBuilder.UI.Avalonia.Uno; namespace VisionBuilder.UI.Avalonia;
public static class ModuleExtensions public static class ModuleExtensions
{ {

View File

@@ -1,11 +1,11 @@
using VisionBuilder.UI.Common.ViewModel; using VisionBuilder.UI.Common.ViewModel;
using VisionBuilder.UI.Common.ViewModel.Interfaces.UI; using VisionBuilder.UI.Common.ViewModel.Interfaces.UI;
using VisionBuilder.UI.Avalonia.Uno.Views; using VisionBuilder.UI.Avalonia.Views;
using Avalonia; using Avalonia;
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Controls.ApplicationLifetimes;
namespace VisionBuilder.UI.Avalonia.Uno.Services; namespace VisionBuilder.UI.Avalonia.Services;
public class AvaloniaImagePreviewService : IImagePreviewService public class AvaloniaImagePreviewService : IImagePreviewService
{ {

View File

@@ -1,7 +1,7 @@
using Serilog; using Serilog;
using VisionBuilder.UI.Common.Processing; using VisionBuilder.UI.Common.Processing;
namespace VisionBuilder.UI.Avalonia.Uno.Services; namespace VisionBuilder.UI.Avalonia.Services;
public class AvaloniaLoadingService : ILoadingService public class AvaloniaLoadingService : ILoadingService
{ {

View File

@@ -1,10 +1,10 @@
using VisionBuilder.UI.Common.Services; using VisionBuilder.UI.Common.Services;
using VisionBuilder.UI.Avalonia.Uno.Views; using VisionBuilder.UI.Avalonia.Views;
using Avalonia; using Avalonia;
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Controls.ApplicationLifetimes;
namespace VisionBuilder.UI.Avalonia.Uno.Services; namespace VisionBuilder.UI.Avalonia.Services;
public class AvaloniaPasswordInputService : IPasswordInputService public class AvaloniaPasswordInputService : IPasswordInputService
{ {

View File

@@ -1,11 +1,11 @@
using VisionBuilder.UI.Common.ViewModel; using VisionBuilder.UI.Common.ViewModel;
using VisionBuilder.UI.Common.ViewModel.Interfaces.UI; using VisionBuilder.UI.Common.ViewModel.Interfaces.UI;
using VisionBuilder.UI.Avalonia.Uno.Views; using VisionBuilder.UI.Avalonia.Views;
using Avalonia; using Avalonia;
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Controls.ApplicationLifetimes;
namespace VisionBuilder.UI.Avalonia.Uno.Services; namespace VisionBuilder.UI.Avalonia.Services;
public class AvaloniaRecipeSelectionDialogService : IRecipeSelectionDialogService public class AvaloniaRecipeSelectionDialogService : IRecipeSelectionDialogService
{ {

View File

@@ -1,6 +1,6 @@
using VisionBuilder.UI.Common.ViewModel.Interfaces.UI; using VisionBuilder.UI.Common.ViewModel.Interfaces.UI;
namespace VisionBuilder.UI.Avalonia.Uno.Services; namespace VisionBuilder.UI.Avalonia.Services;
public class AvaloniaSettingsService : ISettingsService public class AvaloniaSettingsService : ISettingsService
{ {

View File

@@ -1,6 +1,6 @@
using OpenCvSharp; using OpenCvSharp;
namespace VisionBuilder.UI.Avalonia.Uno.Services; namespace VisionBuilder.UI.Avalonia.Services;
public static class ImageConverter public static class ImageConverter
{ {

View File

@@ -1,6 +1,6 @@
<Window xmlns="https://github.com/avaloniaui" <Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="VisionBuilder.UI.Avalonia.Uno.Views.ImagePreviewDialog" x:Class="VisionBuilder.UI.Avalonia.Views.ImagePreviewDialog"
Title="Image Preview" Title="Image Preview"
WindowState="Maximized" WindowState="Maximized"
WindowStartupLocation="CenterOwner" WindowStartupLocation="CenterOwner"

View File

@@ -1,9 +1,9 @@
using System.ComponentModel; using System.ComponentModel;
using Avalonia.Controls; using Avalonia.Controls;
using VisionBuilder.UI.Avalonia.Uno.Services; using VisionBuilder.UI.Avalonia.Services;
using VisionBuilder.UI.Common.ViewModel; using VisionBuilder.UI.Common.ViewModel;
namespace VisionBuilder.UI.Avalonia.Uno.Views; namespace VisionBuilder.UI.Avalonia.Views;
public partial class ImagePreviewDialog : Window public partial class ImagePreviewDialog : Window
{ {

View File

@@ -1,6 +1,6 @@
<Window xmlns="https://github.com/avaloniaui" <Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="VisionBuilder.UI.Avalonia.Uno.Views.PasswordDialog" x:Class="VisionBuilder.UI.Avalonia.Views.PasswordDialog"
Title="Password Required" Title="Password Required"
Width="400" Height="180" Width="400" Height="180"
CanResize="False" CanResize="False"

View File

@@ -1,7 +1,7 @@
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.Input; using Avalonia.Input;
namespace VisionBuilder.UI.Avalonia.Uno.Views; namespace VisionBuilder.UI.Avalonia.Views;
public partial class PasswordDialog : Window public partial class PasswordDialog : Window
{ {

View File

@@ -1,6 +1,6 @@
<Window xmlns="https://github.com/avaloniaui" <Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="VisionBuilder.UI.Avalonia.Uno.Views.RecipeSelectionDialog" x:Class="VisionBuilder.UI.Avalonia.Views.RecipeSelectionDialog"
Title="Select Recipe" Title="Select Recipe"
Width="800" Height="600" Width="800" Height="600"
WindowStartupLocation="CenterOwner" WindowStartupLocation="CenterOwner"

View File

@@ -2,12 +2,12 @@ using Avalonia.Controls;
using Avalonia.Layout; using Avalonia.Layout;
using Avalonia.Media; using Avalonia.Media;
using Avalonia.Media.Imaging; using Avalonia.Media.Imaging;
using VisionBuilder.UI.Avalonia.Uno.Services; using VisionBuilder.UI.Avalonia.Services;
using VisionBuilder.UI.Common.ViewModel; using VisionBuilder.UI.Common.ViewModel;
using VisionBuilder.UI.Common.ViewModel.Classes; using VisionBuilder.UI.Common.ViewModel.Classes;
using VisionBuilder.UI.Common.ViewModel.Interfaces.UI; using VisionBuilder.UI.Common.ViewModel.Interfaces.UI;
namespace VisionBuilder.UI.Avalonia.Uno.Views; namespace VisionBuilder.UI.Avalonia.Views;
public partial class RecipeSelectionDialog : global::Avalonia.Controls.Window public partial class RecipeSelectionDialog : global::Avalonia.Controls.Window
{ {

View File

@@ -1,7 +1,7 @@
<UserControl xmlns="https://github.com/avaloniaui" <UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:converters="using:VisionBuilder.UI.Avalonia.Uno.Converters" xmlns:converters="using:VisionBuilder.UI.Avalonia.Converters"
x:Class="VisionBuilder.UI.Avalonia.Uno.Views.SingleCameraView" x:Class="VisionBuilder.UI.Avalonia.Views.SingleCameraView"
Background="White"> Background="White">
<UserControl.Resources> <UserControl.Resources>

View File

@@ -10,12 +10,12 @@ using Avalonia.Media;
using Avalonia.Media.Imaging; using Avalonia.Media.Imaging;
using Avalonia.Threading; using Avalonia.Threading;
using OpenCvSharp; using OpenCvSharp;
using VisionBuilder.UI.Avalonia.Uno.Services; using VisionBuilder.UI.Avalonia.Services;
using VisionBuilder.UI.Common; using VisionBuilder.UI.Common;
using VisionBuilder.UI.Common.ViewModel; using VisionBuilder.UI.Common.ViewModel;
using VisionBuilder.UI.Common.ViewModel.Classes; using VisionBuilder.UI.Common.ViewModel.Classes;
namespace VisionBuilder.UI.Avalonia.Uno.Views; namespace VisionBuilder.UI.Avalonia.Views;
public partial class SingleCameraView : UserControl public partial class SingleCameraView : UserControl
{ {

View File

@@ -0,0 +1,20 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Avalonia" Version="11.2.3" />
<PackageReference Include="Avalonia.Themes.Fluent" Version="11.2.3" />
<PackageReference Include="OpenCvSharp4" Version="4.10.0.20241108" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\framework\Inspectron.Settings\Inspectron.Settings.csproj" />
<ProjectReference Include="..\VisionBuilder.UI.Common\VisionBuilder.UI.Common.csproj" />
</ItemGroup>
</Project>

View File

@@ -117,6 +117,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VisionBuilder.UI.Avalonia.U
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LindtLeerformPlugin", "Plugins\LindtLeerformPlugin\LindtLeerformPlugin.csproj", "{5A1D9E37-353C-4E30-A302-48487DC3A9E8}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LindtLeerformPlugin", "Plugins\LindtLeerformPlugin\LindtLeerformPlugin.csproj", "{5A1D9E37-353C-4E30-A302-48487DC3A9E8}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VisionBuilder.UI.Avalonia", "VisionBuilder.UI.Avalonia\VisionBuilder.UI.Avalonia.csproj", "{0549063E-5B22-4332-AD54-0D799B6DB4D2}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU Debug|Any CPU = Debug|Any CPU
@@ -629,6 +631,18 @@ Global
{5A1D9E37-353C-4E30-A302-48487DC3A9E8}.Release|x64.Build.0 = Release|Any CPU {5A1D9E37-353C-4E30-A302-48487DC3A9E8}.Release|x64.Build.0 = Release|Any CPU
{5A1D9E37-353C-4E30-A302-48487DC3A9E8}.Release|x86.ActiveCfg = Release|Any CPU {5A1D9E37-353C-4E30-A302-48487DC3A9E8}.Release|x86.ActiveCfg = Release|Any CPU
{5A1D9E37-353C-4E30-A302-48487DC3A9E8}.Release|x86.Build.0 = Release|Any CPU {5A1D9E37-353C-4E30-A302-48487DC3A9E8}.Release|x86.Build.0 = Release|Any CPU
{0549063E-5B22-4332-AD54-0D799B6DB4D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0549063E-5B22-4332-AD54-0D799B6DB4D2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0549063E-5B22-4332-AD54-0D799B6DB4D2}.Debug|x64.ActiveCfg = Debug|Any CPU
{0549063E-5B22-4332-AD54-0D799B6DB4D2}.Debug|x64.Build.0 = Debug|Any CPU
{0549063E-5B22-4332-AD54-0D799B6DB4D2}.Debug|x86.ActiveCfg = Debug|Any CPU
{0549063E-5B22-4332-AD54-0D799B6DB4D2}.Debug|x86.Build.0 = Debug|Any CPU
{0549063E-5B22-4332-AD54-0D799B6DB4D2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0549063E-5B22-4332-AD54-0D799B6DB4D2}.Release|Any CPU.Build.0 = Release|Any CPU
{0549063E-5B22-4332-AD54-0D799B6DB4D2}.Release|x64.ActiveCfg = Release|Any CPU
{0549063E-5B22-4332-AD54-0D799B6DB4D2}.Release|x64.Build.0 = Release|Any CPU
{0549063E-5B22-4332-AD54-0D799B6DB4D2}.Release|x86.ActiveCfg = Release|Any CPU
{0549063E-5B22-4332-AD54-0D799B6DB4D2}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE