From 6fbbe8c611622ef6107de4922564c57276eaabe9 Mon Sep 17 00:00:00 2001 From: timerix Date: Fri, 24 Nov 2023 12:59:06 +0600 Subject: [PATCH] Logic --- SharpCalculator.Avalonia/MainWindow.axaml | 2 +- SharpCalculator.Avalonia/MainWindow.axaml.cs | 61 +++++++++---------- .../SharpCalculator.Avalonia.csproj | 4 +- 3 files changed, 33 insertions(+), 34 deletions(-) diff --git a/SharpCalculator.Avalonia/MainWindow.axaml b/SharpCalculator.Avalonia/MainWindow.axaml index 4cd22e8..37cbd60 100644 --- a/SharpCalculator.Avalonia/MainWindow.axaml +++ b/SharpCalculator.Avalonia/MainWindow.axaml @@ -35,8 +35,8 @@ - + \ No newline at end of file diff --git a/SharpCalculator.Avalonia/MainWindow.axaml.cs b/SharpCalculator.Avalonia/MainWindow.axaml.cs index 5b6036a..415a2c5 100644 --- a/SharpCalculator.Avalonia/MainWindow.axaml.cs +++ b/SharpCalculator.Avalonia/MainWindow.axaml.cs @@ -10,45 +10,42 @@ public partial class MainWindow : Window { public MainWindow() { + _currentOperation = _initialOperation; InitializeComponent(); } - private double _rezult; - private StringBuilder currentNumberB = new(); + private double _prevNumber; + private StringBuilder _currentNumberB = new(); - private double CompleteCurrentNumber() - { - var n = double.Parse(currentNumberB.ToString(), CultureInfo.InvariantCulture); - currentNumberB.Clear(); - return n; - } + private double ParseCurrentNumber() => double.Parse(_currentNumberB.ToString(), CultureInfo.InvariantCulture); - private void UpdateOutput() - { - Output.Text = "= " + _rezult; - } - - private Func prevOperation = (_, firstN) => firstN; + readonly Func _initialOperation = (_, firstN) => firstN; + private Func _currentOperation; - private void TryUpdateRezult(Func operation, string text) + private void NewOperation(Func operation, string operationText) { - if (currentNumberB.Length > 0) + // operation replacement + if (_currentNumberB.Length == 0) + Input.Redo(); + else { - _rezult = prevOperation(_rezult, CompleteCurrentNumber()); - prevOperation = operation; - Input.Text += " " + text + " "; + _prevNumber = _currentOperation( _prevNumber, ParseCurrentNumber()); + Output.Text = _prevNumber.ToString(CultureInfo.InvariantCulture); + _currentNumberB.Clear(); } - - UpdateOutput(); + Input.Text = _prevNumber.ToString(CultureInfo.InvariantCulture) + " " + operationText + " "; + _currentOperation = operation; } private void NumberButton_OnClick(object? sender, RoutedEventArgs e) { if (sender is not Button button) throw new Exception(); - string text = button.Content?.ToString()!; + + string text = button.Content!.ToString()!; Input.Text += text; - currentNumberB.Append(text); + _currentNumberB.Append(text); + Output.Text = "= " + _currentOperation(_prevNumber, ParseCurrentNumber()).ToString(CultureInfo.InvariantCulture); } private void OperationButton_OnClick(object? sender, RoutedEventArgs e) @@ -59,22 +56,22 @@ public partial class MainWindow : Window switch (text) { case "+": - TryUpdateRezult((a, b) => a + b, text); + NewOperation((a, b) => a + b, text); break; case "-": - TryUpdateRezult((a, b) => a - b, text); + NewOperation((a, b) => a - b, text); break; case "*": - TryUpdateRezult((a, b) => a * b, text); + NewOperation((a, b) => a * b, text); break; case "/": - TryUpdateRezult((a, b) => a / b, text); + NewOperation((a, b) => a / b, text); break; case "^": - TryUpdateRezult(Math.Pow, text); + NewOperation(Math.Pow, text); break; case "=": - TryUpdateRezult((a, _) => a, ""); + NewOperation((_, newNumber) => newNumber, ""); break; default: throw new Exception("incorrect button text: " + text); @@ -83,8 +80,10 @@ public partial class MainWindow : Window private void ClearButton_OnClick(object? sender, RoutedEventArgs e) { - _rezult = 0; - UpdateOutput(); + _prevNumber = 0; + _currentOperation = _initialOperation; + _currentNumberB.Clear(); Input.Text = ""; + Output.Text = "= 0"; } } \ No newline at end of file diff --git a/SharpCalculator.Avalonia/SharpCalculator.Avalonia.csproj b/SharpCalculator.Avalonia/SharpCalculator.Avalonia.csproj index 8d15fd0..6b8d3a2 100644 --- a/SharpCalculator.Avalonia/SharpCalculator.Avalonia.csproj +++ b/SharpCalculator.Avalonia/SharpCalculator.Avalonia.csproj @@ -1,8 +1,8 @@  WinExe - net8.0 - 12 + net7.0 + 11 enable disable true