Use only NumberBase to represent radix in CalcViewModel (#797)

This commit is contained in:
Rudy Huyn 2019-11-14 07:09:17 -08:00 committed by Matt Cooley
parent b9b0e068cd
commit 1380c7ed83
8 changed files with 46 additions and 54 deletions

View File

@ -79,7 +79,7 @@ StandardCalculatorViewModel::StandardCalculatorViewModel()
, m_valueBitLength(BitLength::BitLengthQWord) , m_valueBitLength(BitLength::BitLengthQWord)
, m_isBitFlipChecked(false) , m_isBitFlipChecked(false)
, m_isBinaryBitFlippingEnabled(false) , m_isBinaryBitFlippingEnabled(false)
, m_CurrentRadixType(RADIX_TYPE::DEC_RADIX) , m_CurrentRadixType(NumberBase::DecBase)
, m_CurrentAngleType(NumbersAndOperatorsEnum::Degree) , m_CurrentAngleType(NumbersAndOperatorsEnum::Degree)
, m_Announcement(nullptr) , m_Announcement(nullptr)
, m_OpenParenthesisCount(0) , m_OpenParenthesisCount(0)
@ -168,7 +168,7 @@ String ^ StandardCalculatorViewModel::CalculateNarratorDisplayValue(_In_ wstring
} }
// In Programmer modes using non-base10, we want the strings to be read as literal digits. // In Programmer modes using non-base10, we want the strings to be read as literal digits.
if (IsProgrammer && CurrentRadixType != RADIX_TYPE::DEC_RADIX) if (IsProgrammer && CurrentRadixType != NumberBase::DecBase)
{ {
localizedValue = GetNarratorStringReadRawNumbers(localizedValue); localizedValue = GetNarratorStringReadRawNumbers(localizedValue);
} }
@ -681,23 +681,18 @@ void StandardCalculatorViewModel::OnButtonPressed(Object ^ parameter)
} }
} }
NumberBase StandardCalculatorViewModel::GetNumberBase() RADIX_TYPE StandardCalculatorViewModel::GetRadixTypeFromNumberBase(NumberBase base)
{ {
if (CurrentRadixType == HEX_RADIX) switch (base)
{ {
return NumberBase::HexBase; case NumberBase::BinBase:
} return RADIX_TYPE::BIN_RADIX;
else if (CurrentRadixType == DEC_RADIX) case NumberBase::HexBase:
{ return RADIX_TYPE::HEX_RADIX;
return NumberBase::DecBase; case NumberBase::OctBase:
} return RADIX_TYPE::OCT_RADIX;
else if (CurrentRadixType == OCT_RADIX) default:
{ return RADIX_TYPE::DEC_RADIX;
return NumberBase::OctBase;
}
else
{
return NumberBase::BinBase;
} }
} }
@ -713,8 +708,8 @@ void StandardCalculatorViewModel::OnPasteCommand(Object ^ parameter)
{ {
auto that(this); auto that(this);
ViewMode mode; ViewMode mode;
NumberBase numberBase = NumberBase::Unknown;
BitLength bitLengthType = BitLength::BitLengthUnknown; BitLength bitLengthType = BitLength::BitLengthUnknown;
NumberBase numberBase = NumberBase::Unknown;
if (IsScientific) if (IsScientific)
{ {
mode = ViewMode::Scientific; mode = ViewMode::Scientific;
@ -722,8 +717,8 @@ void StandardCalculatorViewModel::OnPasteCommand(Object ^ parameter)
else if (IsProgrammer) else if (IsProgrammer)
{ {
mode = ViewMode::Programmer; mode = ViewMode::Programmer;
numberBase = GetNumberBase();
bitLengthType = m_valueBitLength; bitLengthType = m_valueBitLength;
numberBase = CurrentRadixType;
} }
else else
{ {
@ -1248,7 +1243,7 @@ String ^ StandardCalculatorViewModel::GetLocalizedStringFormat(String ^ format,
void StandardCalculatorViewModel::ResetDisplay() void StandardCalculatorViewModel::ResetDisplay()
{ {
AreHEXButtonsEnabled = false; AreHEXButtonsEnabled = false;
CurrentRadixType = (int)RADIX_TYPE::DEC_RADIX; CurrentRadixType = NumberBase::DecBase;
m_standardCalculatorManager.SetRadix(DEC_RADIX); m_standardCalculatorManager.SetRadix(DEC_RADIX);
} }
@ -1257,16 +1252,16 @@ void StandardCalculatorViewModel::SetPrecision(int32_t precision)
m_standardCalculatorManager.SetPrecision(precision); m_standardCalculatorManager.SetPrecision(precision);
} }
void StandardCalculatorViewModel::SwitchProgrammerModeBase(RADIX_TYPE radixType) void StandardCalculatorViewModel::SwitchProgrammerModeBase(NumberBase numberBase)
{ {
if (IsInError) if (IsInError)
{ {
m_standardCalculatorManager.SendCommand(Command::CommandCLEAR); m_standardCalculatorManager.SendCommand(Command::CommandCLEAR);
} }
AreHEXButtonsEnabled = (radixType == RADIX_TYPE::HEX_RADIX); AreHEXButtonsEnabled = numberBase == NumberBase::HexBase;
CurrentRadixType = (int)radixType; CurrentRadixType = numberBase;
m_standardCalculatorManager.SetRadix(radixType); m_standardCalculatorManager.SetRadix(GetRadixTypeFromNumberBase(numberBase));
} }
void StandardCalculatorViewModel::SetMemorizedNumbersString() void StandardCalculatorViewModel::SetMemorizedNumbersString()

View File

@ -40,7 +40,6 @@ namespace CalculatorApp
StandardCalculatorViewModel(); StandardCalculatorViewModel();
void UpdateOperand(int pos, Platform::String ^ text); void UpdateOperand(int pos, Platform::String ^ text);
void UpdatecommandsInRecordingMode(); void UpdatecommandsInRecordingMode();
CalculatorApp::Common::NumberBase GetNumberBase();
OBSERVABLE_OBJECT_CALLBACK(OnPropertyChanged); OBSERVABLE_OBJECT_CALLBACK(OnPropertyChanged);
OBSERVABLE_PROPERTY_RW(Platform::String ^, DisplayValue); OBSERVABLE_PROPERTY_RW(Platform::String ^, DisplayValue);
@ -71,7 +70,7 @@ namespace CalculatorApp
OBSERVABLE_PROPERTY_RW(Platform::String ^, CalculationResultAutomationName); OBSERVABLE_PROPERTY_RW(Platform::String ^, CalculationResultAutomationName);
OBSERVABLE_PROPERTY_RW(Platform::String ^, CalculationExpressionAutomationName); OBSERVABLE_PROPERTY_RW(Platform::String ^, CalculationExpressionAutomationName);
OBSERVABLE_PROPERTY_RW(bool, IsShiftProgrammerChecked); OBSERVABLE_PROPERTY_RW(bool, IsShiftProgrammerChecked);
OBSERVABLE_PROPERTY_RW(int, CurrentRadixType); OBSERVABLE_PROPERTY_RW(CalculatorApp::Common::NumberBase, CurrentRadixType);
OBSERVABLE_PROPERTY_RW(bool, AreTokensUpdated); OBSERVABLE_PROPERTY_RW(bool, AreTokensUpdated);
OBSERVABLE_PROPERTY_RW(bool, AreAlwaysOnTopResultsUpdated); OBSERVABLE_PROPERTY_RW(bool, AreAlwaysOnTopResultsUpdated);
OBSERVABLE_PROPERTY_RW(bool, AreHistoryShortcutsEnabled); OBSERVABLE_PROPERTY_RW(bool, AreHistoryShortcutsEnabled);
@ -358,14 +357,11 @@ namespace CalculatorApp
void Recalculate(bool fromHistory = false); void Recalculate(bool fromHistory = false);
bool IsOperator(CalculationManager::Command cmdenum); bool IsOperator(CalculationManager::Command cmdenum);
void FtoEButtonToggled(); void FtoEButtonToggled();
void SwitchProgrammerModeBase(RADIX_TYPE calculatorBase); void SwitchProgrammerModeBase(CalculatorApp::Common::NumberBase calculatorBase);
void SetMemorizedNumbersString(); void SetMemorizedNumbersString();
void SwitchAngleType(NumbersAndOperatorsEnum num); void SwitchAngleType(NumbersAndOperatorsEnum num);
void ResetDisplay(); void ResetDisplay();
RADIX_TYPE GetCurrentRadixType()
{
return (RADIX_TYPE)m_CurrentRadixType;
}
void SetPrecision(int32_t precision); void SetPrecision(int32_t precision);
void UpdateMaxIntDigits() void UpdateMaxIntDigits()
{ {
@ -389,6 +385,7 @@ namespace CalculatorApp
_Inout_ std::shared_ptr<std::vector<std::shared_ptr<IExpressionCommand>>> const& commands); _Inout_ std::shared_ptr<std::vector<std::shared_ptr<IExpressionCommand>>> const& commands);
void SetTokens(_Inout_ std::shared_ptr<std::vector<std::pair<std::wstring, int>>> const& tokens); void SetTokens(_Inout_ std::shared_ptr<std::vector<std::pair<std::wstring, int>>> const& tokens);
NumbersAndOperatorsEnum ConvertIntegerToNumbersAndOperatorsEnum(unsigned int parameter); NumbersAndOperatorsEnum ConvertIntegerToNumbersAndOperatorsEnum(unsigned int parameter);
static RADIX_TYPE GetRadixTypeFromNumberBase(CalculatorApp::Common::NumberBase base);
NumbersAndOperatorsEnum m_CurrentAngleType; NumbersAndOperatorsEnum m_CurrentAngleType;
wchar_t m_decimalSeparator; wchar_t m_decimalSeparator;
CalculatorDisplay m_calculatorDisplay; CalculatorDisplay m_calculatorDisplay;

View File

@ -368,7 +368,7 @@ void Calculator::EnsureProgrammer()
} }
OpsPanel->EnsureProgrammerRadixOps(); OpsPanel->EnsureProgrammerRadixOps();
ProgrammerOperators->SetRadixButton(Model->GetCurrentRadixType()); ProgrammerOperators->SetRadixButton(Model->CurrentRadixType);
} }
void Calculator::OnCalcPropertyChanged(_In_ Object ^ sender, _In_ PropertyChangedEventArgs ^ e) void Calculator::OnCalcPropertyChanged(_In_ Object ^ sender, _In_ PropertyChangedEventArgs ^ e)

View File

@ -41,7 +41,7 @@ void CalculatorProgrammerOperators::HexButtonChecked(_In_ Object ^ sender, _In_
TraceLogger::GetInstance()->UpdateButtonUsage(NumbersAndOperatorsEnum::HexButton, ViewMode::Programmer); TraceLogger::GetInstance()->UpdateButtonUsage(NumbersAndOperatorsEnum::HexButton, ViewMode::Programmer);
if (Model) if (Model)
{ {
Model->SwitchProgrammerModeBase(RADIX_TYPE::HEX_RADIX); Model->SwitchProgrammerModeBase(NumberBase::HexBase);
} }
} }
@ -50,7 +50,7 @@ void CalculatorProgrammerOperators::DecButtonChecked(_In_ Object ^ sender, _In_
TraceLogger::GetInstance()->UpdateButtonUsage(NumbersAndOperatorsEnum::DecButton, ViewMode::Programmer); TraceLogger::GetInstance()->UpdateButtonUsage(NumbersAndOperatorsEnum::DecButton, ViewMode::Programmer);
if (Model) if (Model)
{ {
Model->SwitchProgrammerModeBase(RADIX_TYPE::DEC_RADIX); Model->SwitchProgrammerModeBase(NumberBase::DecBase);
} }
} }
@ -59,7 +59,7 @@ void CalculatorProgrammerOperators::OctButtonChecked(_In_ Object ^ sender, _In_
TraceLogger::GetInstance()->UpdateButtonUsage(NumbersAndOperatorsEnum::OctButton, ViewMode::Programmer); TraceLogger::GetInstance()->UpdateButtonUsage(NumbersAndOperatorsEnum::OctButton, ViewMode::Programmer);
if (Model) if (Model)
{ {
Model->SwitchProgrammerModeBase(RADIX_TYPE::OCT_RADIX); Model->SwitchProgrammerModeBase(NumberBase::OctBase);
} }
} }
@ -68,30 +68,30 @@ void CalculatorProgrammerOperators::BinButtonChecked(_In_ Object ^ sender, _In_
TraceLogger::GetInstance()->UpdateButtonUsage(NumbersAndOperatorsEnum::BinButton, ViewMode::Programmer); TraceLogger::GetInstance()->UpdateButtonUsage(NumbersAndOperatorsEnum::BinButton, ViewMode::Programmer);
if (Model) if (Model)
{ {
Model->SwitchProgrammerModeBase(RADIX_TYPE::BIN_RADIX); Model->SwitchProgrammerModeBase(NumberBase::BinBase);
} }
} }
void CalculatorProgrammerOperators::SetRadixButton(RADIX_TYPE radixType) void CalculatorProgrammerOperators::SetRadixButton(NumberBase numberBase)
{ {
switch (radixType) switch (numberBase)
{ {
case RADIX_TYPE::DEC_RADIX: case NumberBase::DecBase:
{ {
DecimalButton->IsChecked = true; DecimalButton->IsChecked = true;
break; break;
} }
case RADIX_TYPE::HEX_RADIX: case NumberBase::HexBase:
{ {
HexButton->IsChecked = true; HexButton->IsChecked = true;
break; break;
} }
case RADIX_TYPE::OCT_RADIX: case NumberBase::OctBase:
{ {
OctButton->IsChecked = true; OctButton->IsChecked = true;
break; break;
} }
case RADIX_TYPE::BIN_RADIX: case NumberBase::BinBase:
{ {
BinaryButton->IsChecked = true; BinaryButton->IsChecked = true;
break; break;

View File

@ -1,4 +1,4 @@
// Copyright (c) Microsoft Corporation. All rights reserved. // Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. // Licensed under the MIT License.
#pragma once #pragma once
@ -6,6 +6,7 @@
#include "Views/CalculatorProgrammerOperators.g.h" #include "Views/CalculatorProgrammerOperators.g.h"
#include "Controls/RadixButton.h" #include "Controls/RadixButton.h"
#include "CalcViewModel/StandardCalculatorViewModel.h" #include "CalcViewModel/StandardCalculatorViewModel.h"
#include "CalcViewModel/Common/NumberBase.h"
namespace CalculatorApp namespace CalculatorApp
{ {
@ -24,7 +25,7 @@ namespace CalculatorApp
DEPENDENCY_PROPERTY(_In_ Windows::UI::Xaml::Style ^, SymbolButtonStyle); DEPENDENCY_PROPERTY(_In_ Windows::UI::Xaml::Style ^, SymbolButtonStyle);
internal : void SetRadixButton(RADIX_TYPE radixType); internal : void SetRadixButton(CalculatorApp::Common::NumberBase radixType);
private: private:
void DecButtonChecked(_In_ Platform::Object ^ sender, _In_ Windows::UI::Xaml::RoutedEventArgs ^ e); void DecButtonChecked(_In_ Platform::Object ^ sender, _In_ Windows::UI::Xaml::RoutedEventArgs ^ e);

View File

@ -52,7 +52,7 @@ NumberPad::NumberPad()
this->Num9Button->Content = localizationSettings.GetDigitSymbolFromEnUsDigit('9'); this->Num9Button->Content = localizationSettings.GetDigitSymbolFromEnUsDigit('9');
} }
void NumberPad::OnCurrentRadixTypePropertyChanged(int /* oldValue */, int newValue) void NumberPad::OnCurrentRadixTypePropertyChanged(NumberBase /* oldValue */, NumberBase newValue)
{ {
Num0Button->IsEnabled = true; Num0Button->IsEnabled = true;
Num1Button->IsEnabled = true; Num1Button->IsEnabled = true;
@ -65,9 +65,7 @@ void NumberPad::OnCurrentRadixTypePropertyChanged(int /* oldValue */, int newVal
Num8Button->IsEnabled = true; Num8Button->IsEnabled = true;
Num9Button->IsEnabled = true; Num9Button->IsEnabled = true;
auto radixType = safe_cast<RADIX_TYPE>(newValue); if (newValue == NumberBase::BinBase)
if (radixType == RADIX_TYPE::BIN_RADIX)
{ {
Num2Button->IsEnabled = false; Num2Button->IsEnabled = false;
Num3Button->IsEnabled = false; Num3Button->IsEnabled = false;
@ -78,7 +76,7 @@ void NumberPad::OnCurrentRadixTypePropertyChanged(int /* oldValue */, int newVal
Num8Button->IsEnabled = false; Num8Button->IsEnabled = false;
Num9Button->IsEnabled = false; Num9Button->IsEnabled = false;
} }
else if (radixType == RADIX_TYPE::OCT_RADIX) else if (newValue == NumberBase::OctBase)
{ {
Num8Button->IsEnabled = false; Num8Button->IsEnabled = false;
Num9Button->IsEnabled = false; Num9Button->IsEnabled = false;

View File

@ -10,6 +10,7 @@
#include "Views/NumberPad.g.h" #include "Views/NumberPad.g.h"
#include "CalcViewModel/Common/KeyboardShortcutManager.h" #include "CalcViewModel/Common/KeyboardShortcutManager.h"
#include "CalcViewModel/Common/NumberBase.h"
#include "CalcManager/Header Files/RadixType.h" #include "CalcManager/Header Files/RadixType.h"
namespace CalculatorApp namespace CalculatorApp
@ -21,7 +22,7 @@ namespace CalculatorApp
DEPENDENCY_PROPERTY_OWNER(NumberPad); DEPENDENCY_PROPERTY_OWNER(NumberPad);
DEPENDENCY_PROPERTY(Windows::UI::Xaml::Style ^, ButtonStyle); DEPENDENCY_PROPERTY(Windows::UI::Xaml::Style ^, ButtonStyle);
DEPENDENCY_PROPERTY_WITH_DEFAULT_AND_CALLBACK(int, CurrentRadixType, safe_cast<int>(::RADIX_TYPE::DEC_RADIX)); DEPENDENCY_PROPERTY_WITH_DEFAULT_AND_CALLBACK(CalculatorApp::Common::NumberBase, CurrentRadixType, CalculatorApp::Common::NumberBase::DecBase);
property bool IsErrorVisualState property bool IsErrorVisualState
{ {
@ -30,7 +31,7 @@ namespace CalculatorApp
} }
private: private:
void OnCurrentRadixTypePropertyChanged(int oldValue, int newValue); void OnCurrentRadixTypePropertyChanged(CalculatorApp::Common::NumberBase oldValue, CalculatorApp::Common::NumberBase newValue);
bool m_isErrorVisualState; bool m_isErrorVisualState;

View File

@ -891,13 +891,13 @@ namespace CalculatorUnitTests
}; };
ValidateViewModelByCommands(m_viewModel, items, true); ValidateViewModelByCommands(m_viewModel, items, true);
m_viewModel->OnMemoryButtonPressed(); m_viewModel->OnMemoryButtonPressed();
m_viewModel->SwitchProgrammerModeBase(RADIX_TYPE::OCT_RADIX); m_viewModel->SwitchProgrammerModeBase(NumberBase::OctBase);
MemoryItemViewModel ^ memorySlotOct = (MemoryItemViewModel ^) m_viewModel->MemorizedNumbers->GetAt(0); MemoryItemViewModel ^ memorySlotOct = (MemoryItemViewModel ^) m_viewModel->MemorizedNumbers->GetAt(0);
VERIFY_ARE_EQUAL(Platform::StringReference(L"377"), Utils::GetStringValue(memorySlotOct->Value)); VERIFY_ARE_EQUAL(Platform::StringReference(L"377"), Utils::GetStringValue(memorySlotOct->Value));
m_viewModel->SwitchProgrammerModeBase(RADIX_TYPE::DEC_RADIX); m_viewModel->SwitchProgrammerModeBase(NumberBase::DecBase);
MemoryItemViewModel ^ memorySlotDec = (MemoryItemViewModel ^) m_viewModel->MemorizedNumbers->GetAt(0); MemoryItemViewModel ^ memorySlotDec = (MemoryItemViewModel ^) m_viewModel->MemorizedNumbers->GetAt(0);
VERIFY_ARE_EQUAL(Platform::StringReference(L"255"), Utils::GetStringValue(memorySlotDec->Value)); VERIFY_ARE_EQUAL(Platform::StringReference(L"255"), Utils::GetStringValue(memorySlotDec->Value));
m_viewModel->SwitchProgrammerModeBase(RADIX_TYPE::BIN_RADIX); m_viewModel->SwitchProgrammerModeBase(NumberBase::BinBase);
MemoryItemViewModel ^ memorySlotBin = (MemoryItemViewModel ^) m_viewModel->MemorizedNumbers->GetAt(0); MemoryItemViewModel ^ memorySlotBin = (MemoryItemViewModel ^) m_viewModel->MemorizedNumbers->GetAt(0);
VERIFY_ARE_EQUAL(Platform::StringReference(L"1111 1111"), Utils::GetStringValue(memorySlotBin->Value)); VERIFY_ARE_EQUAL(Platform::StringReference(L"1111 1111"), Utils::GetStringValue(memorySlotBin->Value));
} }