made buttons square and added hotkeys

This commit is contained in:
2026-01-11 03:15:23 +05:00
parent 595c02231c
commit a08838bb8b
7 changed files with 104 additions and 78 deletions

2
.gitmodules vendored
View File

@@ -1,3 +1,3 @@
[submodule "FusionCalculator"]
path = FusionCalculator
url = https://timerix.ddns.net:3322/Timerix/FusionCalculator.git
url = https://timerix.ddns.net/git/Timerix/FusionCalculator.git

View File

@@ -7,7 +7,7 @@ Requirements: git, bash, [dotnet8](https://dotnet.microsoft.com/en-us/download/d
1. ensure that [FusionCalculator](https://github.com/Timerix22/FusionCalculator) submodule is up-to-date.
```shell
git submodule init && git submodule update
it submodule update --init
```
2. Translate FusionCalculator to C#
```shell

View File

@@ -11,14 +11,14 @@
<Setter Property="VerticalAlignment" Value="Center"/>
</Style>
<Style Selector="Button.cirlce">
<Setter Property="Height" Value="60"/>
<Setter Property="Width" Value="60"/>
<Setter Property="CornerRadius" Value="30"/>
<Setter Property="HorizontalAlignment" Value="Center"/>
<Setter Property="VerticalAlignment" Value="Center"/>
<Style Selector="Button.button">
<Setter Property="HorizontalAlignment" Value="Stretch"/>
<Setter Property="VerticalAlignment" Value="Stretch"/>
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Margin" Value="1"/>
<Setter Property="Padding" Value="0"/>
</Style>
<Style Selector="Button.gray">

View File

@@ -5,6 +5,7 @@
Title="SharpCalculator"
Icon="avares://SharpCalculator.Avalonia/assets/icon.ico"
FontFamily="Consolas" FontSize="24"
MinWidth="460" MinHeight="570"
Width="460" Height="570">
<Grid Margin="10">
@@ -14,7 +15,9 @@
TextChanged="Input_OnTextChanged"
BorderThickness="2"
BorderBrush="#AAAAAA"
TextWrapping="Wrap"/>
TextWrapping="Wrap"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ScrollViewer.VerticalScrollBarVisibility="Auto"/>
<TextBlock Grid.Row="1"
VerticalAlignment="Center"
@@ -26,7 +29,9 @@
VerticalContentAlignment="Center"
IsReadOnly="True"
BorderThickness="0"
TextWrapping="NoWrap"/>
TextWrapping="NoWrap"
ScrollViewer.HorizontalScrollBarVisibility="Auto"
ScrollViewer.VerticalScrollBarVisibility="Disabled"/>
<TextBox Name="History" Grid.Row="2"
Foreground="Gray"
@@ -34,7 +39,9 @@
BorderBrush="Gray"
IsReadOnly="True"
TextWrapping="NoWrap"
FontSize="18"/>
FontSize="18"
ScrollViewer.HorizontalScrollBarVisibility="Auto"
ScrollViewer.VerticalScrollBarVisibility="Auto"/>
<Grid Grid.Row="3" VerticalAlignment="Bottom"
MinWidth="440" MaxWidth="440" MinHeight="320" MaxHeight="320">
@@ -43,119 +50,119 @@
<!-- 1st row -->
<Button Classes="cirlce gray" Grid.Column="0" Grid.Row="0"
<Button Classes="button gray" Grid.Column="0" Grid.Row="0"
Click="ClearButton_OnClick" Content="AC"/>
<Button Classes="cirlce gray" Grid.Column="1" Grid.Row="0"
<Button Classes="button gray" Grid.Column="1" Grid.Row="0"
Click="MathButton_OnClick" Content="("/>
<Button Classes="cirlce gray" Grid.Column="2" Grid.Row="0"
<Button Classes="button gray" Grid.Column="2" Grid.Row="0"
Click="MathButton_OnClick" Content=")" />
<Button Classes="cirlce orange" Grid.Column="3" Grid.Row="0"
<Button Classes="button orange" Grid.Column="3" Grid.Row="0"
Click="MathButton_OnClick" Content="/"/>
<Button Classes="cirlce gray" Grid.Column="4" Grid.Row="0"
<Button Classes="button gray" Grid.Column="4" Grid.Row="0"
Click="MathButton_OnClick" Content="1/x"/>
<Button Classes="cirlce gray" Grid.Column="5" Grid.Row="0"
<Button Classes="button gray" Grid.Column="5" Grid.Row="0"
Click="MathButton_OnClick" Content="sin"/>
<Button Classes="cirlce gray" Grid.Column="6" Grid.Row="0"
<Button Classes="button gray" Grid.Column="6" Grid.Row="0"
Click="MathButton_OnClick" Content="asin"/>
<!-- 2nd row -->
<Button Classes="cirlce" Grid.Column="0" Grid.Row="1"
<Button Classes="button" Grid.Column="0" Grid.Row="1"
Click="MathButton_OnClick" Content="7"/>
<Button Classes="cirlce" Grid.Column="1" Grid.Row="1"
<Button Classes="button" Grid.Column="1" Grid.Row="1"
Click="MathButton_OnClick" Content="8"/>
<Button Classes="cirlce" Grid.Column="2" Grid.Row="1"
<Button Classes="button" Grid.Column="2" Grid.Row="1"
Click="MathButton_OnClick" Content="9"/>
<Button Classes="cirlce orange" Grid.Column="3" Grid.Row="1"
<Button Classes="button orange" Grid.Column="3" Grid.Row="1"
Click="MathButton_OnClick" Content="*"/>
<Button Classes="cirlce gray" Grid.Column="4" Grid.Row="1"
<Button Classes="button gray" Grid.Column="4" Grid.Row="1"
Click="MathButton_OnClick" Content="^"/>
<Button Classes="cirlce gray" Grid.Column="5" Grid.Row="1"
<Button Classes="button gray" Grid.Column="5" Grid.Row="1"
Click="MathButton_OnClick" Content="cos"/>
<Button Classes="cirlce gray" Grid.Column="6" Grid.Row="1"
<Button Classes="button gray" Grid.Column="6" Grid.Row="1"
Click="MathButton_OnClick" Content="acos"/>
<!-- 3th row -->
<Button Classes="cirlce" Grid.Column="0" Grid.Row="2"
<Button Classes="button" Grid.Column="0" Grid.Row="2"
Click="MathButton_OnClick" Content="4"/>
<Button Classes="cirlce" Grid.Column="1" Grid.Row="2"
<Button Classes="button" Grid.Column="1" Grid.Row="2"
Click="MathButton_OnClick" Content="5"/>
<Button Classes="cirlce" Grid.Column="2" Grid.Row="2"
<Button Classes="button" Grid.Column="2" Grid.Row="2"
Click="MathButton_OnClick" Content="6"/>
<Button Classes="cirlce orange" Grid.Column="3" Grid.Row="2"
<Button Classes="button orange" Grid.Column="3" Grid.Row="2"
Click="MathButton_OnClick" Content="-"/>
<Button Classes="cirlce gray" Grid.Column="4" Grid.Row="2"
<Button Classes="button gray" Grid.Column="4" Grid.Row="2"
FontSize="22"
Click="MathButton_OnClick" Content="10^x"/>
<Button Classes="cirlce gray" Grid.Column="5" Grid.Row="2"
<Button Classes="button gray" Grid.Column="5" Grid.Row="2"
Click="MathButton_OnClick" Content="tg"/>
<Button Classes="cirlce gray" Grid.Column="6" Grid.Row="2"
<Button Classes="button gray" Grid.Column="6" Grid.Row="2"
Click="MathButton_OnClick" Content="atg"/>
<!-- 4th row -->
<Button Classes="cirlce" Grid.Column="0" Grid.Row="3"
<Button Classes="button" Grid.Column="0" Grid.Row="3"
Click="MathButton_OnClick" Content="1"/>
<Button Classes="cirlce" Grid.Column="1" Grid.Row="3"
<Button Classes="button" Grid.Column="1" Grid.Row="3"
Click="MathButton_OnClick" Content="2"/>
<Button Classes="cirlce" Grid.Column="2" Grid.Row="3"
<Button Classes="button" Grid.Column="2" Grid.Row="3"
Click="MathButton_OnClick" Content="3"/>
<Button Classes="cirlce orange" Grid.Column="3" Grid.Row="3"
<Button Classes="button orange" Grid.Column="3" Grid.Row="3"
Click="MathButton_OnClick" Content="+"/>
<Button Classes="cirlce gray" Grid.Column="4" Grid.Row="3"
<Button Classes="button gray" Grid.Column="4" Grid.Row="3"
Click="MathButton_OnClick" Content="e"/>
<Button Classes="cirlce gray" Grid.Column="5" Grid.Row="3"
<Button Classes="button gray" Grid.Column="5" Grid.Row="3"
Click="MathButton_OnClick" Content="ctg"/>
<Button Classes="cirlce gray" Grid.Column="6" Grid.Row="3"
<Button Classes="button gray" Grid.Column="6" Grid.Row="3"
Click="MathButton_OnClick" Content="actg"/>
<!-- 5th row -->
<Button Classes="cirlce" Grid.Column="0" Grid.Row="4"
<Button Classes="button" Grid.Column="0" Grid.Row="4"
Click="MathButton_OnClick" Content="0"/>
<Button Classes="cirlce" Grid.Column="1" Grid.Row="4"
<Button Classes="button" Grid.Column="1" Grid.Row="4"
Click="MathButton_OnClick" Content="."/>
<Button Classes="cirlce" Grid.Column="2" Grid.Row="4"
<Button Classes="button" Grid.Column="2" Grid.Row="4"
Click="MathButton_OnClick" Content="%"/>
<Button Classes="cirlce orange" Grid.Column="3" Grid.Row="4"
<Button Classes="button orange" Grid.Column="3" Grid.Row="4"
Click="ResultButton_OnClick" Content="="/>
<Button Classes="cirlce gray" Grid.Column="4" Grid.Row="4"
<Button Classes="button gray" Grid.Column="4" Grid.Row="4"
Click="MathButton_OnClick" Content="π"/>
<Button Classes="cirlce gray" Grid.Column="5" Grid.Row="4"
<Button Classes="button gray" Grid.Column="5" Grid.Row="4"
FontSize="22"
Click="MathButton_OnClick" Content="rand"/>
<Button Classes="cirlce gray" Grid.Column="6" Grid.Row="4"
<Button Classes="button gray" Grid.Column="6" Grid.Row="4"
Click="MathButton_OnClick" Content="ln"/>
</Grid>
</Grid>

View File

@@ -1,3 +1,4 @@
using Avalonia.Input;
using FusionCalculator;
namespace SharpCalculator.Avalonia;
@@ -9,6 +10,31 @@ public partial class MainWindow : Window
public MainWindow()
{
InitializeComponent();
// https://github.com/AvaloniaUI/Avalonia/discussions/12179
KeyDownEvent.AddClassHandler<TopLevel>(GlobalOnKeyDown, handledEventsToo: true);
}
private void GlobalOnKeyDown(object? sender, KeyEventArgs e)
{
switch (e.Key)
{
case Key.Enter:
CalculateResult();
break;
case Key.Delete:
Clear();
break;
}
}
private void CalculateResult()
{
if(Input.Text == null || Output.Text == null || Output.Text.StartsWith("Error"))
return;
string expression = Input.Text;
string result = Output.Text;
AppendToHistory($"{expression}={result}");
Input.Text = result;
}
private void AppendToHistory(string line) //function of appending expression to the history list
@@ -24,6 +50,23 @@ public partial class MainWindow : Window
.Replace(" ", " ");
}
private void Clear()
{
Input.Clear();
Output.Clear();
}
private void ResultButton_OnClick(object? sender, RoutedEventArgs e)
{
CalculateResult();
}
private void ClearButton_OnClick(object? sender, RoutedEventArgs e)
{
Clear();
}
private void MathButton_OnClick(object? sender, RoutedEventArgs e)
{
if (sender is not Button button)
@@ -49,30 +92,6 @@ public partial class MainWindow : Window
};
}
private void ClearButton_OnClick(object? sender, RoutedEventArgs e)
{
Input.Text = "";
Output.Text = "";
}
private void UndoButton_OnClick(object? sender, RoutedEventArgs e)
{
// delete last digit
// if (!string.IsNullOrEmpty(Input.Text))
// Input.Text = Input.Text.Remove(Input.Text.Length - 1);
Input.Undo();
}
private void ResultButton_OnClick(object? sender, RoutedEventArgs e)
{
if(Input.Text == null || Output.Text == null || Output.Text.StartsWith("Error"))
return;
string expression = Input.Text;
string result = Output.Text;
AppendToHistory($"{expression}={result}");
Input.Text = result;
}
private void Input_OnTextChanged(object? sender, TextChangedEventArgs e)
{
if(Input.Text == null)

View File

@@ -11,10 +11,10 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Avalonia" Version="11.0.6" />
<PackageReference Include="Avalonia.Desktop" Version="11.0.6" />
<PackageReference Include="Avalonia.Themes.Simple" Version="11.0.6" />
<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="11.0.6" />
<PackageReference Include="Avalonia" Version="11.3.10" />
<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" />
</ItemGroup>
<ItemGroup>

View File

@@ -9,13 +9,13 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
<PackageReference Include="xunit" Version="2.6.4" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.6">
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.0.1" />
<PackageReference Include="xunit" Version="2.9.3" />
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.5">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="coverlet.collector" Version="6.0.0">
<PackageReference Include="coverlet.collector" Version="6.0.4">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>