diff --git a/src/CalcViewModel/StandardCalculatorViewModel.cpp b/src/CalcViewModel/StandardCalculatorViewModel.cpp index 4fa0100c..caeb5bb2 100644 --- a/src/CalcViewModel/StandardCalculatorViewModel.cpp +++ b/src/CalcViewModel/StandardCalculatorViewModel.cpp @@ -1188,19 +1188,20 @@ void StandardCalculatorViewModel::SetCalculatorType(ViewMode targetState) { case ViewMode::Standard: IsStandard = true; - ResetRadix(); + ResetRadixAndUpdateMemory(true); SetPrecision(StandardModePrecision); UpdateMaxIntDigits(); break; case ViewMode::Scientific: IsScientific = true; - ResetRadix(); + ResetRadixAndUpdateMemory(true); SetPrecision(ScientificModePrecision); break; case ViewMode::Programmer: IsProgrammer = true; + ResetRadixAndUpdateMemory(false); SetPrecision(ProgrammerModePrecision); break; } @@ -1226,11 +1227,18 @@ String ^ StandardCalculatorViewModel::GetLocalizedStringFormat(String ^ format, return LocalizationStringUtil::GetLocalizedString(format, displayValue); } -void StandardCalculatorViewModel::ResetRadix() +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 01bd982b..0af82478 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 ResetRadix(); + void ResetRadixAndUpdateMemory(bool resetRadix); void SetPrecision(int32_t precision); void UpdateMaxIntDigits() diff --git a/src/CalculatorUnitTests/StandardViewModelUnitTests.cpp b/src/CalculatorUnitTests/StandardViewModelUnitTests.cpp index bdde89f6..875511c9 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->ResetRadix(); + 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->ResetRadix(); + viewModel->ResetRadixAndUpdateMemory(true); viewModel->SetPrecision(ScientificModePrecision); } else if (mode == 2) @@ -58,6 +58,7 @@ namespace CalculatorUnitTests viewModel->IsProgrammer = true; viewModel->IsScientific = false; viewModel->IsStandard = false; + viewModel->ResetRadixAndUpdateMemory(false); viewModel->SetPrecision(ProgrammerModePrecision); } } @@ -803,14 +804,6 @@ namespace CalculatorUnitTests MemoryItemViewModel ^ memorySlotScientific = (MemoryItemViewModel ^) m_viewModel->MemorizedNumbers->GetAt(0); VERIFY_ARE_EQUAL(Platform::StringReference(L"1,001.1"), memorySlotScientific->Value); ChangeMode(m_viewModel, 2 /*Programmer*/); - TESTITEM items2[] = { - { NumbersAndOperatorsEnum::One, L"1", L"" }, { NumbersAndOperatorsEnum::Zero, L"10", L"" }, - { NumbersAndOperatorsEnum::Zero, L"100", L"" }, { NumbersAndOperatorsEnum::One, L"1,001", L"" }, - { NumbersAndOperatorsEnum::None, L"", L"" }, - }; - ValidateViewModelByCommands(m_viewModel, items2, true); - m_viewModel->OnMemoryButtonPressed(); - m_viewModel->OnMemoryItemPressed(ref new Platform::Box(0)); MemoryItemViewModel ^ memorySlotProgrammer = (MemoryItemViewModel ^) m_viewModel->MemorizedNumbers->GetAt(0); VERIFY_ARE_EQUAL(Platform::StringReference(L"1,001"), memorySlotProgrammer->Value); }