in src/CalcViewModel/StandardCalculatorViewModel.cpp [593:670]
void StandardCalculatorViewModel::OnButtonPressed(Object ^ parameter)
{
m_feedbackForButtonPress = CalculatorButtonPressedEventArgs::GetAuditoryFeedbackFromCommandParameter(parameter);
NumbersAndOperatorsEnum numOpEnum = CalculatorButtonPressedEventArgs::GetOperationFromCommandParameter(parameter);
Command cmdenum = ConvertToOperatorsEnum(numOpEnum);
if (IsInError)
{
m_standardCalculatorManager.SendCommand(Command::CommandCLEAR);
if (!IsRecoverableCommand(static_cast<Command>(numOpEnum)))
{
return;
}
}
if (IsEditingEnabled && numOpEnum != NumbersAndOperatorsEnum::IsScientificMode && numOpEnum != NumbersAndOperatorsEnum::IsStandardMode
&& numOpEnum != NumbersAndOperatorsEnum::IsProgrammerMode && numOpEnum != NumbersAndOperatorsEnum::FToE
&& (numOpEnum != NumbersAndOperatorsEnum::Degree) && (numOpEnum != NumbersAndOperatorsEnum::Radians) && (numOpEnum != NumbersAndOperatorsEnum::Grads))
{
if (!m_KeyPressed)
{
SaveEditedCommand(m_selectedExpressionToken->TokenPosition, cmdenum);
}
}
else
{
if (numOpEnum == NumbersAndOperatorsEnum::IsStandardMode || numOpEnum == NumbersAndOperatorsEnum::IsScientificMode
|| numOpEnum == NumbersAndOperatorsEnum::IsProgrammerMode)
{
IsEditingEnabled = false;
}
if (numOpEnum == NumbersAndOperatorsEnum::Memory)
{
OnMemoryButtonPressed();
}
else
{
if (numOpEnum == NumbersAndOperatorsEnum::Clear || numOpEnum == NumbersAndOperatorsEnum::ClearEntry
|| numOpEnum == NumbersAndOperatorsEnum::IsStandardMode || numOpEnum == NumbersAndOperatorsEnum::IsProgrammerMode)
{
// On Clear('C') the F-E button needs to be UnChecked if it in Checked state.
// Also, the Primary Display Value should not show in exponential format.
// Hence the check below to ensure parity with Desktop Calculator.
// Clear the FE mode if the switching to StandardMode, since 'C'/'CE' in StandardMode
// doesn't honor the FE button.
if (IsFToEChecked)
{
IsFToEChecked = false;
}
}
if (numOpEnum == NumbersAndOperatorsEnum::Degree || numOpEnum == NumbersAndOperatorsEnum::Radians || numOpEnum == NumbersAndOperatorsEnum::Grads)
{
m_CurrentAngleType = numOpEnum;
}
if ((cmdenum >= Command::Command0 && cmdenum <= Command::Command9) || (cmdenum == Command::CommandPNT) || (cmdenum == Command::CommandBACK)
|| (cmdenum == Command::CommandEXP))
{
IsOperatorCommand = false;
}
else
{
IsOperatorCommand = true;
}
if (m_isLastOperationHistoryLoad
&& ((numOpEnum != NumbersAndOperatorsEnum::Degree) && (numOpEnum != NumbersAndOperatorsEnum::Radians)
&& (numOpEnum != NumbersAndOperatorsEnum::Grads)))
{
IsFToEEnabled = true;
m_isLastOperationHistoryLoad = false;
}
TraceLogger::GetInstance()->UpdateButtonUsage(numOpEnum, GetCalculatorMode());
m_standardCalculatorManager.SendCommand(cmdenum);
}
}
}