From ce014908e2161b0d7f785742798f10ff56bfaf2b Mon Sep 17 00:00:00 2001 From: hanzhang54 Date: Thu, 19 Aug 2021 15:44:48 +0800 Subject: [PATCH] =?UTF-8?q?Fix=20the=20result=20in=20wrong=20number=20base?= =?UTF-8?q?=20while=20leaving=20and=20switching=20back=20=E2=80=A6=20(#165?= =?UTF-8?q?4)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix the result in wrong number base while leaving and switching back to Programmer * Rename ResetDisplay() to ResetRadix() * Update related unit test * Fixed the decimal number with point in programmer memory --- .../StandardCalculatorViewModel.cpp | 21 ++++++++++++------- .../StandardCalculatorViewModel.h | 2 +- .../StandardViewModelUnitTests.cpp | 6 +++--- 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/src/CalcViewModel/StandardCalculatorViewModel.cpp b/src/CalcViewModel/StandardCalculatorViewModel.cpp index aaf6fb6..caeb5bb 100644 --- a/src/CalcViewModel/StandardCalculatorViewModel.cpp +++ b/src/CalcViewModel/StandardCalculatorViewModel.cpp @@ -1188,20 +1188,20 @@ void StandardCalculatorViewModel::SetCalculatorType(ViewMode targetState) { case ViewMode::Standard: IsStandard = true; - ResetDisplay(); + ResetRadixAndUpdateMemory(true); SetPrecision(StandardModePrecision); UpdateMaxIntDigits(); break; case ViewMode::Scientific: IsScientific = true; - ResetDisplay(); + ResetRadixAndUpdateMemory(true); SetPrecision(ScientificModePrecision); break; case ViewMode::Programmer: IsProgrammer = true; - ResetDisplay(); + ResetRadixAndUpdateMemory(false); SetPrecision(ProgrammerModePrecision); break; } @@ -1227,11 +1227,18 @@ String ^ StandardCalculatorViewModel::GetLocalizedStringFormat(String ^ format, return LocalizationStringUtil::GetLocalizedString(format, displayValue); } -void StandardCalculatorViewModel::ResetDisplay() +void StandardCalculatorViewModel::ResetRadixAndUpdateMemory(bool resetRadix) { - AreHEXButtonsEnabled = false; - CurrentRadixType = NumberBase::DecBase; - m_standardCalculatorManager.SetRadix(RadixType::Decimal); + if (resetRadix) + { + AreHEXButtonsEnabled = false; + CurrentRadixType = NumberBase::DecBase; + m_standardCalculatorManager.SetRadix(RadixType::Decimal); + } + else + { + m_standardCalculatorManager.SetMemorizedNumbersString(); + } } void StandardCalculatorViewModel::SetPrecision(int32_t precision) diff --git a/src/CalcViewModel/StandardCalculatorViewModel.h b/src/CalcViewModel/StandardCalculatorViewModel.h index ac5e877..0af8247 100644 --- a/src/CalcViewModel/StandardCalculatorViewModel.h +++ b/src/CalcViewModel/StandardCalculatorViewModel.h @@ -283,7 +283,7 @@ namespace CalculatorApp void Recalculate(bool fromHistory = false); bool IsOperator(CalculationManager::Command cmdenum); void SetMemorizedNumbersString(); - void ResetDisplay(); + void ResetRadixAndUpdateMemory(bool resetRadix); void SetPrecision(int32_t precision); void UpdateMaxIntDigits() diff --git a/src/CalculatorUnitTests/StandardViewModelUnitTests.cpp b/src/CalculatorUnitTests/StandardViewModelUnitTests.cpp index 113f3f3..875511c 100644 --- a/src/CalculatorUnitTests/StandardViewModelUnitTests.cpp +++ b/src/CalculatorUnitTests/StandardViewModelUnitTests.cpp @@ -42,7 +42,7 @@ namespace CalculatorUnitTests viewModel->IsStandard = true; viewModel->IsScientific = false; viewModel->IsProgrammer = false; - viewModel->ResetDisplay(); + viewModel->ResetRadixAndUpdateMemory(true); viewModel->SetPrecision(StandardModePrecision); } else if (mode == 1) @@ -50,7 +50,7 @@ namespace CalculatorUnitTests viewModel->IsScientific = true; viewModel->IsProgrammer = false; viewModel->IsStandard = false; - viewModel->ResetDisplay(); + viewModel->ResetRadixAndUpdateMemory(true); viewModel->SetPrecision(ScientificModePrecision); } else if (mode == 2) @@ -58,7 +58,7 @@ namespace CalculatorUnitTests viewModel->IsProgrammer = true; viewModel->IsScientific = false; viewModel->IsStandard = false; - viewModel->ResetDisplay(); + viewModel->ResetRadixAndUpdateMemory(false); viewModel->SetPrecision(ProgrammerModePrecision); } }