AutoGrid and build.sh

This commit is contained in:
2026-01-11 05:39:35 +05:00
parent a08838bb8b
commit dd3cff0eaa
7 changed files with 102 additions and 68 deletions

View File

@@ -4,7 +4,6 @@ global using System.Globalization;
global using Avalonia;
global using Avalonia.Controls;
global using Avalonia.Interactivity;
global using Avalonia.Media;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Markup.Xaml;

View File

@@ -1,6 +1,7 @@
<Window
xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:ag="clr-namespace:AvaloniaAutoGrid;assembly=AvaloniaAutoGrid"
x:Class="SharpCalculator.Avalonia.MainWindow"
Title="SharpCalculator"
Icon="avares://SharpCalculator.Avalonia/assets/icon.ico"
@@ -8,10 +9,11 @@
MinWidth="460" MinHeight="570"
Width="460" Height="570">
<Grid Margin="10">
<Grid.RowDefinitions>1* 40 1* 330</Grid.RowDefinitions>
<TextBox Name="Input" Grid.Row="0"
<!-- ReSharper disable Xaml.MissingGridIndex -->
<ag:AutoGrid Margin="10"
ColumnDefinitions="*"
RowDefinitions="1* 40 1* 330">
<TextBox Name="Input"
TextChanged="Input_OnTextChanged"
BorderThickness="2"
BorderBrush="#AAAAAA"
@@ -19,21 +21,22 @@
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ScrollViewer.VerticalScrollBarVisibility="Auto"/>
<TextBlock Grid.Row="1"
VerticalAlignment="Center"
Foreground="#AAAAAA"
Text="="/>
<TextBox Name="Output" Grid.Row="1"
Margin="16 0 0 0"
VerticalAlignment="Center"
VerticalContentAlignment="Center"
IsReadOnly="True"
BorderThickness="0"
TextWrapping="NoWrap"
ScrollViewer.HorizontalScrollBarVisibility="Auto"
ScrollViewer.VerticalScrollBarVisibility="Disabled"/>
<StackPanel Orientation="Horizontal">
<TextBlock VerticalAlignment="Center"
Foreground="#AAAAAA"
Text="="/>
<TextBox Name="Output"
Margin="16 0 0 0"
VerticalAlignment="Center"
VerticalContentAlignment="Center"
IsReadOnly="True"
BorderThickness="0"
TextWrapping="NoWrap"
ScrollViewer.HorizontalScrollBarVisibility="Auto"
ScrollViewer.VerticalScrollBarVisibility="Disabled"/>
</StackPanel>
<TextBox Name="History" Grid.Row="2"
<TextBox Name="History"
Foreground="Gray"
BorderThickness="1"
BorderBrush="Gray"
@@ -43,127 +46,131 @@
ScrollViewer.HorizontalScrollBarVisibility="Auto"
ScrollViewer.VerticalScrollBarVisibility="Auto"/>
<Grid Grid.Row="3" VerticalAlignment="Bottom"
MinWidth="440" MaxWidth="440" MinHeight="320" MaxHeight="320">
<Grid.ColumnDefinitions>* * * * * * *</Grid.ColumnDefinitions>
<Grid.RowDefinitions>* * * * *</Grid.RowDefinitions>
<!-- ReSharper disable once Xaml.MissingGridIndex -->
<ag:AutoGrid
ColumnDefinitions="*"
RowDefinitions="*"
ColumnCount="7" RowCount="5"
VerticalAlignment="Bottom"
MinWidth="440" MaxWidth="440"
MinHeight="320" MaxHeight="320">
<!-- 1st row -->
<Button Classes="button gray" Grid.Column="0" Grid.Row="0"
<Button Classes="button gray"
Click="ClearButton_OnClick" Content="AC"/>
<Button Classes="button gray" Grid.Column="1" Grid.Row="0"
<Button Classes="button gray"
Click="MathButton_OnClick" Content="("/>
<Button Classes="button gray" Grid.Column="2" Grid.Row="0"
<Button Classes="button gray"
Click="MathButton_OnClick" Content=")" />
<Button Classes="button orange" Grid.Column="3" Grid.Row="0"
<Button Classes="button orange"
Click="MathButton_OnClick" Content="/"/>
<Button Classes="button gray" Grid.Column="4" Grid.Row="0"
<Button Classes="button gray"
Click="MathButton_OnClick" Content="1/x"/>
<Button Classes="button gray" Grid.Column="5" Grid.Row="0"
<Button Classes="button gray"
Click="MathButton_OnClick" Content="sin"/>
<Button Classes="button gray" Grid.Column="6" Grid.Row="0"
<Button Classes="button gray"
Click="MathButton_OnClick" Content="asin"/>
<!-- 2nd row -->
<Button Classes="button" Grid.Column="0" Grid.Row="1"
<Button Classes="button"
Click="MathButton_OnClick" Content="7"/>
<Button Classes="button" Grid.Column="1" Grid.Row="1"
<Button Classes="button"
Click="MathButton_OnClick" Content="8"/>
<Button Classes="button" Grid.Column="2" Grid.Row="1"
<Button Classes="button"
Click="MathButton_OnClick" Content="9"/>
<Button Classes="button orange" Grid.Column="3" Grid.Row="1"
<Button Classes="button orange"
Click="MathButton_OnClick" Content="*"/>
<Button Classes="button gray" Grid.Column="4" Grid.Row="1"
<Button Classes="button gray"
Click="MathButton_OnClick" Content="^"/>
<Button Classes="button gray" Grid.Column="5" Grid.Row="1"
<Button Classes="button gray"
Click="MathButton_OnClick" Content="cos"/>
<Button Classes="button gray" Grid.Column="6" Grid.Row="1"
<Button Classes="button gray"
Click="MathButton_OnClick" Content="acos"/>
<!-- 3th row -->
<Button Classes="button" Grid.Column="0" Grid.Row="2"
<Button Classes="button"
Click="MathButton_OnClick" Content="4"/>
<Button Classes="button" Grid.Column="1" Grid.Row="2"
<Button Classes="button"
Click="MathButton_OnClick" Content="5"/>
<Button Classes="button" Grid.Column="2" Grid.Row="2"
<Button Classes="button"
Click="MathButton_OnClick" Content="6"/>
<Button Classes="button orange" Grid.Column="3" Grid.Row="2"
<Button Classes="button orange"
Click="MathButton_OnClick" Content="-"/>
<Button Classes="button gray" Grid.Column="4" Grid.Row="2"
<Button Classes="button gray"
FontSize="22"
Click="MathButton_OnClick" Content="10^x"/>
<Button Classes="button gray" Grid.Column="5" Grid.Row="2"
<Button Classes="button gray"
Click="MathButton_OnClick" Content="tg"/>
<Button Classes="button gray" Grid.Column="6" Grid.Row="2"
<Button Classes="button gray"
Click="MathButton_OnClick" Content="atg"/>
<!-- 4th row -->
<Button Classes="button" Grid.Column="0" Grid.Row="3"
<Button Classes="button"
Click="MathButton_OnClick" Content="1"/>
<Button Classes="button" Grid.Column="1" Grid.Row="3"
<Button Classes="button"
Click="MathButton_OnClick" Content="2"/>
<Button Classes="button" Grid.Column="2" Grid.Row="3"
<Button Classes="button"
Click="MathButton_OnClick" Content="3"/>
<Button Classes="button orange" Grid.Column="3" Grid.Row="3"
<Button Classes="button orange"
Click="MathButton_OnClick" Content="+"/>
<Button Classes="button gray" Grid.Column="4" Grid.Row="3"
<Button Classes="button gray"
Click="MathButton_OnClick" Content="e"/>
<Button Classes="button gray" Grid.Column="5" Grid.Row="3"
<Button Classes="button gray"
Click="MathButton_OnClick" Content="ctg"/>
<Button Classes="button gray" Grid.Column="6" Grid.Row="3"
<Button Classes="button gray"
Click="MathButton_OnClick" Content="actg"/>
<!-- 5th row -->
<Button Classes="button" Grid.Column="0" Grid.Row="4"
<Button Classes="button"
Click="MathButton_OnClick" Content="0"/>
<Button Classes="button" Grid.Column="1" Grid.Row="4"
<Button Classes="button"
Click="MathButton_OnClick" Content="."/>
<Button Classes="button" Grid.Column="2" Grid.Row="4"
<Button Classes="button"
Click="MathButton_OnClick" Content="%"/>
<Button Classes="button orange" Grid.Column="3" Grid.Row="4"
<Button Classes="button orange"
Click="ResultButton_OnClick" Content="="/>
<Button Classes="button gray" Grid.Column="4" Grid.Row="4"
<Button Classes="button gray"
Click="MathButton_OnClick" Content="π"/>
<Button Classes="button gray" Grid.Column="5" Grid.Row="4"
<Button Classes="button gray"
FontSize="22"
Click="MathButton_OnClick" Content="rand"/>
<Button Classes="button gray" Grid.Column="6" Grid.Row="4"
<Button Classes="button gray"
Click="MathButton_OnClick" Content="ln"/>
</Grid>
</Grid>
</ag:AutoGrid>
</ag:AutoGrid>
</Window>

