diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index 8ca517d61..bda81ccfe 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -6,6 +6,37 @@
version: 2
updates:
- package-ecosystem: "nuget" # See documentation for possible values
- directory: "/" # Location of package manifests
+ directory: "/CSharpBible" # Location of package manifests
schedule:
interval: "weekly"
+ target-branch: "CSharpBible"
+
+ - package-ecosystem: "nuget" # See documentation for possible values
+ directory: "/TestStatements" # Location of package manifests
+ schedule:
+ interval: "weekly"
+ target-branch: "TestStatements"
+
+ - package-ecosystem: "nuget" # See documentation for possible values
+ directory: "/JC-AMS" # Location of package manifests
+ schedule:
+ interval: "weekly"
+ target-branch: "JC-AMS"
+
+ - package-ecosystem: "nuget" # See documentation for possible values
+ directory: "/Transpiler_pp" # Location of package manifests
+ schedule:
+ interval: "weekly"
+ target-branch: "Transpiler_pp"
+
+ - package-ecosystem: "nuget" # See documentation for possible values
+ directory: "/GenFreeWin" # Location of package manifests
+ schedule:
+ interval: "weekly"
+ target-branch: "GenFreeWin"
+
+ - package-ecosystem: "nuget" # See documentation for possible values
+ directory: "/Avalonia_Apps" # Location of package manifests
+ schedule:
+ interval: "weekly"
+ target-branch: "Avalonia_Apps"
diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml
index 3e143b975..656b4893e 100644
--- a/.github/workflows/codeql.yml
+++ b/.github/workflows/codeql.yml
@@ -1,24 +1,12 @@
-# For most projects, this workflow file will not need changing; you simply need
-# to commit it to your repository.
-#
-# You may wish to alter this file to override the set of languages analyzed,
-# or to provide custom queries or build logic.
-#
-# ******** NOTE ********
-# We have attempted to detect the languages in your repository. Please check
-# the `language` matrix defined below to confirm you have the correct set of
-# supported CodeQL languages.
-#
-name: "CodeQL"
+name: "CodeQL C#"
on:
push:
- branches: [ "master" ]
+ branches: [ "master", "main", "develop" ]
pull_request:
- # The branches below must be a subset of the branches above
- branches: [ "master" ]
+ branches: [ "master", "main", "develop" ]
schedule:
- - cron: '24 0 * * 1'
+ - cron: '0 18 * * 5' # Runs at 18:00 every Friday
jobs:
analyze:
@@ -32,43 +20,54 @@ jobs:
strategy:
fail-fast: false
matrix:
- language: ['csharp' ]
- # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
- # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
+ language: ['csharp']
steps:
- name: Checkout repository
uses: actions/checkout@v3
- # Initializes the CodeQL tools for scanning.
+ - name: Cache dependencies
+ uses: actions/cache@v3
+ with:
+ path: ~/.nuget/packages
+ key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
+ restore-keys: |
+ ${{ runner.os }}-nuget-
+
+ - name: Install wasi-experimental-workload (WebAssembly)
+ run: |
+ dotnet workload install wasi-experimental
+
- name: Initialize CodeQL
- uses: github/codeql-action/init@v2
+ uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
- # If you wish to specify custom queries, you can do so here or in a config file.
- # By default, queries listed here will override any specified in a config file.
- # Prefix the list here with "+" to use these queries and those in the config file.
-
- # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
- # queries: security-extended,security-and-quality
+ queries: +security-extended,security-and-quality
+ - name: Build Avalonia_Apps
+ continue-on-error: true # Ignore errors during this step
+ run: |
+ dotnet build Avalonia_Apps/Avalonia_Apps.sln
- # Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
- # If this step fails, then you should remove it and run the build manually (see below)
- #- name: Autobuild
- # uses: github/codeql-action/autobuild@v2
-
- # ℹ️ Command-line programs to run using the OS shell.
- # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
-
- # If the Autobuild fails above, remove it and uncomment the following three lines.
- # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.
-
- #- run: |
- # echo "Run, Build Application using script"
- # ./location_of_script_within_repo/buildscript.sh
+ - name: Build Transpiler_pp
+ continue-on-error: true # Ignore errors during this step
+ run: |
+ dotnet build Transpiler_pp/Transpiler.sln
+
+ - name: Build CSharpBible
+ continue-on-error: true # Ignore errors during this step
+ run: |
+ dotnet build CSharpBible/Libraries/Libraries.sln
+ dotnet build CSharpBible/Calc/Calc.sln
+ dotnet build CSharpBible/Graphics/Graphics.sln
+ dotnet build CSharpBible/MVVM_Tutorial/MVVM_Tutorial.sln
+
+ # Uncomment and modify the following lines if Autobuild fails
+ # - run: |
+ # echo "Run, Build Application using script"
+ # ./location_of_script_within_repo/buildscript.sh
- name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@v2
+ uses: github/codeql-action/analyze@v3
with:
category: "/language:${{matrix.language}}"
diff --git a/.gitignore b/.gitignore
index 00022acfc..3e5f6349f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,114 +1,9 @@
-################################################################################
-# Diese .gitignore-Datei wurde von Microsoft(R) Visual Studio automatisch erstellt.
-################################################################################
-
-*.pfx
-*.exe
-*.dll
+.vs
+bin
+obj
*.bak
-/.svn
-/.vs
-/bin
-/*/.vs
-/CSharpBible/*/.vs
-/*/obj
-/*/bin
-/*/TestResults
-/*/*/TestResults
-/*/*/obj
-/*/*/bin
-/*/*/*/.vs
-/*/*/*/obj
-/*/*/*/bin
-/CSharpBible/Help
-/CSharpBible/Mobile
-/CSharpBible/AboutEx/obj
-/CSharpBible/AboutEx/publish
-/CSharpBible/AboutExTests/bin
-/CSharpBible/AboutExTests/obj
-/CSharpBible/ActionTest/obj
-/CSharpBible/ActionTestWPF/obj
-/CSharpBible/AddPage/obj
-/CSharpBible/AddPageWPF/obj
-/CSharpBible/BindingGroupExp/obj
-/CSharpBible/Calc/Help
-/CSharpBible/Calc32/obj
-/CSharpBible/Calc32Tests/obj
-/CSharpBible/Calc32WPF/obj
-/CSharpBible/CharGrid/obj
-/CSharpBible/CSharpBibleTest/obj
-/CSharpBible/CSFreeVision/obj
-/CSharpBible/CSV_Viewer/obj
-/CSharpBible/CSV_ViewerTest/obj
-/CSharpBible/ConsoleMouseApp/obj
-/CSharpBible/ConsoleLib/obj
-/CSharpBible/DataGridEx/obj
-/CSharpBible/DataGridExWPF/obj
-/CSharpBible/packages
-/NUnitTestProject1/NUnitTestProject1/obj
-/TestStatements/.vs
-/TestStatements/AsyncExample/obj
-/TestStatements/AsyncExampleWPF/obj
-/TestStatements/CallAllExamples/obj
-/TestStatements/ctlClockLib/obj
-/TestStatements/DynamicSample/obj
-/TestStatements/packages
-/TestStatements/TestClockApp/obj
-/TestStatements/TestStatements/obj
-/TestStatements/TestStatementsTest/obj
-/TestStatements/Tutorials/obj
-/CSharpProgrammierHandbuch/.vs
-/CSharpProgrammierHandbuch/Fibonacci/obj
-/CSharpProgrammierHandbuch/HelloWorld/obj
-/CSharpProgrammierHandbuch/CGui/obj
-/CSharpProgrammierHandbuch/ConsoleTest/obj
-/CSharpProgrammierHandbuch/CSharpProgrammierHandbuch/obj
-/CSharpProgrammierHandbuch/Fibonacci2
-/TestStatements/AsyncExampleWPF
-/TestStatements/Tutorials/obj/Debug
-/CSharpBible/Basics/.vs
-/CSharpBible/Basics/.vs
*.user
-*.bak
-/CSharpBible/Calc/.vs
-/CSharpBible/DB/.vs
-/CSharpBible/Mobile
-/CSharpBible/MVVM_Tutorial/.vs
-/CSharpBible/Calc/Help
-/CSharpBible/DependencyInjection/.vs
-/CSharpBible/CSharpBibleTest/.vs
-/CSharpBible/Games/.vs
-/CSharpBible/Graphics/.vs
-/GenFreeWin/.vs
-/JC-AMS/.vs
-/obj
/obj.net
-/TestStatements/Help
-/JC-AMS/JC-AMS.sln.GhostDoc.xml
-/CSharpBible/Help
-/CSharpBible/MVVM_Tutorial/MVVM_16_Usercontrol1/.vs
-/CSharpBible/MVVM_Tutorial/TestResults
-/CSharpBible/Patterns_Tutorial/.vs
-/CSharpBible/Patterns_Tutorial/Pattern_00_Template/obj
-/CSharpBible/Patterns_Tutorial/Pattern_00_TemplateTests/obj
-/CSharpBible/Patterns_Tutorial/Pattern_01_Singleton/obj
-/CSharpBible/Patterns_Tutorial/Pattern_01_SingletonTests/obj
-/CSharpBible/Patterns_Tutorial/Pattern_02_Observer/obj
-/CSharpBible/Patterns_Tutorial/Pattern_02_ObserverTests/obj
-*.editorconfig
-/CSharpBible/Libraries/CSFreeVision_
-/CSharpBible/AboutExTests/.vs
-/CSharpBible/CSV_ViewerTest/.vs
-/CSharpBible/DB/DataLake_App/obj
-/CSharpBible/DB/DataLake_App/bin
-/CSharpBible/DB/DataLake_Example/.vs
-/CSharpBible/Graphics/Polyline/.vs
-/GenFreeWin/TestResults
-/CSharpBible/Games/Sokoban_Base/*.svn
-/CSharpBible/MVVM_Tutorial/UWP_00_Test/AppPackages
-/TestStatements/TestStatements/Version.inc
-obj.net
-/JC-AMS/Core/Resource/Version.inc
-/TestStatements/*.snk
-/CSharpBible/Libraries/*.snk
-/Transpiler_pp/Analyzer1/Analyzer1.Package/tools/install.ps1
+/CSharpBible/Data/obj.net
+/CSharpBible/obj.net
+*.log
diff --git a/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc.sln b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc.sln
new file mode 100644
index 000000000..5516f6076
--- /dev/null
+++ b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc.sln
@@ -0,0 +1,39 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.12.35527.113
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AA05_CommandParCalc", "AA05_CommandParCalc\AA05_CommandParCalc.csproj", "{02E04201-5AE2-470B-9C41-C1EF23C31DBB}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Projektmappenelemente", "Projektmappenelemente", "{87372279-1249-4919-88C6-641CFD20D23F}"
+ ProjectSection(SolutionItems) = preProject
+ Application.props = Application.props
+ Directory.Packages.props = Directory.Packages.props
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "UpDir", "UpDir", "{B80EE610-E601-41EA-90C0-94157D42F9B2}"
+ ProjectSection(SolutionItems) = preProject
+ ..\Solution.props = ..\Solution.props
+ EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AA05_CommandParCalcTests", "AA05_CommandParCalcTests\AA05_CommandParCalcTests.csproj", "{F7B8C2BD-2643-4464-AE46-4C92D889DD37}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {02E04201-5AE2-470B-9C41-C1EF23C31DBB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {02E04201-5AE2-470B-9C41-C1EF23C31DBB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {02E04201-5AE2-470B-9C41-C1EF23C31DBB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {02E04201-5AE2-470B-9C41-C1EF23C31DBB}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F7B8C2BD-2643-4464-AE46-4C92D889DD37}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F7B8C2BD-2643-4464-AE46-4C92D889DD37}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F7B8C2BD-2643-4464-AE46-4C92D889DD37}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F7B8C2BD-2643-4464-AE46-4C92D889DD37}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/AA05_CommandParCalc.csproj b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/AA05_CommandParCalc.csproj
new file mode 100644
index 000000000..9d80b995e
--- /dev/null
+++ b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/AA05_CommandParCalc.csproj
@@ -0,0 +1,59 @@
+
+
+
+ WinExe
+ net8.0
+ true
+ app.manifest
+ true
+
+
+
+
+ $(TargetFrameworks);net9.0
+
+
+ $(TargetFrameworks);net10.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+ None
+ All
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+ True
+ Resources.resx
+
+
+
+
+
+ PublicResXFileCodeGenerator
+ Resources.Designer.cs
+
+
+
+
+
diff --git a/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/App.axaml b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/App.axaml
new file mode 100644
index 000000000..0c0341c10
--- /dev/null
+++ b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/App.axaml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/App.axaml.cs b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/App.axaml.cs
new file mode 100644
index 000000000..fbae35880
--- /dev/null
+++ b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/App.axaml.cs
@@ -0,0 +1,70 @@
+using System;
+using System.Linq;
+using Avalonia;
+using Avalonia.Controls.ApplicationLifetimes;
+using Avalonia.Data.Core;
+using Avalonia.Data.Core.Plugins;
+using Avalonia.Markup.Xaml;
+using Avalonia.Platform;
+using AA05_CommandParCalc.Models;
+using AA05_CommandParCalc.Models.Interfaces;
+using AA05_CommandParCalc.ViewModels;
+using AA05_CommandParCalc.ViewModels.Interfaces;
+using AA05_CommandParCalc.Views;
+using Microsoft.Extensions.DependencyInjection;
+
+namespace AA05_CommandParCalc;
+
+public partial class App : Application
+{
+ public override void Initialize()
+ {
+ AvaloniaXamlLoader.Load(this);
+ }
+
+ public override void OnFrameworkInitializationCompleted()
+ {
+ if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
+ {
+ InitDesktopApp(desktop);
+ }
+
+ base.OnFrameworkInitializationCompleted();
+ }
+
+ protected void InitDesktopApp(IClassicDesktopStyleApplicationLifetime desktop)
+ {
+ var services = new ServiceCollection();
+
+ services.AddTransient()
+ .AddTransient()
+ .AddTransient()
+ .AddSingleton((s)=>null!)
+ .AddSingleton();
+
+ Services = services.BuildServiceProvider();
+
+ // Avoid duplicate validations from both Avalonia and the CommunityToolkit.
+ // More info: https://docs.avaloniaui.net/docs/guides/development-guides/data-validation#manage-validationplugins
+ DisableAvaloniaDataAnnotationValidation();
+ desktop.MainWindow = new MainWindow
+ {
+ DataContext = Services.GetRequiredService()
+ };
+ }
+
+ private void DisableAvaloniaDataAnnotationValidation()
+ {
+ // Get an array of plugins to remove
+ var dataValidationPluginsToRemove =
+ BindingPlugins.DataValidators.OfType().ToArray();
+
+ // remove each entry found
+ foreach (var plugin in dataValidationPluginsToRemove)
+ {
+ BindingPlugins.DataValidators.Remove(plugin);
+ }
+ }
+
+ public IServiceProvider? Services { get; private set; }
+}
diff --git a/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Assets/Images/Logo.svg b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Assets/Images/Logo.svg
new file mode 100644
index 000000000..88219f567
--- /dev/null
+++ b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Assets/Images/Logo.svg
@@ -0,0 +1,223 @@
+
+
+
+
diff --git a/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Assets/Images/Logo_2.png b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Assets/Images/Logo_2.png
new file mode 100644
index 000000000..c579a91cf
Binary files /dev/null and b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Assets/Images/Logo_2.png differ
diff --git a/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Assets/avalonia-logo.ico b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Assets/avalonia-logo.ico
new file mode 100644
index 000000000..da8d49ff9
Binary files /dev/null and b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Assets/avalonia-logo.ico differ
diff --git a/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Data/ECalcError.cs b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Data/ECalcError.cs
new file mode 100644
index 000000000..df5dfb859
--- /dev/null
+++ b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Data/ECalcError.cs
@@ -0,0 +1,46 @@
+// ***********************************************************************
+// Assembly : AA05_CommandParCalc
+// Author : Mir
+// Created : 05-11-2023
+//
+// Last Modified By : Mir
+// Last Modified On : 05-08-2023
+// ***********************************************************************
+//
+// Copyright JC-Soft 2023
+//
+//
+// ***********************************************************************
+///
+/// The Model namespace.
+///
+///
+namespace AA05_CommandParCalc.Data;
+
+///
+/// Enum ECalcError
+///
+///
+public enum ECalcError
+{
+ ///
+ /// The none
+ ///
+ ///
+ None = 0,
+ ///
+ /// The div by zero
+ ///
+ ///
+ DivByZero,
+ ///
+ /// The over flow
+ ///
+ ///
+ OverFlow,
+ ///
+ /// The under flow
+ ///
+ ///
+ UnderFlow,
+}
diff --git a/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Data/ECommands.cs b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Data/ECommands.cs
new file mode 100644
index 000000000..997d3b7b1
--- /dev/null
+++ b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Data/ECommands.cs
@@ -0,0 +1,93 @@
+// ***********************************************************************
+// Assembly : AA05_CommandParCalc
+// Author : Mir
+// Created : 05-11-2023
+//
+// Last Modified By : Mir
+// Last Modified On : 05-08-2023
+// ***********************************************************************
+//
+// Copyright JC-Soft 2023
+//
+//
+// ***********************************************************************
+
+///
+/// The Model namespace.
+///
+///
+namespace AA05_CommandParCalc.Data;
+
+///
+/// Enum ECommands
+///
+///
+public enum ECommands
+{
+ ///
+ /// The nop
+ ///
+ ///
+ Nop,
+ ///
+ /// The clear
+ ///
+ ///
+ Clear,
+ ///
+ /// The clear all
+ ///
+ ///
+ ClearAll,
+ ///
+ /// The decimal mode
+ ///
+ ///
+ DecMode,
+ ///
+ /// The pi
+ ///
+ ///
+ Pi,
+ ///
+ /// The e
+ ///
+ ///
+ e,
+ ///
+ /// The bracket open
+ ///
+ ///
+ BracketOpen,
+ ///
+ /// The bracket close
+ ///
+ ///
+ BracketClose,
+ ///
+ /// The ms
+ ///
+ ///
+ MS,
+ ///
+ /// The mr
+ ///
+ ///
+ MR,
+ ///
+ /// The mc
+ ///
+ ///
+ MC,
+ ///
+ /// The mp
+ ///
+ ///
+ Mp,
+ ///
+ /// The mm
+ ///
+ ///
+ Mm,
+
+}
diff --git a/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Data/ENumbers.cs b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Data/ENumbers.cs
new file mode 100644
index 000000000..886228ae0
--- /dev/null
+++ b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Data/ENumbers.cs
@@ -0,0 +1,88 @@
+// ***********************************************************************
+// Assembly : AA05_CommandParCalc
+// Author : Mir
+// Created : 01-15-2025
+//
+// Last Modified By : Mir
+// Last Modified On : 02-18-2024
+// ***********************************************************************
+//
+// Copyright JC-Soft 2025
+//
+//
+// ***********************************************************************
+///
+/// The Data namespace.
+///
+namespace AA05_CommandParCalc.Data;
+
+///
+/// Enum ENumbers
+///
+public enum ENumbers : int
+{
+ ///
+ /// The 0
+ ///
+ _0 = 0,
+ ///
+ /// The 1
+ ///
+ _1 = 1,
+ ///
+ /// The 2
+ ///
+ _2 = 2,
+ ///
+ /// The 3
+ ///
+ _3 = 3,
+ ///
+ /// The 4
+ ///
+ _4 = 4,
+ ///
+ /// The 5
+ ///
+ _5 = 5,
+ ///
+ /// The 6
+ ///
+ _6 = 6,
+ ///
+ /// The 7
+ ///
+ _7 = 7,
+ ///
+ /// The 8
+ ///
+ _8 = 8,
+ ///
+ /// The 9
+ ///
+ _9 = 9,
+ ///
+ /// a
+ ///
+ _A = 10,
+ ///
+ /// The b
+ ///
+ _B = 11,
+ ///
+ /// The c
+ ///
+ _C = 12,
+ ///
+ /// The d
+ ///
+ _D = 13,
+ ///
+ /// The e
+ ///
+ _E = 14,
+ ///
+ /// The f
+ ///
+ _F = 15
+}
diff --git a/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Data/EOperations.cs b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Data/EOperations.cs
new file mode 100644
index 000000000..62e3db9e6
--- /dev/null
+++ b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Data/EOperations.cs
@@ -0,0 +1,121 @@
+// ***********************************************************************
+// Assembly : AA05_CommandParCalc
+// Author : Mir
+// Created : 05-11-2023
+//
+// Last Modified By : Mir
+// Last Modified On : 05-08-2023
+// ***********************************************************************
+//
+// Copyright JC-Soft 2023
+//
+//
+// ***********************************************************************
+///
+/// The Model namespace.
+///
+///
+namespace AA05_CommandParCalc.Data;
+
+///
+/// Enum EOperations
+///
+///
+public enum EOperations
+{
+ ///
+ /// The nop
+ ///
+ ///
+ Nop,
+ ///
+ /// The calculate result
+ ///
+ ///
+ CalcResult, // =
+ ///
+ /// The add
+ ///
+ ///
+ Add, // +
+ ///
+ /// The subtract
+ ///
+ ///
+ Subtract, // -
+ ///
+ /// The multiply
+ ///
+ ///
+ Multiply,
+ ///
+ /// The divide
+ ///
+ ///
+ Divide,
+ ///
+ /// The negate
+ ///
+ ///
+ Negate,
+ ///
+ /// The power
+ ///
+ ///
+ Power,
+ ///
+ /// The square
+ ///
+ ///
+ Square,
+ ///
+ /// The square root
+ ///
+ ///
+ SquareRt, // vx
+ ///
+ /// The inverse
+ ///
+ ///
+ Inverse, // 1/x
+ ///
+ /// The sin
+ ///
+ ///
+ Sin,
+ ///
+ /// The cos
+ ///
+ ///
+ Cos,
+ ///
+ /// The tan
+ ///
+ ///
+ Tan,
+ ///
+ /// The exp n
+ ///
+ ///
+ ExpN, // e?
+ ///
+ /// The log n
+ ///
+ ///
+ LogN,
+ ///
+ /// The exp x
+ ///
+ ///
+ ExpX, // y?
+ ///
+ /// The log x
+ ///
+ ///
+ LogX,
+ ///
+ /// The square rt x
+ ///
+ ///
+ SquareRtX,
+}
diff --git a/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Data/ETrigMode.cs b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Data/ETrigMode.cs
new file mode 100644
index 000000000..5cdbf1bac
--- /dev/null
+++ b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Data/ETrigMode.cs
@@ -0,0 +1,41 @@
+// ***********************************************************************
+// Assembly : AA05_CommandParCalc
+// Author : Mir
+// Created : 05-11-2023
+//
+// Last Modified By : Mir
+// Last Modified On : 05-08-2023
+// ***********************************************************************
+//
+// Copyright JC-Soft 2023
+//
+//
+// ***********************************************************************
+///
+/// The Model namespace.
+///
+///
+namespace AA05_CommandParCalc.Data;
+
+///
+/// Enum ETrigMode
+///
+///
+public enum ETrigMode
+{
+ ///
+ /// The grad
+ ///
+ ///
+ Grad,
+ ///
+ /// The RAD
+ ///
+ ///
+ Rad,
+ ///
+ /// The degr
+ ///
+ ///
+ Degr
+}
diff --git a/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Models/CalculatorModel.cs b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Models/CalculatorModel.cs
new file mode 100644
index 000000000..0d7d8d911
--- /dev/null
+++ b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Models/CalculatorModel.cs
@@ -0,0 +1,333 @@
+// ***********************************************************************
+// Assembly : AA05_CommandParCalc
+// Author : Mir
+// Created : 05-11-2023
+//
+// Last Modified By : Mir
+// Last Modified On : 05-19-2023
+// ***********************************************************************
+//
+// Copyright © JC-Soft 2023
+//
+//
+// ***********************************************************************
+using System;
+using System.Collections.Generic;
+using CommunityToolkit.Mvvm.ComponentModel;
+using AA05_CommandParCalc.Data;
+using AA05_CommandParCalc.Models.Interfaces;
+
+///
+/// The Model namespace.
+///
+///
+namespace AA05_CommandParCalc.Models;
+
+///
+/// Class CalculatorModel.
+/// Implements the
+/// Implements the
+///
+///
+///
+///
+public partial class CalculatorModel : ObservableObject, ICalculatorModel
+{
+
+ #region Properties
+ ///
+ /// The unary operation
+ ///
+ ///
+ private static readonly List _unaryOperation = new() {
+ EOperations.Nop,
+ EOperations.Negate,
+ EOperations.Sin,
+ EOperations.Cos,
+ EOperations.Tan,
+ EOperations.Square,
+ EOperations.SquareRt,
+ EOperations.Inverse,
+ EOperations.ExpN,
+ EOperations.LogN,
+ };
+
+ ///
+ /// The operation level
+ ///
+ ///
+ private static readonly Dictionary _OperationLevel = new() {
+ { EOperations.CalcResult, 0 },
+ { EOperations.Add, 1 },
+ { EOperations.Subtract, 1 },
+ { EOperations.Multiply, 2 },
+ { EOperations.Divide, 2 },
+ { EOperations.Power, 3 },
+ { EOperations.SquareRtX, 3 },
+ };
+
+ ///
+ /// The instance
+ ///
+ ///
+ private static CalculatorModel? _instance;
+ ///
+ /// The op
+ ///
+ ///
+ private EOperations _op;
+ ///
+ /// The operation
+ ///
+ ///
+ private Func? _Operation;
+ ///
+ /// The accumulator
+ ///
+ ///
+ [ObservableProperty]
+ private double _accumulator = 0d;
+ ///
+ /// The register
+ ///
+ ///
+ [ObservableProperty]
+ private double? _register = null;
+ ///
+ /// The memory
+ ///
+ ///
+ [ObservableProperty]
+ private double? _memory = null;
+ ///
+ /// The stack
+ ///
+ ///
+ private Stack<(double, EOperations, Func)> _stack = new();
+ ///
+ /// The decimal fak
+ ///
+ ///
+ private double _decFak;
+ ///
+ /// The decimal mode
+ ///
+ ///
+ private bool _decMode;
+ ///
+ /// The edit mode
+ ///
+ ///
+ private bool _editMode;
+ ///
+ /// The trig mode
+ ///
+ ///
+ private ETrigMode _trigMode;
+ ///
+ /// The calculate error
+ ///
+ ///
+ private ECalcError _calcError;
+
+ ///
+ /// Gets or sets a value indicating whether [decimal mode].
+ ///
+ /// true if [decimal mode]; otherwise, false.
+ ///
+ public bool DecMode
+ {
+ get => _decMode;
+ set
+ {
+ if (!_decMode && value)
+ _decFak = 1d;
+ _decMode = value;
+ }
+ }
+
+ ///
+ /// Gets the instance.
+ ///
+ /// The instance.
+ ///
+ public static CalculatorModel Instance => _instance ??= new();
+
+ ///
+ /// Gets the dependencies.
+ ///
+ /// The dependencies.
+ ///
+ public IEnumerable<(string, string)> Dependencies => new[]{
+ (nameof(canOperator),nameof(Accumulator)),
+ (nameof(canOperator),nameof(Register)),
+ };
+
+ ///
+ /// Gets the trig mode.
+ ///
+ /// The trig mode.
+ ///
+ public ETrigMode TrigMode => _trigMode;
+
+ ///
+ /// Gets the calculate error.
+ ///
+ /// The calculate error.
+ ///
+ public ECalcError CalcError => _calcError;
+
+ ///
+ /// Gets the size of the stack.
+ ///
+ /// The size of the stack.
+ ///
+ public int StackSize => _stack.Count;
+
+ #endregion
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ ///
+ public CalculatorModel() { }
+
+ ///
+ /// Determines whether this instance can operator the specified e o.
+ ///
+ /// The e o.
+ /// true if this instance can operator the specified e o; otherwise, false.
+ ///
+ public bool canOperator(EOperations eO)
+ {
+ if (eO == EOperations.Nop) return true;
+ if (eO == EOperations.CalcResult) return _Operation != null && Register != null;
+ if (eO > EOperations.CalcResult) return _editMode || Accumulator != 0d;
+ return false;
+ }
+
+ ///
+ /// Determines whether this instance can command the specified e.
+ ///
+ /// The e.
+ /// true if this instance can command the specified e; otherwise, false.
+ ///
+ public bool canCommand(ECommands e)
+ {
+ if (e == ECommands.DecMode) return !_decMode;
+ return true;
+ }
+
+
+ ///
+ /// Numbers the command.
+ ///
+ /// The oo.
+ ///
+ public void NumberCmd(ENumbers oo)
+ {
+ if (oo is ENumbers e && (int)e is int iN)
+ {
+ if (!_editMode)
+ {
+ Accumulator = 0d;
+ _editMode = true;
+ _decMode = false;
+ }
+ if (!_decMode)
+ Accumulator = Accumulator * 10d + iN;
+ else
+ {
+ _decFak *= 0.1d;
+ Accumulator = Accumulator + iN * _decFak;
+ }
+ }
+ }
+
+ ///
+ /// Operators the command.
+ ///
+ /// The e o.
+ ///
+ public void OperatorCmd(EOperations eO)
+ {
+
+ _editMode = false;
+
+ if (eO >= EOperations.CalcResult && Register != null && !_unaryOperation.Contains(eO))
+ {
+ if (_Operation != null )
+ Accumulator = _Operation.Invoke(Accumulator);
+
+ Register = null;
+ DecMode = false;
+ }
+ if (eO > EOperations.CalcResult && !_unaryOperation.Contains(eO))
+ { Register = Accumulator; };
+ var op = eO switch
+ {
+
+ EOperations.CalcResult => null,
+ EOperations.Add => (a) => Register!.Value + a,
+ EOperations.Subtract => (a) => Register!.Value - a,
+ EOperations.Multiply => (a) => Register!.Value * a,
+ EOperations.Divide => (a) => Register!.Value / a,
+ EOperations.Power => (a) => Math.Pow(Register!.Value, a),
+ EOperations.Negate => (a) => -a,
+ EOperations.Square => (a) => a * a,
+ EOperations.SquareRt => (a) => Math.Sqrt(a),
+ EOperations.Inverse => (a) => 1 / a,
+ EOperations.Sin => (a) => Math.Sin(a), // Dodo: Factor by Trig-Mode
+ EOperations.Cos => (a) => Math.Cos(a),
+ EOperations.Tan => (a) => Math.Tan(a),
+ EOperations.LogN => (a) => Math.Log(a),
+ EOperations.ExpN => (a) => Math.Exp(a),
+ _ => (Func?)null,
+ };
+ if (_unaryOperation.Contains(eO))
+ Accumulator = op?.Invoke(Accumulator) ?? Accumulator;
+ else
+ {
+ _op = eO;
+ _Operation = op;
+ }
+ }
+
+ ///
+ /// Calculates the command.
+ ///
+ /// The o.
+ ///
+ public void CalcCmd(ECommands o)
+ {
+ switch (o)
+ {
+ case ECommands.Clear: //Clear
+ Accumulator = 0d;
+ _editMode = false;
+ break;
+ case ECommands.ClearAll: //Clear All
+ Accumulator = 0d;
+ Register = 0d;
+ _Operation = null;
+ _editMode = false;
+ break;
+ case ECommands.DecMode: // DecimalSeparator
+ DecMode = true;
+ break;
+ case ECommands.e:
+ Accumulator = Math.E;
+ break;
+ case ECommands.Pi:
+ Accumulator = Math.PI;
+ break;
+ case ECommands.MS: Memory = Accumulator; break;
+ case ECommands.MR: Accumulator = Memory ?? 0d; break;
+ case ECommands.MC: Memory = null; break;
+ case ECommands.Mp: Memory = (Memory ?? 0d) + Accumulator; break;
+ case ECommands.Mm: Memory = (Memory ?? 0d) - Accumulator; break;
+ default:
+ break;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Models/CommandParCalcModel.cs b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Models/CommandParCalcModel.cs
new file mode 100644
index 000000000..4f75e1068
--- /dev/null
+++ b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Models/CommandParCalcModel.cs
@@ -0,0 +1,56 @@
+// ***********************************************************************
+// Assembly : AA05_CommandParCalc
+// Author : Mir
+// Created : 01-11-2025
+//
+// Last Modified By : Mir
+// Last Modified On : 01-12-2025
+// ***********************************************************************
+//
+// Copyright © JC-Soft 2025
+//
+//
+// ***********************************************************************
+using Avalonia.Platform;
+using AA05_CommandParCalc.Models.Interfaces;
+using CommunityToolkit.Mvvm.ComponentModel;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Timers;
+
+///
+/// The Models namespace.
+///
+namespace AA05_CommandParCalc.Models;
+
+///
+/// Class CommandParCalcModel.
+///
+public partial class CommandParCalcModel : ObservableObject, ICommandParCalcModel
+{
+ ///
+ /// The platform handle
+ ///
+ private IPlatformHandle _platformHandle;
+ private ISysTime _sysTime;
+ private ICyclTimer _timer;
+
+ public DateTime Now => _sysTime.Now;
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// The platform handle.
+ public CommandParCalcModel(IPlatformHandle platformHandle, ISysTime sysTime, ICyclTimer timer)
+ {
+ _platformHandle = platformHandle;
+ _sysTime = sysTime;
+ _timer = timer;
+ _timer.Interval = 1000;
+ _timer.Elapsed += (s, e) => OnPropertyChanged(nameof(Now));
+ _timer.Start();
+ }
+}
diff --git a/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Models/Interfaces/ICalculatorModel.cs b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Models/Interfaces/ICalculatorModel.cs
new file mode 100644
index 000000000..3e0fceee2
--- /dev/null
+++ b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Models/Interfaces/ICalculatorModel.cs
@@ -0,0 +1,108 @@
+// ***********************************************************************
+// Assembly : AA05_CommandParCalc
+// Author : Mir
+// Created : 05-11-2023
+//
+// Last Modified By : Mir
+// Last Modified On : 05-08-2023
+// ***********************************************************************
+//
+// Copyright JC-Soft 2023
+//
+//
+// ***********************************************************************
+using AA05_CommandParCalc.Data;
+using System.Collections.Generic;
+using System.ComponentModel;
+
+///
+/// The Model namespace.
+///
+///
+namespace AA05_CommandParCalc.Models.Interfaces;
+
+///
+/// Interface ICalculatorModel
+/// Extends the
+///
+///
+///
+public interface ICalculatorModel : INotifyPropertyChanged
+{
+
+ ///
+ /// Gets the accumulator.
+ ///
+ /// The accumulator.
+ ///
+ double Accumulator { get; }
+ ///
+ /// Gets the register.
+ ///
+ /// The register.
+ ///
+ double? Register { get; }
+ ///
+ /// Gets the memory.
+ ///
+ /// The memory.
+ ///
+ double? Memory { get; }
+ ///
+ /// Gets the dependencies.
+ ///
+ /// The dependencies.
+ ///
+ IEnumerable<(string Dest, string Src)> Dependencies { get; }
+ ///
+ /// Gets the trig mode.
+ ///
+ /// The trig mode.
+ ///
+ ETrigMode TrigMode { get; }
+ ///
+ /// Gets the calculate error.
+ ///
+ /// The calculate error.
+ ///
+ ECalcError CalcError { get; }
+
+ ///
+ /// Gets the size of the stack.
+ ///
+ /// The size of the stack.
+ ///
+ int StackSize { get; }
+ ///
+ /// Determines whether this instance can command the specified e c.
+ ///
+ /// The e c.
+ /// true if this instance can command the specified e c; otherwise, false.
+ ///
+ bool canCommand(ECommands eC);
+ ///
+ /// Calculates the command.
+ ///
+ /// The o.
+ ///
+ void CalcCmd(ECommands o);
+ ///
+ /// Determines whether this instance can operator the specified e o.
+ ///
+ /// The e o.
+ /// true if this instance can operator the specified e o; otherwise, false.
+ ///
+ bool canOperator(EOperations eO);
+ ///
+ /// Operators the command.
+ ///
+ /// The e o.
+ ///
+ void OperatorCmd(EOperations eO);
+ ///
+ /// Numbers the command.
+ ///
+ /// The o.
+ ///
+ void NumberCmd(ENumbers o);
+}
diff --git a/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Models/Interfaces/ICommandParCalcModel.cs b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Models/Interfaces/ICommandParCalcModel.cs
new file mode 100644
index 000000000..f78d97e00
--- /dev/null
+++ b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Models/Interfaces/ICommandParCalcModel.cs
@@ -0,0 +1,22 @@
+// ***********************************************************************
+// Assembly : AA05_CommandParCalc
+// Author : Mir
+// Created : 01-11-2025
+//
+// Last Modified By : Mir
+// Last Modified On : 01-12-2025
+// ***********************************************************************
+//
+// Copyright © JC-Soft 2025
+//
+//
+// ***********************************************************************
+using System;
+using System.ComponentModel;
+
+namespace AA05_CommandParCalc.Models.Interfaces;
+
+public interface ICommandParCalcModel :INotifyPropertyChanged
+{
+ DateTime Now { get; }
+}
diff --git a/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Models/Interfaces/ICyclTimer.cs b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Models/Interfaces/ICyclTimer.cs
new file mode 100644
index 000000000..9e306f3f3
--- /dev/null
+++ b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Models/Interfaces/ICyclTimer.cs
@@ -0,0 +1,29 @@
+// ***********************************************************************
+// Assembly : AA05_CommandParCalc
+// Author : Mir
+// Created : 01-11-2025
+//
+// Last Modified By : Mir
+// Last Modified On : 01-12-2025
+// ***********************************************************************
+//
+// Copyright © JC-Soft 2025
+//
+//
+// ***********************************************************************
+using System;
+using System.ComponentModel;
+using System.Timers;
+
+namespace AA05_CommandParCalc.Models.Interfaces;
+
+public interface ICyclTimer
+{
+ double Interval { get; set; }
+ bool Enabled { get; }
+ bool AutoReset { get; set; }
+ event ElapsedEventHandler Elapsed;
+ void Start();
+ void Stop();
+
+}
diff --git a/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Models/Interfaces/ISysTime.cs b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Models/Interfaces/ISysTime.cs
new file mode 100644
index 000000000..c5d8fe2e0
--- /dev/null
+++ b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Models/Interfaces/ISysTime.cs
@@ -0,0 +1,23 @@
+// ***********************************************************************
+// Assembly : AA05_CommandParCalc
+// Author : Mir
+// Created : 01-11-2025
+//
+// Last Modified By : Mir
+// Last Modified On : 01-12-2025
+// ***********************************************************************
+//
+// Copyright © JC-Soft 2025
+//
+//
+// ***********************************************************************
+using System;
+
+namespace AA05_CommandParCalc.Models.Interfaces;
+
+public interface ISysTime
+{
+ DateTime Now { get; }
+ DateTime UtcNow { get; }
+ DateTime Today { get; }
+}
diff --git a/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Models/SysTime.cs b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Models/SysTime.cs
new file mode 100644
index 000000000..300f61060
--- /dev/null
+++ b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Models/SysTime.cs
@@ -0,0 +1,46 @@
+// ***********************************************************************
+// Assembly : AA05_CommandParCalc
+// Author : Mir
+// Created : 01-13-2025
+//
+// Last Modified By : Mir
+// Last Modified On : 01-13-2025
+// ***********************************************************************
+//
+// Copyright © JC-Soft 2025
+//
+//
+// ***********************************************************************
+using AA05_CommandParCalc.Models.Interfaces;
+using System;
+
+///
+/// The Models namespace.
+///
+namespace AA05_CommandParCalc.Models;
+
+///
+/// Class SysTime.
+/// Implements the
+///
+///
+public class SysTime : ISysTime
+{
+ ///
+ /// Gets the now.
+ ///
+ /// The now.
+ public DateTime Now => DateTime.Now;
+
+ ///
+ /// Gets the UTC now.
+ ///
+ /// The UTC now.
+ public DateTime UtcNow => DateTime.UtcNow;
+
+ ///
+ /// Gets the today.
+ ///
+ /// The today.
+ public DateTime Today => DateTime.Today;
+}
diff --git a/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Models/TimerProxy.cs b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Models/TimerProxy.cs
new file mode 100644
index 000000000..dbacc6c25
--- /dev/null
+++ b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Models/TimerProxy.cs
@@ -0,0 +1,37 @@
+// ***********************************************************************
+// Assembly : AA05_CommandParCalc
+// Author : Mir
+// Created : 01-13-2025
+//
+// Last Modified By : Mir
+// Last Modified On : 01-13-2025
+// ***********************************************************************
+//
+// Copyright © JC-Soft 2025
+//
+//
+// ***********************************************************************
+using AA05_CommandParCalc.Models.Interfaces;
+
+///
+/// The Models namespace.
+///
+namespace AA05_CommandParCalc.Models;
+
+///
+/// Class TimerProxy.
+/// Implements the
+/// Implements the
+///
+///
+///
+public class TimerProxy : System.Timers.Timer , ICyclTimer
+{
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ public TimerProxy() : base()
+ {
+ Interval = 1000;
+ }
+}
diff --git a/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Program.cs b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Program.cs
new file mode 100644
index 000000000..1f27ba5f5
--- /dev/null
+++ b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Program.cs
@@ -0,0 +1,57 @@
+// ***********************************************************************
+// Assembly : AA05_CommandParCalc
+// Author : Mir
+// Created : 01-11-2025
+//
+// Last Modified By : Mir
+// Last Modified On : 01-11-2025
+// ***********************************************************************
+//
+// Copyright © JC-Soft 2025
+//
+//
+// ***********************************************************************
+using System;
+using Avalonia;
+
+///
+/// The AA05_CommandParCalc namespace.
+///
+namespace AA05_CommandParCalc;
+
+///
+/// Class Program. This class cannot be inherited.
+///
+public sealed class Program
+{
+ // Initialization code. Don't use any Avalonia, third-party APIs or any
+ // SynchronizationContext-reliant code before AppMain is called: things aren't initialized
+ // yet and stuff might break.
+ ///
+ /// Defines the entry point of the application.
+ ///
+ /// The arguments.
+ [STAThread]
+ public static void Main(string[] args)
+ => BuildAvaloniaApp()
+ .StartWithClassicDesktopLifetime(args);
+
+ // Avalonia configuration, don't remove; also used by visual designer.
+ ///
+ /// Builds the avalonia application.
+ ///
+ /// AppBuilder.
+ public static AppBuilder BuildAvaloniaApp() //{ get; set; } = ()
+ => GetAppBuilder();
+
+ ///
+ /// Builds the avalonia application.
+ ///
+ /// AppBuilder.
+ public static Func GetAppBuilder{ get; set; } = ()
+ => AppBuilder.Configure()
+ .UsePlatformDetect()
+ .WithInterFont()
+ .LogToTrace();
+
+}
diff --git a/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Properties/Resources.Designer.cs b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Properties/Resources.Designer.cs
new file mode 100644
index 000000000..191f18a18
--- /dev/null
+++ b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Properties/Resources.Designer.cs
@@ -0,0 +1,450 @@
+//------------------------------------------------------------------------------
+//
+// Dieser Code wurde von einem Tool generiert.
+// Laufzeitversion:4.0.30319.42000
+//
+// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
+// der Code erneut generiert wird.
+//
+//------------------------------------------------------------------------------
+
+namespace AA05_CommandParCalc.Properties {
+ using System;
+
+
+ ///
+ /// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw.
+ ///
+ // Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert
+ // -Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert.
+ // Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen
+ // mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "18.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ public class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ ///
+ /// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ public static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("AA05_CommandParCalc.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle
+ /// Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ public static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+
+ ///
+ /// Sucht eine lokalisierte Zeichenfolge, die 0 ähnelt.
+ ///
+ public static string btn0 {
+ get {
+ return ResourceManager.GetString("btn0", resourceCulture);
+ }
+ }
+
+ ///
+ /// Sucht eine lokalisierte Zeichenfolge, die 1 ähnelt.
+ ///
+ public static string btn1 {
+ get {
+ return ResourceManager.GetString("btn1", resourceCulture);
+ }
+ }
+
+ ///
+ /// Sucht eine lokalisierte Zeichenfolge, die 1/x ähnelt.
+ ///
+ public static string btn1_x {
+ get {
+ return ResourceManager.GetString("btn1_x", resourceCulture);
+ }
+ }
+
+ ///
+ /// Sucht eine lokalisierte Zeichenfolge, die 2 ähnelt.
+ ///
+ public static string btn2 {
+ get {
+ return ResourceManager.GetString("btn2", resourceCulture);
+ }
+ }
+
+ ///
+ /// Sucht eine lokalisierte Zeichenfolge, die 3 ähnelt.
+ ///
+ public static string btn3 {
+ get {
+ return ResourceManager.GetString("btn3", resourceCulture);
+ }
+ }
+
+ ///
+ /// Sucht eine lokalisierte Zeichenfolge, die 4 ähnelt.
+ ///
+ public static string btn4 {
+ get {
+ return ResourceManager.GetString("btn4", resourceCulture);
+ }
+ }
+
+ ///
+ /// Sucht eine lokalisierte Zeichenfolge, die 5 ähnelt.
+ ///
+ public static string btn5 {
+ get {
+ return ResourceManager.GetString("btn5", resourceCulture);
+ }
+ }
+
+ ///
+ /// Sucht eine lokalisierte Zeichenfolge, die 6 ähnelt.
+ ///
+ public static string btn6 {
+ get {
+ return ResourceManager.GetString("btn6", resourceCulture);
+ }
+ }
+
+ ///
+ /// Sucht eine lokalisierte Zeichenfolge, die 7 ähnelt.
+ ///
+ public static string btn7 {
+ get {
+ return ResourceManager.GetString("btn7", resourceCulture);
+ }
+ }
+
+ ///
+ /// Sucht eine lokalisierte Zeichenfolge, die 8 ähnelt.
+ ///
+ public static string btn8 {
+ get {
+ return ResourceManager.GetString("btn8", resourceCulture);
+ }
+ }
+
+ ///
+ /// Sucht eine lokalisierte Zeichenfolge, die 9 ähnelt.
+ ///
+ public static string btn9 {
+ get {
+ return ResourceManager.GetString("btn9", resourceCulture);
+ }
+ }
+
+ ///
+ /// Sucht eine lokalisierte Zeichenfolge, die Actions ähnelt.
+ ///
+ public static string btnActions {
+ get {
+ return ResourceManager.GetString("btnActions", resourceCulture);
+ }
+ }
+
+ ///
+ /// Sucht eine lokalisierte Zeichenfolge, die ) ähnelt.
+ ///
+ public static string btnBrClose {
+ get {
+ return ResourceManager.GetString("btnBrClose", resourceCulture);
+ }
+ }
+
+ ///
+ /// Sucht eine lokalisierte Zeichenfolge, die ( ähnelt.
+ ///
+ public static string btnBrOpen {
+ get {
+ return ResourceManager.GetString("btnBrOpen", resourceCulture);
+ }
+ }
+
+ ///
+ /// Sucht eine lokalisierte Zeichenfolge, die C/CE ähnelt.
+ ///
+ public static string btnC_CE {
+ get {
+ return ResourceManager.GetString("btnC_CE", resourceCulture);
+ }
+ }
+
+ ///
+ /// Sucht eine lokalisierte Zeichenfolge, die Configuration ähnelt.
+ ///
+ public static string btnConfig {
+ get {
+ return ResourceManager.GetString("btnConfig", resourceCulture);
+ }
+ }
+
+ ///
+ /// Sucht eine lokalisierte Zeichenfolge, die cos ähnelt.
+ ///
+ public static string btnCos {
+ get {
+ return ResourceManager.GetString("btnCos", resourceCulture);
+ }
+ }
+
+ ///
+ /// Sucht eine lokalisierte Zeichenfolge, die . ähnelt.
+ ///
+ public static string btnDecp {
+ get {
+ return ResourceManager.GetString("btnDecp", resourceCulture);
+ }
+ }
+
+ ///
+ /// Sucht eine lokalisierte Zeichenfolge, die / ähnelt.
+ ///
+ public static string btnDiv {
+ get {
+ return ResourceManager.GetString("btnDiv", resourceCulture);
+ }
+ }
+
+ ///
+ /// Sucht eine lokalisierte Zeichenfolge, die e ähnelt.
+ ///
+ public static string btnE {
+ get {
+ return ResourceManager.GetString("btnE", resourceCulture);
+ }
+ }
+
+ ///
+ /// Sucht eine lokalisierte Zeichenfolge, die eˣ ähnelt.
+ ///
+ public static string btnE_X {
+ get {
+ return ResourceManager.GetString("btnE_X", resourceCulture);
+ }
+ }
+
+ ///
+ /// Sucht eine lokalisierte Zeichenfolge, die = ähnelt.
+ ///
+ public static string btnEquals {
+ get {
+ return ResourceManager.GetString("btnEquals", resourceCulture);
+ }
+ }
+
+ ///
+ /// Sucht eine lokalisierte Zeichenfolge, die History ähnelt.
+ ///
+ public static string btnHistory {
+ get {
+ return ResourceManager.GetString("btnHistory", resourceCulture);
+ }
+ }
+
+ ///
+ /// Sucht eine lokalisierte Zeichenfolge, die Home ähnelt.
+ ///
+ public static string btnHome {
+ get {
+ return ResourceManager.GetString("btnHome", resourceCulture);
+ }
+ }
+
+ ///
+ /// Sucht eine lokalisierte Zeichenfolge, die Inv ähnelt.
+ ///
+ public static string btnInv {
+ get {
+ return ResourceManager.GetString("btnInv", resourceCulture);
+ }
+ }
+
+ ///
+ /// Sucht eine lokalisierte Zeichenfolge, die log ähnelt.
+ ///
+ public static string btnLog {
+ get {
+ return ResourceManager.GetString("btnLog", resourceCulture);
+ }
+ }
+
+ ///
+ /// Sucht eine lokalisierte Zeichenfolge, die Macros ähnelt.
+ ///
+ public static string btnMacros {
+ get {
+ return ResourceManager.GetString("btnMacros", resourceCulture);
+ }
+ }
+
+ ///
+ /// Sucht eine lokalisierte Zeichenfolge, die MC ähnelt.
+ ///
+ public static string btnMemClr {
+ get {
+ return ResourceManager.GetString("btnMemClr", resourceCulture);
+ }
+ }
+
+ ///
+ /// Sucht eine lokalisierte Zeichenfolge, die M- ähnelt.
+ ///
+ public static string btnMemMinus {
+ get {
+ return ResourceManager.GetString("btnMemMinus", resourceCulture);
+ }
+ }
+
+ ///
+ /// Sucht eine lokalisierte Zeichenfolge, die M+ ähnelt.
+ ///
+ public static string btnMemPlus {
+ get {
+ return ResourceManager.GetString("btnMemPlus", resourceCulture);
+ }
+ }
+
+ ///
+ /// Sucht eine lokalisierte Zeichenfolge, die MR ähnelt.
+ ///
+ public static string btnMemRetr {
+ get {
+ return ResourceManager.GetString("btnMemRetr", resourceCulture);
+ }
+ }
+
+ ///
+ /// Sucht eine lokalisierte Zeichenfolge, die MS ähnelt.
+ ///
+ public static string btnMemStore {
+ get {
+ return ResourceManager.GetString("btnMemStore", resourceCulture);
+ }
+ }
+
+ ///
+ /// Sucht eine lokalisierte Zeichenfolge, die - ähnelt.
+ ///
+ public static string btnMinus {
+ get {
+ return ResourceManager.GetString("btnMinus", resourceCulture);
+ }
+ }
+
+ ///
+ /// Sucht eine lokalisierte Zeichenfolge, die * ähnelt.
+ ///
+ public static string btnMul {
+ get {
+ return ResourceManager.GetString("btnMul", resourceCulture);
+ }
+ }
+
+ ///
+ /// Sucht eine lokalisierte Zeichenfolge, die +/- ähnelt.
+ ///
+ public static string btnNeg {
+ get {
+ return ResourceManager.GetString("btnNeg", resourceCulture);
+ }
+ }
+
+ ///
+ /// Sucht eine lokalisierte Zeichenfolge, die π ähnelt.
+ ///
+ public static string btnPi {
+ get {
+ return ResourceManager.GetString("btnPi", resourceCulture);
+ }
+ }
+
+ ///
+ /// Sucht eine lokalisierte Zeichenfolge, die + ähnelt.
+ ///
+ public static string btnPlus {
+ get {
+ return ResourceManager.GetString("btnPlus", resourceCulture);
+ }
+ }
+
+ ///
+ /// Sucht eine lokalisierte Zeichenfolge, die Process ähnelt.
+ ///
+ public static string btnProcess {
+ get {
+ return ResourceManager.GetString("btnProcess", resourceCulture);
+ }
+ }
+
+ ///
+ /// Sucht eine lokalisierte Zeichenfolge, die Reports ähnelt.
+ ///
+ public static string btnReports {
+ get {
+ return ResourceManager.GetString("btnReports", resourceCulture);
+ }
+ }
+
+ ///
+ /// Sucht eine lokalisierte Zeichenfolge, die sin ähnelt.
+ ///
+ public static string btnSin {
+ get {
+ return ResourceManager.GetString("btnSin", resourceCulture);
+ }
+ }
+
+ ///
+ /// Sucht eine lokalisierte Zeichenfolge, die √x ähnelt.
+ ///
+ public static string btnSqX {
+ get {
+ return ResourceManager.GetString("btnSqX", resourceCulture);
+ }
+ }
+
+ ///
+ /// Sucht eine lokalisierte Zeichenfolge, die tan ähnelt.
+ ///
+ public static string btnTan {
+ get {
+ return ResourceManager.GetString("btnTan", resourceCulture);
+ }
+ }
+
+ ///
+ /// Sucht eine lokalisierte Zeichenfolge, die X² ähnelt.
+ ///
+ public static string btnX2 {
+ get {
+ return ResourceManager.GetString("btnX2", resourceCulture);
+ }
+ }
+ }
+}
diff --git a/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Properties/Resources.de.resx b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Properties/Resources.de.resx
new file mode 100644
index 000000000..cc30a1df0
--- /dev/null
+++ b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Properties/Resources.de.resx
@@ -0,0 +1,141 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Aktionen
+
+
+ Einstellungen
+
+
+ Historie
+
+
+ Anfang
+
+
+ Makros
+
+
+ Prozess
+
+
+ Auswertung
+
+
diff --git a/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Properties/Resources.en.resx b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Properties/Resources.en.resx
new file mode 100644
index 000000000..590e7ddf7
--- /dev/null
+++ b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Properties/Resources.en.resx
@@ -0,0 +1,141 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Actions
+
+
+ Configuration
+
+
+ History
+
+
+ Home
+
+
+ Macros
+
+
+ Process
+
+
+ Reports
+
+
diff --git a/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Properties/Resources.fr.resx b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Properties/Resources.fr.resx
new file mode 100644
index 000000000..590e7ddf7
--- /dev/null
+++ b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Properties/Resources.fr.resx
@@ -0,0 +1,141 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Actions
+
+
+ Configuration
+
+
+ History
+
+
+ Home
+
+
+ Macros
+
+
+ Process
+
+
+ Reports
+
+
diff --git a/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Properties/Resources.resx b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Properties/Resources.resx
new file mode 100644
index 000000000..375341ab5
--- /dev/null
+++ b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Properties/Resources.resx
@@ -0,0 +1,286 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 1
+ @Invariant
+
+
+ 1/x
+ @Invariant
+
+
+ 2
+ @Invariant
+
+
+ 3
+ @Invariant
+
+
+ 4
+ @Invariant
+
+
+ 5
+ @Invariant
+
+
+ 6
+ @Invariant
+
+
+ 7
+ @Invariant
+
+
+ 8
+ @Invariant
+
+
+ 9
+ @Invariant
+
+
+ Actions
+
+
+ )
+ @Invariant
+
+
+ (
+ @Invariant
+
+
+ Configuration
+ Caption for Button "Config"
+
+
+ cos
+ @Invariant
+
+
+ C/CE
+ @Invariant
+
+
+ .
+ @Invariant
+
+
+ /
+ @Invariant
+
+
+ e
+ @Invariant
+
+
+ =
+ @Invariant
+
+
+ eˣ
+ @Invariant
+
+
+ History
+
+
+ Home
+
+
+ Inv
+ @Invariant
+
+
+ log
+ @Invariant
+
+
+ Macros
+
+
+ MC
+ @Invariant
+
+
+ M-
+ @Invariant
+
+
+ M+
+ @Invariant
+
+
+ MR
+ @Invariant
+
+
+ MS
+ @Invariant
+
+
+ -
+ @Invariant
+
+
+ *
+ @Invariant
+
+
+ +/-
+ @Invariant
+
+
+ π
+ @Invariant
+
+
+ +
+ @Invariant
+
+
+ Process
+
+
+ Reports
+
+
+ sin
+ @Invariant
+
+
+ √x
+ @Invariant
+
+
+ tan
+ @Invariant
+
+
+ X²
+ @Invariant
+
+
+ 0
+ @Invariant
+
+
\ No newline at end of file
diff --git a/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Styles/AppDefaultStyles.axaml b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Styles/AppDefaultStyles.axaml
new file mode 100644
index 000000000..307bd586c
--- /dev/null
+++ b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/Styles/AppDefaultStyles.axaml
@@ -0,0 +1,251 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/ViewLocator.cs b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/ViewLocator.cs
new file mode 100644
index 000000000..02cef30df
--- /dev/null
+++ b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/ViewLocator.cs
@@ -0,0 +1,62 @@
+// ***********************************************************************
+// Assembly : AA05_CommandParCalc
+// Author : Mir
+// Created : 01-11-2025
+//
+// Last Modified By : Mir
+// Last Modified On : 01-11-2025
+// ***********************************************************************
+//
+// Copyright © JC-Soft 2025
+//
+//
+// ***********************************************************************
+using System;
+using Avalonia.Controls;
+using Avalonia.Controls.Templates;
+using AA05_CommandParCalc.ViewModels;
+
+///
+/// The AA05_CommandParCalc namespace.
+///
+namespace AA05_CommandParCalc;
+
+///
+/// Class ViewLocator.
+/// Implements the
+///
+///
+public class ViewLocator : IDataTemplate
+{
+
+ ///
+ /// Creates the control.
+ ///
+ /// The parameter.
+ /// The created control.
+ public Control? Build(object? param)
+ {
+ if (param is null)
+ return null;
+
+ var name = param.GetType().FullName!.Replace("ViewModel", "View", StringComparison.Ordinal);
+ var type = Type.GetType(name);
+
+ if (type != null)
+ {
+ return (Control)Activator.CreateInstance(type)!;
+ }
+
+ return new TextBlock { Text = "Not Found: " + name };
+ }
+
+ ///
+ /// Checks to see if this data CommandParCalc matches the specified data.
+ ///
+ /// The data.
+ /// True if the data CommandParCalc can build a control for the data, otherwise false.
+ public bool Match(object? data)
+ {
+ return data is ViewModelBase;
+ }
+}
diff --git a/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/ViewModels/CommandParCalcViewModel.cs b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/ViewModels/CommandParCalcViewModel.cs
new file mode 100644
index 000000000..0677403cd
--- /dev/null
+++ b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/ViewModels/CommandParCalcViewModel.cs
@@ -0,0 +1,124 @@
+// ***********************************************************************
+// Assembly : AA05_CommandParCalc
+// Author : Mir
+// Created : 01-11-2025
+//
+// Last Modified By : Mir
+// Last Modified On : 01-13-2025
+// ***********************************************************************
+//
+// Copyright © JC-Soft 2025
+//
+//
+// ***********************************************************************
+using System;
+using System.Reflection;
+using AA05_CommandParCalc.Models.Interfaces;
+using AA05_CommandParCalc.ViewModels.Interfaces;
+using CommunityToolkit.Mvvm.ComponentModel;
+using CommunityToolkit.Mvvm.Input;
+
+///
+/// The ViewModels namespace.
+///
+namespace AA05_CommandParCalc.ViewModels;
+
+///
+/// Class CommandParCalcViewModel.
+/// Implements the
+/// and the
+///
+///
+///
+public partial class CommandParCalcViewModel : ViewModelBase, ICommandParCalcViewModel
+{
+ ///
+ /// Gets the greeting.
+ ///
+ /// The greeting.
+ [ObservableProperty]
+ public partial string Greeting { get; set; } = "Welcome to Avalonia!";
+
+ [ObservableProperty]
+ public partial string Title { get; set; } = "Main Menu";
+
+ ///
+ /// Gets the now.
+ ///
+ /// The now.
+ public DateTime Now => _model.Now;
+
+ ///
+ /// The model
+ ///
+ private ICommandParCalcModel _model;
+
+ public CommandParCalcViewModel()
+ {
+ Greeting = $"Welcome to Avalonia! The current time is {DateTime.Now}";
+ _model = null!;
+ }
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// The model.
+ public CommandParCalcViewModel(ICommandParCalcModel model)
+ {
+ Greeting = $"Welcome to Avalonia! The current time is {model.Now}";
+ _model = model;
+ _model.PropertyChanged += Model_PropertyChanged;
+ }
+
+ ///
+ /// Handles the PropertyChanged event of the Model control.
+ ///
+ /// The source of the event.
+ /// The instance containing the event data.
+ private void Model_PropertyChanged(object? sender, System.ComponentModel.PropertyChangedEventArgs e)
+ {
+ if (!string.IsNullOrEmpty(e.PropertyName)
+ && (GetType().GetProperty(e.PropertyName,BindingFlags.Public|BindingFlags.Instance|BindingFlags.IgnoreCase) is PropertyInfo pi ))
+ {
+ OnPropertyChanged(pi.Name);
+ }
+ }
+
+ [RelayCommand]
+ private void Home()
+ {
+ Greeting = $"Hello, Avalonia!";
+ }
+ [RelayCommand]
+ private void Actions()
+ {
+ Greeting = $"Action:";
+ }
+ [RelayCommand]
+ private void Macros()
+ {
+ Greeting = $"Macros:";
+ }
+ [RelayCommand]
+ private void Process()
+ {
+ Greeting = $"Process:";
+ }
+ [RelayCommand]
+ private void Reports()
+ {
+ Greeting = $"Reports:";
+ }
+ [RelayCommand]
+ private void History()
+ {
+ Greeting = $"History:";
+ }
+ [RelayCommand]
+ private void Config()
+ {
+ Greeting = $"Config:";
+ }
+
+
+}
diff --git a/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/ViewModels/CommandParCalculatorViewModel.cs b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/ViewModels/CommandParCalculatorViewModel.cs
new file mode 100644
index 000000000..74a4240a8
--- /dev/null
+++ b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/ViewModels/CommandParCalculatorViewModel.cs
@@ -0,0 +1,134 @@
+// ***********************************************************************
+// Assembly : AA05_CommandParCalc
+// Author : Mir
+// Created : 05-11-2023
+//
+// Last Modified By : Mir
+// Last Modified On : 05-19-2023
+// ***********************************************************************
+//
+// Copyright JC-Soft 2023
+//
+//
+// ***********************************************************************
+using CommunityToolkit.Mvvm.Input;
+using System;
+using System.ComponentModel;
+using AA05_CommandParCalc.Models;
+using AA05_CommandParCalc.Models.Interfaces;
+using AA05_CommandParCalc.Data;
+using AA05_CommandParCalc.ViewModels.Interfaces;
+
+///
+/// The ViewModels namespace.
+///
+///
+namespace AA05_CommandParCalc.ViewModels;
+
+///
+/// Class CommandParCalculatorViewModel.
+/// Implements the
+///
+///
+///
+public partial class CommandParCalculatorViewModel : ViewModelBase , ICommandParCalculatorViewModel
+{
+ #region Properties
+ ///
+ /// Gets or sets the get model.
+ ///
+ /// The get model.
+ ///
+ public static Func GetModel { get; set; } = () => CalculatorModel.Instance;
+ ///
+ /// The model
+ ///
+ ///
+ private ICalculatorModel _model;
+
+ ///
+ /// Gets the accumulator.
+ ///
+ /// The accumulator.
+ ///
+ public double Accumulator => _model.Accumulator;
+ ///
+ /// Gets the memory.
+ ///
+ /// The memory.
+ ///
+ public double Memory => _model.Memory ?? double.NaN;
+ ///
+ /// Gets the register.
+ ///
+ /// The register.
+ ///
+ public double Register => _model.Register ?? double.NaN;
+ ///
+ /// Gets the status.
+ ///
+ /// The status.
+ ///
+ public string Status => $"{_model.CalcError} {_model.TrigMode} ";
+ #endregion
+
+ #region Methods
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ ///
+ public CommandParCalculatorViewModel():this(GetModel())
+ {
+ }
+ public CommandParCalculatorViewModel(ICalculatorModel model)
+ {
+ _model = model;
+ _model.PropertyChanged += OnMPropertyChanged;
+ foreach (var d in _model.Dependencies)
+ AddPropertyDependency(d.Dest, d.Src);
+ AddPropertyDependency(nameof(OperatorCommand), nameof(canOperator));
+ AddPropertyDependency(nameof(CalculatorCommand), nameof(canCommand));
+ }
+
+ ///
+ /// Determines whether this instance can operator the specified e o.
+ ///
+ /// The e o.
+ /// true if this instance can operator the specified e o; otherwise, false.
+ ///
+ public bool canOperator(EOperations eO) => FuncProxy(eO, _model.canOperator);
+ ///
+ /// Determines whether this instance can command the specified e c.
+ ///
+ /// The e c.
+ /// true if this instance can command the specified e c; otherwise, false.
+ ///
+ public bool canCommand(ECommands eC) => FuncProxy(eC, _model.canCommand);
+
+ [RelayCommand()]
+ private void Number(ENumbers eN) => _model.NumberCmd(eN);
+
+ [RelayCommand(CanExecute = nameof(canOperator))]
+ private void Operator(EOperations eO) => _model.OperatorCmd(eO);
+
+ [RelayCommand(CanExecute = nameof(canCommand))]
+ private void Calculator(ECommands eC) => _model.CalcCmd(eC);
+
+ ///
+ /// Handles the event.
+ ///
+ /// The sender.
+ /// The instance containing the event data.
+ ///
+ private void OnMPropertyChanged(object sender, PropertyChangedEventArgs e)
+ {
+ if (e.PropertyName == nameof(Accumulator))
+ OnPropertyChanged(e.PropertyName);
+ if (e.PropertyName == nameof(Memory))
+ OnPropertyChanged(e.PropertyName);
+ if (e.PropertyName == nameof(Register))
+ OnPropertyChanged(e.PropertyName);
+ }
+ #endregion
+
+}
diff --git a/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/ViewModels/Interfaces/ICommandParCalcViewModel.cs b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/ViewModels/Interfaces/ICommandParCalcViewModel.cs
new file mode 100644
index 000000000..1b1e94439
--- /dev/null
+++ b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/ViewModels/Interfaces/ICommandParCalcViewModel.cs
@@ -0,0 +1,33 @@
+// ***********************************************************************
+// Assembly : AA05_CommandParCalc
+// Author : Mir
+// Created : 01-11-2025
+//
+// Last Modified By : Mir
+// Last Modified On : 01-12-2025
+// ***********************************************************************
+//
+// Copyright © JC-Soft 2025
+//
+//
+// ***********************************************************************
+using CommunityToolkit.Mvvm.Input;
+using System;
+
+namespace AA05_CommandParCalc.ViewModels.Interfaces
+{
+ public interface ICommandParCalcViewModel
+ {
+ string Greeting { get; }
+ string Title { get; }
+ DateTime Now { get; }
+
+ IRelayCommand HomeCommand { get; }
+ IRelayCommand ConfigCommand { get; }
+ IRelayCommand ProcessCommand { get; }
+ IRelayCommand ActionsCommand { get; }
+ IRelayCommand MacrosCommand { get; }
+ IRelayCommand ReportsCommand { get; }
+ IRelayCommand HistoryCommand { get; }
+ }
+}
diff --git a/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/ViewModels/Interfaces/ICommandParCalculatorViewModel.cs b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/ViewModels/Interfaces/ICommandParCalculatorViewModel.cs
new file mode 100644
index 000000000..a886ba3a1
--- /dev/null
+++ b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/ViewModels/Interfaces/ICommandParCalculatorViewModel.cs
@@ -0,0 +1,29 @@
+// ***********************************************************************
+// Assembly : AA05_CommandParCalc
+// Author : Mir
+// Created : 05-11-2023
+//
+// Last Modified By : Mir
+// Last Modified On : 05-19-2023
+// ***********************************************************************
+//
+// Copyright © JC-Soft 2023
+//
+//
+// ***********************************************************************
+using AA05_CommandParCalc.Data;
+using CommunityToolkit.Mvvm.Input;
+
+namespace AA05_CommandParCalc.ViewModels.Interfaces;
+
+public interface ICommandParCalculatorViewModel
+{
+ double Accumulator { get; }
+ double Memory { get; }
+ double Register { get; }
+ string Status { get; }
+
+ public IRelayCommand CalculatorCommand { get; }
+ public IRelayCommand NumberCommand { get; }
+ public IRelayCommand OperatorCommand { get; }
+}
\ No newline at end of file
diff --git a/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/ViewModels/Interfaces/IPropertyBinding.cs b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/ViewModels/Interfaces/IPropertyBinding.cs
new file mode 100644
index 000000000..c45639a56
--- /dev/null
+++ b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/ViewModels/Interfaces/IPropertyBinding.cs
@@ -0,0 +1,31 @@
+// ***********************************************************************
+// Assembly : MVVM_BaseLib
+// Author : Mir
+// Created : 08-02-2022
+//
+// Last Modified By : Mir
+// Last Modified On : 08-20-2022
+// ***********************************************************************
+//
+// Copyright (c) JC-Soft. All rights reserved.
+//
+//
+// ***********************************************************************
+using System.Runtime.CompilerServices;
+
+namespace AA05_CommandParCalc.ViewModels.Interfaces;
+
+public interface IPropertyBinding
+{
+ void AppendKnownParams(object? param, [CallerMemberName] string propertyName = "");
+
+ /// Adds the property dependency.
+ /// The (name of the) dependent properts.
+ /// The (name of the) property it depends on.
+ ///
+ /// true if is a valid property or function, false otherwise.
+ ///
+ bool AddPropertyDependency(string prop1, string prop2, bool xForce = false);
+ bool RemovePropertyDependency(string prop1, string prop2);
+
+}
\ No newline at end of file
diff --git a/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/ViewModels/ViewModelBase.cs b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/ViewModels/ViewModelBase.cs
new file mode 100644
index 000000000..44ec0fa91
--- /dev/null
+++ b/Avalonia_Apps/AA05_CommandParCalc/AA05_CommandParCalc/ViewModels/ViewModelBase.cs
@@ -0,0 +1,163 @@
+// ***********************************************************************
+// Assembly : AA05_CommandParCalc
+// Author : Mir
+// Created : 01-11-2025
+//
+// Last Modified By : Mir
+// Last Modified On : 01-11-2025
+// ***********************************************************************
+//
+// Copyright © JC-Soft 2025
+//
+//
+// ***********************************************************************
+using AA05_CommandParCalc.ViewModels.Interfaces;
+using CommunityToolkit.Mvvm.ComponentModel;
+using CommunityToolkit.Mvvm.Input;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Runtime.CompilerServices;
+using System;
+
+///
+/// The ViewModels namespace.
+///
+namespace AA05_CommandParCalc.ViewModels;
+
+///
+/// Class ViewModelBase.
+/// Implements the
+///
+///
+public class ViewModelBase : ObservableObject ,IPropertyBinding
+{
+ #region Properties
+ ///
+ /// Occurs when the property is changed.
+ ///
+ private readonly Dictionary<(string, object?), object?> _PropertyOldValue = new();
+
+ ///
+ /// The known parameters
+ ///
+ protected Dictionary> KnownParams = new();
+ ///
+ /// The command can execute binding
+ ///
+ private readonly Dictionary> _CommandCanExecuteBinding = new();
+ #endregion
+
+ #region Methods
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ public ViewModelBase()
+ {
+ PropertyChanged += InternalBindingHandler;
+ }
+
+ ///
+ /// Internals the binding handler.
+ ///
+ /// The sender.
+ /// The instance containing the event data.
+ private void InternalBindingHandler(object? sender, PropertyChangedEventArgs e)
+ {
+
+ if (sender == this && _CommandCanExecuteBinding.TryGetValue(e.PropertyName ?? "", out var l))
+ foreach (var t in l)
+ switch (GetType().GetProperty(t.Item1))
+ {
+ case System.Reflection.PropertyInfo pi when pi.GetValue(this) is IRelayCommand rc:
+ rc.NotifyCanExecuteChanged();
+ break;
+
+ case System.Reflection.PropertyInfo pi:
+ {
+ var newVal = pi.GetValue(this);
+ NewMethod(t, newVal);
+ }
+ break;
+ default:
+ if (GetType().GetMethod(t.Item1) is System.Reflection.MethodInfo mi)
+ {
+ if (mi.GetParameters().Length == 0)
+ {
+ var newVal = mi.Invoke(this, Array.Empty