mirror of
https://github.com/Microsoft/calculator.git
synced 2025-07-13 00:32:52 -07:00
Modify the declaration of some properties of StandardCalculatorViewModel to make them read-only and use macros (#799)
This commit is contained in:
parent
1380c7ed83
commit
86307f206f
3 changed files with 91 additions and 173 deletions
|
@ -78,7 +78,7 @@ StandardCalculatorViewModel::StandardCalculatorViewModel()
|
|||
, m_IsShiftProgrammerChecked(false)
|
||||
, m_valueBitLength(BitLength::BitLengthQWord)
|
||||
, m_isBitFlipChecked(false)
|
||||
, m_isBinaryBitFlippingEnabled(false)
|
||||
, m_IsBinaryBitFlippingEnabled(false)
|
||||
, m_CurrentRadixType(NumberBase::DecBase)
|
||||
, m_CurrentAngleType(NumbersAndOperatorsEnum::Degree)
|
||||
, m_Announcement(nullptr)
|
||||
|
@ -93,6 +93,8 @@ StandardCalculatorViewModel::StandardCalculatorViewModel()
|
|||
, m_localizedMemoryCleared(nullptr)
|
||||
, m_localizedOpenParenthesisCountChangedAutomationFormat(nullptr)
|
||||
, m_localizedNoRightParenthesisAddedFormat(nullptr)
|
||||
, m_TokenPosition(-1)
|
||||
, m_isLastOperationHistoryLoad(false)
|
||||
{
|
||||
WeakReference calculatorViewModel(this);
|
||||
auto appResourceProvider = AppResourceProvider::GetInstance();
|
||||
|
@ -130,9 +132,6 @@ StandardCalculatorViewModel::StandardCalculatorViewModel()
|
|||
IsDecimalEnabled = true;
|
||||
AreHistoryShortcutsEnabled = true;
|
||||
AreProgrammerRadixOperatorsEnabled = false;
|
||||
|
||||
m_tokenPosition = -1;
|
||||
m_isLastOperationHistoryLoad = false;
|
||||
}
|
||||
|
||||
String ^ StandardCalculatorViewModel::LocalizeDisplayValue(_In_ wstring const& displayValue, _In_ bool isError)
|
||||
|
@ -455,7 +454,7 @@ void StandardCalculatorViewModel::FtoEButtonToggled()
|
|||
|
||||
void StandardCalculatorViewModel::HandleUpdatedOperandData(Command cmdenum)
|
||||
{
|
||||
DisplayExpressionToken ^ displayExpressionToken = ExpressionTokens->GetAt(m_tokenPosition);
|
||||
DisplayExpressionToken ^ displayExpressionToken = ExpressionTokens->GetAt(m_TokenPosition);
|
||||
if (displayExpressionToken == nullptr)
|
||||
{
|
||||
return;
|
||||
|
@ -583,7 +582,7 @@ void StandardCalculatorViewModel::HandleUpdatedOperandData(Command cmdenum)
|
|||
}
|
||||
|
||||
String ^ updatedData = ref new String(temp);
|
||||
UpdateOperand(m_tokenPosition, updatedData);
|
||||
UpdateOperand(m_TokenPosition, updatedData);
|
||||
displayExpressionToken->Token = updatedData;
|
||||
IsOperandUpdatedUsingViewModel = true;
|
||||
displayExpressionToken->CommandIndex = commandIndex;
|
||||
|
@ -622,7 +621,7 @@ void StandardCalculatorViewModel::OnButtonPressed(Object ^ parameter)
|
|||
&& numOpEnum != NumbersAndOperatorsEnum::IsProgrammerMode && numOpEnum != NumbersAndOperatorsEnum::FToE
|
||||
&& (numOpEnum != NumbersAndOperatorsEnum::Degree) && (numOpEnum != NumbersAndOperatorsEnum::Radians) && (numOpEnum != NumbersAndOperatorsEnum::Grads))
|
||||
{
|
||||
if (!m_keyPressed)
|
||||
if (!m_KeyPressed)
|
||||
{
|
||||
SaveEditedCommand(m_selectedExpressionToken->TokenPosition, cmdenum);
|
||||
}
|
||||
|
@ -765,9 +764,10 @@ void StandardCalculatorViewModel::OnPaste(String ^ pastedString)
|
|||
while (it != pastedString->End())
|
||||
{
|
||||
bool sendCommand = true;
|
||||
bool canSendNegate = false;
|
||||
auto buttonInfo = MapCharacterToButtonId(*it);
|
||||
|
||||
NumbersAndOperatorsEnum mappedNumOp = MapCharacterToButtonId(*it, canSendNegate);
|
||||
NumbersAndOperatorsEnum mappedNumOp = buttonInfo.buttonId;
|
||||
bool canSendNegate = buttonInfo.canSendNegate;
|
||||
|
||||
if (mappedNumOp == NumbersAndOperatorsEnum::None)
|
||||
{
|
||||
|
@ -869,7 +869,7 @@ void StandardCalculatorViewModel::OnPaste(String ^ pastedString)
|
|||
if (mappedNumOp == NumbersAndOperatorsEnum::Exp)
|
||||
{
|
||||
// Check the following item
|
||||
switch (MapCharacterToButtonId(*(it + 1), canSendNegate))
|
||||
switch (MapCharacterToButtonId(*(it + 1)).buttonId)
|
||||
{
|
||||
case NumbersAndOperatorsEnum::Subtract:
|
||||
{
|
||||
|
@ -919,10 +919,11 @@ void StandardCalculatorViewModel::SetViewPinnedState(bool pinned)
|
|||
IsCurrentViewPinned = pinned;
|
||||
}
|
||||
|
||||
NumbersAndOperatorsEnum StandardCalculatorViewModel::MapCharacterToButtonId(const wchar_t ch, bool& canSendNegate)
|
||||
ButtonInfo StandardCalculatorViewModel::MapCharacterToButtonId(char16 ch)
|
||||
{
|
||||
NumbersAndOperatorsEnum mappedValue = NumbersAndOperatorsEnum::None;
|
||||
canSendNegate = false;
|
||||
ButtonInfo result;
|
||||
result.buttonId = NumbersAndOperatorsEnum::None;
|
||||
result.canSendNegate = false;
|
||||
|
||||
switch (ch)
|
||||
{
|
||||
|
@ -936,112 +937,111 @@ NumbersAndOperatorsEnum StandardCalculatorViewModel::MapCharacterToButtonId(cons
|
|||
case '7':
|
||||
case '8':
|
||||
case '9':
|
||||
mappedValue = NumbersAndOperatorsEnum::Zero + static_cast<NumbersAndOperatorsEnum>(ch - L'0');
|
||||
canSendNegate = true;
|
||||
result.buttonId = NumbersAndOperatorsEnum::Zero + static_cast<NumbersAndOperatorsEnum>(ch - L'0');
|
||||
result.canSendNegate = true;
|
||||
break;
|
||||
|
||||
case '*':
|
||||
mappedValue = NumbersAndOperatorsEnum::Multiply;
|
||||
result.buttonId = NumbersAndOperatorsEnum::Multiply;
|
||||
break;
|
||||
|
||||
case '+':
|
||||
mappedValue = NumbersAndOperatorsEnum::Add;
|
||||
result.buttonId = NumbersAndOperatorsEnum::Add;
|
||||
break;
|
||||
|
||||
case '-':
|
||||
mappedValue = NumbersAndOperatorsEnum::Subtract;
|
||||
result.buttonId = NumbersAndOperatorsEnum::Subtract;
|
||||
break;
|
||||
|
||||
case '/':
|
||||
mappedValue = NumbersAndOperatorsEnum::Divide;
|
||||
result.buttonId = NumbersAndOperatorsEnum::Divide;
|
||||
break;
|
||||
|
||||
case '^':
|
||||
if (IsScientific)
|
||||
{
|
||||
mappedValue = NumbersAndOperatorsEnum::XPowerY;
|
||||
result.buttonId = NumbersAndOperatorsEnum::XPowerY;
|
||||
}
|
||||
break;
|
||||
|
||||
case '%':
|
||||
if (IsScientific || IsProgrammer)
|
||||
{
|
||||
mappedValue = NumbersAndOperatorsEnum::Mod;
|
||||
result.buttonId = NumbersAndOperatorsEnum::Mod;
|
||||
}
|
||||
break;
|
||||
|
||||
case '=':
|
||||
mappedValue = NumbersAndOperatorsEnum::Equals;
|
||||
result.buttonId = NumbersAndOperatorsEnum::Equals;
|
||||
break;
|
||||
|
||||
case '(':
|
||||
mappedValue = NumbersAndOperatorsEnum::OpenParenthesis;
|
||||
result.buttonId = NumbersAndOperatorsEnum::OpenParenthesis;
|
||||
break;
|
||||
|
||||
case ')':
|
||||
mappedValue = NumbersAndOperatorsEnum::CloseParenthesis;
|
||||
result.buttonId = NumbersAndOperatorsEnum::CloseParenthesis;
|
||||
break;
|
||||
|
||||
case 'a':
|
||||
case 'A':
|
||||
mappedValue = NumbersAndOperatorsEnum::A;
|
||||
result.buttonId = NumbersAndOperatorsEnum::A;
|
||||
break;
|
||||
case 'b':
|
||||
case 'B':
|
||||
mappedValue = NumbersAndOperatorsEnum::B;
|
||||
result.buttonId = NumbersAndOperatorsEnum::B;
|
||||
break;
|
||||
case 'c':
|
||||
case 'C':
|
||||
mappedValue = NumbersAndOperatorsEnum::C;
|
||||
result.buttonId = NumbersAndOperatorsEnum::C;
|
||||
break;
|
||||
case 'd':
|
||||
case 'D':
|
||||
mappedValue = NumbersAndOperatorsEnum::D;
|
||||
result.buttonId = NumbersAndOperatorsEnum::D;
|
||||
break;
|
||||
case 'e':
|
||||
case 'E':
|
||||
// Only allow scientific notation in scientific mode
|
||||
if (IsProgrammer)
|
||||
{
|
||||
mappedValue = NumbersAndOperatorsEnum::E;
|
||||
result.buttonId = NumbersAndOperatorsEnum::E;
|
||||
}
|
||||
else
|
||||
{
|
||||
mappedValue = NumbersAndOperatorsEnum::Exp;
|
||||
result.buttonId = NumbersAndOperatorsEnum::Exp;
|
||||
}
|
||||
break;
|
||||
case 'f':
|
||||
case 'F':
|
||||
mappedValue = NumbersAndOperatorsEnum::F;
|
||||
result.buttonId = NumbersAndOperatorsEnum::F;
|
||||
break;
|
||||
default:
|
||||
// For the decimalSeparator, we need to respect the user setting.
|
||||
if (ch == m_decimalSeparator)
|
||||
{
|
||||
mappedValue = NumbersAndOperatorsEnum::Decimal;
|
||||
result.buttonId = NumbersAndOperatorsEnum::Decimal;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (mappedValue == NumbersAndOperatorsEnum::None)
|
||||
if (result.buttonId == NumbersAndOperatorsEnum::None)
|
||||
{
|
||||
if (LocalizationSettings::GetInstance().IsLocalizedDigit(ch))
|
||||
{
|
||||
mappedValue =
|
||||
NumbersAndOperatorsEnum::Zero + static_cast<NumbersAndOperatorsEnum>(ch - LocalizationSettings::GetInstance().GetDigitSymbolFromEnUsDigit('0'));
|
||||
canSendNegate = true;
|
||||
result.buttonId = NumbersAndOperatorsEnum::Zero
|
||||
+ static_cast<NumbersAndOperatorsEnum>(ch - LocalizationSettings::GetInstance().GetDigitSymbolFromEnUsDigit('0'));
|
||||
result.canSendNegate = true;
|
||||
}
|
||||
}
|
||||
|
||||
// Negate cannot be sent for leading zeroes
|
||||
if (NumbersAndOperatorsEnum::Zero == mappedValue)
|
||||
if (NumbersAndOperatorsEnum::Zero == result.buttonId)
|
||||
{
|
||||
canSendNegate = false;
|
||||
result.canSendNegate = false;
|
||||
}
|
||||
|
||||
return mappedValue;
|
||||
return result;
|
||||
}
|
||||
|
||||
void StandardCalculatorViewModel::OnInputChanged()
|
||||
{
|
||||
IsInputEmpty = m_standardCalculatorManager.IsInputEmpty();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue