Initial commit

Basic ui with placeholders
This commit is contained in:
2025-12-23 08:47:36 +01:00
commit 49d433e8ac
17 changed files with 812 additions and 0 deletions

16
StarterNG/App.axaml Normal file
View File

@@ -0,0 +1,16 @@
<Application xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sukiUi="clr-namespace:SukiUI;assembly=SukiUI"
xmlns:materialIcons="clr-namespace:Material.Icons.Avalonia;assembly=Material.Icons.Avalonia"
x:Class="StarterNG.App"
RequestedThemeVariant="Default">
<!-- "Default" ThemeVariant follows system theme variant. "Dark" or "Light" are other available options. -->
<Application.Styles>
<sukiUi:SukiTheme ThemeColor="Green" />
<materialIcons:MaterialIconStyles />
</Application.Styles>
<Application.Resources>
<PathGeometry x:Key="DiscordLogo" Figures="M 81.15 0 c -1.2376 2.1973 -2.3489 4.4704 -3.3591 6.794 c -9.5975 -1.4396 -19.3718 -1.4396 -28.9945 0 c -0.985 -2.3236 -2.1216 -4.5967 -3.3591 -6.794 c -9.0166 1.5407 -17.8059 4.2431 -26.1405 8.0568 C 2.779 32.5304 -1.6914 56.3725 0.5312 79.8863 c 9.6732 7.1476 20.5083 12.603 32.0505 16.0884 c 2.6014 -3.4854 4.8998 -7.1981 6.8698 -11.0623 c -3.738 -1.3891 -7.3497 -3.1318 -10.8098 -5.1523 c 0.9092 -0.6567 1.7932 -1.3386 2.6519 -1.9953 c 20.281 9.547 43.7696 9.547 64.0758 0 c 0.8587 0.7072 1.7427 1.3891 2.6519 1.9953 c -3.4601 2.0457 -7.0718 3.7632 -10.835 5.1776 c 1.97 3.8642 4.2683 7.5769 6.8698 11.0623 c 11.5419 -3.4854 22.3769 -8.9156 32.0509 -16.0631 c 2.626 -27.2771 -4.496 -50.9172 -18.817 -71.8548 C 98.9811 4.2684 90.1918 1.5659 81.1752 0.0505 l -0.0252 -0.0505 Z M 42.2802 65.4144 c -6.2383 0 -11.4159 -5.6575 -11.4159 -12.6535 s 4.9755 -12.6788 11.3907 -12.6788 s 11.5169 5.708 11.4159 12.6788 c -0.101 6.9708 -5.026 12.6535 -11.3907 12.6535 Z M 84.3576 65.4144 c -6.2637 0 -11.3907 -5.6575 -11.3907 -12.6535 s 4.9755 -12.6788 11.3907 -12.6788 s 11.4917 5.708 11.3906 12.6788 c -0.101 6.9708 -5.026 12.6535 -11.3906 12.6535 Z" FillRule="NonZero"/>
</Application.Resources>
</Application>

23
StarterNG/App.axaml.cs Normal file
View File

@@ -0,0 +1,23 @@
using Avalonia;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Markup.Xaml;
namespace StarterNG;
public partial class App : Application
{
public override void Initialize()
{
AvaloniaXamlLoader.Load(this);
}
public override void OnFrameworkInitializationCompleted()
{
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
{
desktop.MainWindow = new MainWindow();
}
base.OnFrameworkInitializationCompleted();
}
}

View File

@@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><svg id="Discord-Logo" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 126.644 96"><defs><style>.cls-1{fill:#fff;}</style></defs><path id="Discord-Symbol-White" class="cls-1" d="M81.15,0c-1.2376,2.1973-2.3489,4.4704-3.3591,6.794-9.5975-1.4396-19.3718-1.4396-28.9945,0-.985-2.3236-2.1216-4.5967-3.3591-6.794-9.0166,1.5407-17.8059,4.2431-26.1405,8.0568C2.779,32.5304-1.6914,56.3725.5312,79.8863c9.6732,7.1476,20.5083,12.603,32.0505,16.0884,2.6014-3.4854,4.8998-7.1981,6.8698-11.0623-3.738-1.3891-7.3497-3.1318-10.8098-5.1523.9092-.6567,1.7932-1.3386,2.6519-1.9953,20.281,9.547,43.7696,9.547,64.0758,0,.8587.7072,1.7427,1.3891,2.6519,1.9953-3.4601,2.0457-7.0718,3.7632-10.835,5.1776,1.97,3.8642,4.2683,7.5769,6.8698,11.0623,11.5419-3.4854,22.3769-8.9156,32.0509-16.0631,2.626-27.2771-4.496-50.9172-18.817-71.8548C98.9811,4.2684,90.1918,1.5659,81.1752.0505l-.0252-.0505ZM42.2802,65.4144c-6.2383,0-11.4159-5.6575-11.4159-12.6535s4.9755-12.6788,11.3907-12.6788,11.5169,5.708,11.4159,12.6788c-.101,6.9708-5.026,12.6535-11.3907,12.6535ZM84.3576,65.4144c-6.2637,0-11.3907-5.6575-11.3907-12.6535s4.9755-12.6788,11.3907-12.6788,11.4917,5.708,11.3906,12.6788c-.101,6.9708-5.026,12.6535-11.3906,12.6535Z"/></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" ?>
<ResourceDictionary xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns="https://github.com/avaloniaui">
<DrawingGroup x:Key="Discord_xaml">
<DrawingGroup.ClipGeometry>
<RectangleGeometry Rect="0.0,0.0,126.644,96.0"/>
</DrawingGroup.ClipGeometry>
<GeometryDrawing Brush="#ffffffff">
<GeometryDrawing.Geometry>
<PathGeometry Figures="M 81.15 0 c -1.2376 2.1973 -2.3489 4.4704 -3.3591 6.794 c -9.5975 -1.4396 -19.3718 -1.4396 -28.9945 0 c -0.985 -2.3236 -2.1216 -4.5967 -3.3591 -6.794 c -9.0166 1.5407 -17.8059 4.2431 -26.1405 8.0568 C 2.779 32.5304 -1.6914 56.3725 0.5312 79.8863 c 9.6732 7.1476 20.5083 12.603 32.0505 16.0884 c 2.6014 -3.4854 4.8998 -7.1981 6.8698 -11.0623 c -3.738 -1.3891 -7.3497 -3.1318 -10.8098 -5.1523 c 0.9092 -0.6567 1.7932 -1.3386 2.6519 -1.9953 c 20.281 9.547 43.7696 9.547 64.0758 0 c 0.8587 0.7072 1.7427 1.3891 2.6519 1.9953 c -3.4601 2.0457 -7.0718 3.7632 -10.835 5.1776 c 1.97 3.8642 4.2683 7.5769 6.8698 11.0623 c 11.5419 -3.4854 22.3769 -8.9156 32.0509 -16.0631 c 2.626 -27.2771 -4.496 -50.9172 -18.817 -71.8548 C 98.9811 4.2684 90.1918 1.5659 81.1752 0.0505 l -0.0252 -0.0505 Z M 42.2802 65.4144 c -6.2383 0 -11.4159 -5.6575 -11.4159 -12.6535 s 4.9755 -12.6788 11.3907 -12.6788 s 11.5169 5.708 11.4159 12.6788 c -0.101 6.9708 -5.026 12.6535 -11.3907 12.6535 Z M 84.3576 65.4144 c -6.2637 0 -11.3907 -5.6575 -11.3907 -12.6535 s 4.9755 -12.6788 11.3907 -12.6788 s 11.4917 5.708 11.3906 12.6788 c -0.101 6.9708 -5.026 12.6535 -11.3906 12.6535 Z" FillRule="NonZero"/>
</GeometryDrawing.Geometry>
</GeometryDrawing>
</DrawingGroup>
<DrawingImage Drawing="{StaticResource Discord_xaml}" x:Key="di_Discord_xaml"/>
</ResourceDictionary>

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 11 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

139
StarterNG/MainWindow.axaml Normal file
View File