View File

@@ -1,8 +1,4 @@
using Avalonia;
using System;
using System.Globalization;
namespace SharpCalculator.Avalonia;
namespace SharpCalculator.Avalonia;
class Program
{

View File

@@ -1,13 +1,15 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<LangVersion>12</LangVersion>
<TargetFramework>net10.0</TargetFramework>
<LangVersion>latest</LangVersion>
<Nullable>enable</Nullable>
<ImplicitUsings>disable</ImplicitUsings>
<BuiltInComInteropSupport>true</BuiltInComInteropSupport>
<AvaloniaUseCompiledBindingsByDefault>true</AvaloniaUseCompiledBindingsByDefault>
<ApplicationIcon>assets\icon.ico</ApplicationIcon>
<PublishTrimmed>true</PublishTrimmed>
<PublishAot>true</PublishAot>
</PropertyGroup>
<ItemGroup>
@@ -15,6 +17,7 @@
<PackageReference Include="Avalonia.Desktop" Version="11.3.10" />
<PackageReference Include="Avalonia.Themes.Simple" Version="11.3.10" />
<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="11.3.10" />
<PackageReference Include="Russkyc.AvaloniaAutoGrid" Version="1.0.0" />
</ItemGroup>
<ItemGroup>

View File

@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>disable</ImplicitUsings>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>

View File

@@ -9,6 +9,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "solution_items", "solution_
.gitignore = .gitignore
.gitmodules = .gitmodules
README.md = README.md
build.sh = build.sh
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpCalculator.Tests", "SharpCalculator.Tests\SharpCalculator.Tests.csproj", "{E929E48D-D11B-4FB5-AC6F-D0D50E2B3BD1}"

28
build.sh Normal file
View File

@@ -0,0 +1,28 @@
#!/usr/bin/env bash
set -eo pipefail
outdir="bin"
project="SharpCalculator.Avalonia"
# Somebody broke dotnet10 sdk .target files
# To publish self-contained trimmed binary you should add <PublishTrimmed>true</PublishTrimmed> to project file.
# Command-line option -p:PublishTrimmed=true produces an error.
# Same with <PublishAot>true</PublishAot> if you want AOT compilation.
args="
--self-contained
--use-current-runtime
-p:PublishSingleFile=true
-p:TrimMode=partial
-p:EnableCompressionInSingleFile=true
-p:OptimizationPreference=Size
-p:InvariantGlobalization=true
-p:DebugType=none
-p:IncludeNativeLibrariesForSelfExtract=true"
rm -rf "$outdir"
command="dotnet publish $project -c Release -o $outdir $args"
echo "$command"
$command
find "$outdir" -name '*.pdb' -delete -printf "deleted '%p'\n"
tree -sh "$outdir"