@@ -0,0 +1,139 @@
<sukiUi:SukiWindow
x:Class="StarterNG.MainWindow"
xmlns="https://github.com/avaloniaui"
xmlns:sukiUi="clr-namespace:SukiUI.Controls;assembly=SukiUI"
xmlns:materialIcons="clr-namespace:Material.Icons.Avalonia;assembly=Material.Icons.Avalonia"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:svg="clr-namespace:Avalonia.Svg;assembly=Avalonia.Svg"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MaSzyna - Symulator pojazdów szynowych" Height="600" Width="800">
<sukiUi:SukiSideMenu IsMenuExpanded="False">
<sukiUi:SukiSideMenu.Items>
<!-- SCENARIUSZE -->
<sukiUi:SukiSideMenuItem Header="Scenariusze" Classes="Compact" >
<sukiUi:SukiSideMenuItem.Icon>
<materialIcons:MaterialIcon Kind="ListBox"/>
</sukiUi:SukiSideMenuItem.Icon>
<sukiUi:SukiSideMenuItem.PageContent>
<Grid Margin="16" ColumnSpacing="16" RowSpacing="16">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition Height="100"/>
<RowDefinition Height="40"/>
</Grid.RowDefinitions>
<sukiUi:GroupBox Grid.RowSpan="2" Header="Scenerie">
<TreeView>
<TreeViewItem Header="Bałtyk">
<TreeViewItem Header="Bałtyk Euro 2012" />
<TreeViewItem Header="Bałtyk SKM 1" />
<TreeViewItem Header="Bałtyk SKM 2" />
</TreeViewItem>
<TreeViewItem Header="Linia 053">
<TreeViewItem Header="Linia 053 - poranek" />
<TreeViewItem Header="Linia 053 - południe" />
<TreeViewItem Header="Linia 053 - wieczór" />
<TreeViewItem Header="Linia 053 - noc" />
</TreeViewItem>
</TreeView>
</sukiUi:GroupBox>
<sukiUi:GroupBox Grid.Column="1" Header="Pojazdy">
<ListBox>
<ListBoxItem>EP07P-2003</ListBoxItem>
<ListBoxItem>EP07-1049</ListBoxItem>
<ListBoxItem>EN57AKM-1562</ListBoxItem>
</ListBox>
</sukiUi:GroupBox>
<sukiUi:GroupBox Grid.Column="1" Grid.Row="1" Header="Opis scenariusza">
<ScrollViewer VerticalScrollBarVisibility="Auto">
<TextBlock TextWrapping="Wrap">
Prowadzimy RegioExpress RPE23119 z Dębicy do Sandomierza. Misję rozpoczynamy w lokomotywowni w Dębicy. Jedziemy zgodnie ze wskazaniami tarcz manewrowych na bocznicę z drugiej strony stacji, gdzie przypinamy wagony do naszego składu, po czym wciągamy je w peron. Następnie jedziemy do Sandomierza, zatrzymując się po drodze tylko w Turowie. Po przyjeździe do Sandomierza odczepiamy lokomotywę i zjeżdżamy na tor postojowy, gdzie kończymy służbę. Czas misji: ok. 80 minut.
</TextBlock>
</ScrollViewer>
</sukiUi:GroupBox>
<sukiUi:GroupBox Header="Zestawienie" Grid.Row="2" Grid.ColumnSpan="2">
<ScrollViewer VerticalAlignment="Bottom"
HorizontalScrollBarVisibility="Auto"
VerticalScrollBarVisibility="Disabled">
<StackPanel Orientation="Horizontal">
<Image Source="avares://StarterNG/Assets/Test/ep07p.bmp" Height="50"></Image>
</StackPanel>
</ScrollViewer>
</sukiUi:GroupBox>
<Button Grid.Column="1" Height="36" Classes="Flat"
VerticalAlignment="Bottom" Grid.Row="3">Start</Button>
</Grid>
</sukiUi:SukiSideMenuItem.PageContent>
</sukiUi:SukiSideMenuItem>
<!-- Lokomotywownia -->
<sukiUi:SukiSideMenuItem Header="Magazyn" Classes="Compact" >
<sukiUi:SukiSideMenuItem.Icon>
<materialIcons:MaterialIcon Kind="Train"/>
</sukiUi:SukiSideMenuItem.Icon>
<sukiUi:SukiSideMenuItem.PageContent>
<Label>MaSzyna</Label>
</sukiUi:SukiSideMenuItem.PageContent>
</sukiUi:SukiSideMenuItem>
<!-- Ustawienia -->
<sukiUi:SukiSideMenuItem Header="Ustawienia" Classes="Compact" >
<sukiUi:SukiSideMenuItem.Icon>
<materialIcons:MaterialIcon Kind="Settings"/>
</sukiUi:SukiSideMenuItem.Icon>
<sukiUi:SukiSideMenuItem.PageContent>
<Label>MaSzyna</Label>
</sukiUi:SukiSideMenuItem.PageContent>
</sukiUi:SukiSideMenuItem>
</sukiUi:SukiSideMenu.Items>
<sukiUi:SukiSideMenu.HeaderContent>
<svg:Svg
Path="/Assets/Logo/maszyna_white.svg"
Width="200"
Margin="16"
Height="60"/>
</sukiUi:SukiSideMenu.HeaderContent>
<sukiUi:SukiSideMenu.FooterContent>
<StackPanel HorizontalAlignment="Center" Orientation="Horizontal">
<!-- eu07.pl -->
<Button Classes="Basic" Cursor="Hand" Tag="http://eu07.pl/" Click="linkClick">
<materialIcons:MaterialIcon Kind="Web" />
</Button>
<!-- Discord -->
<Button Classes="Basic" Cursor="Hand" Tag="https://discord.gg/qAh9ctWPQv" Click="linkClick">
<PathIcon Data="{StaticResource DiscordLogo}" Height="12" />
</Button>
<!-- Facebook -->
<Button Classes="Basic" Cursor="Hand" Tag="http://www.facebook.com/MaSzynaeu07pl" Click="linkClick">
<materialIcons:MaterialIcon Kind="Facebook" />
</Button>
<!-- Youtube -->
<Button Classes="Basic" Cursor="Hand" Tag="http://www.youtube.com/@eu07official" Click="linkClick">
<materialIcons:MaterialIcon Kind="Youtube" />
</Button>
<!-- Github -->
<Button Classes="Basic" Cursor="Hand" Tag="http://github.com/MaSzyna-EU07/" Click="linkClick">
<materialIcons:MaterialIcon Kind="Github" />
</Button>
</StackPanel>
</sukiUi:SukiSideMenu.FooterContent>
</sukiUi:SukiSideMenu>
</sukiUi:SukiWindow>

View File

@@ -0,0 +1,26 @@
using System.Diagnostics;
using Avalonia.Controls;
using Avalonia.Interactivity;
using SukiUI.Controls;
namespace StarterNG;
public partial class MainWindow : SukiWindow
{
public MainWindow()
{
InitializeComponent();
}
private void linkClick(object? sender, RoutedEventArgs e)
{
if (sender is not Button btn)
return;
if (btn.Tag is not string url || string.IsNullOrWhiteSpace(url))
return;
Process.Start(new ProcessStartInfo(url)
{
UseShellExecute = true
});
}
}

21
StarterNG/Program.cs Normal file
View File

@@ -0,0 +1,21 @@
using Avalonia;
using System;
namespace StarterNG;
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.
[STAThread]
public static void Main(string[] args) => BuildAvaloniaApp()
.StartWithClassicDesktopLifetime(args);
// Avalonia configuration, don't remove; also used by visual designer.
public static AppBuilder BuildAvaloniaApp()
=> AppBuilder.Configure<App>()
.UsePlatformDetect()
.WithInterFont()
.LogToTrace();
}

View File

@@ -0,0 +1,41 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net9.0</TargetFramework>
<Nullable>enable</Nullable>
<BuiltInComInteropSupport>true</BuiltInComInteropSupport>
<ApplicationManifest>app.manifest</ApplicationManifest>
<AvaloniaUseCompiledBindingsByDefault>true</AvaloniaUseCompiledBindingsByDefault>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Avalonia" Version="11.3.10" />
<PackageReference Include="Avalonia.Desktop" Version="11.3.10" />
<PackageReference Include="Avalonia.Svg" Version="11.3.0" />
<PackageReference Include="Avalonia.Themes.Fluent" Version="11.3.10" />
<PackageReference Include="Avalonia.Fonts.Inter" Version="11.3.10" />
<!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->
<PackageReference Include="Avalonia.Diagnostics" Version="11.3.10">
<IncludeAssets Condition="'$(Configuration)' != 'Debug'">None</IncludeAssets>
<PrivateAssets Condition="'$(Configuration)' != 'Debug'">All</PrivateAssets>
</PackageReference>
<PackageReference Include="HotAvalonia" Version="3.0.2" />
<PackageReference Include="Material.Icons.Avalonia" Version="2.4.1" />
<PackageReference Include="SukiUI" Version="6.0.3" />
</ItemGroup>
<ItemGroup>
<Folder Include="Assets\Logo\" />
</ItemGroup>
<ItemGroup>
<None Remove="Assets\Logo\maszyna_black.svg" />
<AvaloniaResource Include="Assets\Logo\maszyna_black.svg" />
<None Remove="Assets\Logo\maszyna_white.svg" />
<AvaloniaResource Include="Assets\Logo\maszyna_white.svg" />
<None Remove="Assets\Logo\Other\Discord.svg" />
<AvaloniaResource Include="Assets\Logo\Other\Discord.svg" />
<None Remove="Assets\Test\ep07p.bmp" />
<AvaloniaResource Include="Assets\Test\ep07p.bmp" />
</ItemGroup>
</Project>

18
StarterNG/app.manifest Normal file
View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<!-- This manifest is used on Windows only.
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 -->
<assemblyIdentity version="1.0.0.0" name="StarterNG.Desktop"/>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- A list of the Windows versions that this application has been tested on
and is designed to work with. Uncomment the appropriate elements
and Windows will automatically select the most compatible environment. -->
<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
</application>
</compatibility>
</assembly>