in src/CalcViewModel/StandardCalculatorViewModel.cpp [444:578]
void StandardCalculatorViewModel::HandleUpdatedOperandData(Command cmdenum)
{
DisplayExpressionToken ^ displayExpressionToken = ExpressionTokens->GetAt(m_TokenPosition);
if (displayExpressionToken == nullptr)
{
return;
}
if ((displayExpressionToken->Token == nullptr) || (displayExpressionToken->Token->Length() == 0))
{
displayExpressionToken->CommandIndex = 0;
}
wchar_t ch = 0;
if ((cmdenum >= Command::Command0) && (cmdenum <= Command::Command9))
{
switch (cmdenum)
{
case Command::Command0:
ch = L'0';
break;
case Command::Command1:
ch = L'1';
break;
case Command::Command2:
ch = L'2';
break;
case Command::Command3:
ch = L'3';
break;
case Command::Command4:
ch = L'4';
break;
case Command::Command5:
ch = L'5';
break;
case Command::Command6:
ch = L'6';
break;
case Command::Command7:
ch = L'7';
break;
case Command::Command8:
ch = L'8';
break;
case Command::Command9:
ch = L'9';
break;
}
}
else if (cmdenum == Command::CommandPNT)
{
ch = L'.';
}
else if (cmdenum == Command::CommandBACK)
{
ch = L'x';
}
else
{
return;
}
int length = 0;
wchar_t* temp = new wchar_t[100];
const wchar_t* data = m_selectedExpressionLastData->Data();
int i = 0, j = 0;
int commandIndex = displayExpressionToken->CommandIndex;
if (IsOperandTextCompletelySelected)
{
// Clear older text;
m_selectedExpressionLastData = L"";
if (ch == L'x')
{
temp[0] = L'\0';
commandIndex = 0;
}
else
{
temp[0] = ch;
temp[1] = L'\0';
commandIndex = 1;
}
IsOperandTextCompletelySelected = false;
}
else
{
if (ch == L'x')
{
if (commandIndex == 0)
{
delete[] temp;
return;
}
length = m_selectedExpressionLastData->Length();
for (; j < length; ++j)
{
if (j == commandIndex - 1)
{
continue;
}
temp[i++] = data[j];
}
temp[i] = L'\0';
commandIndex -= 1;
}
else
{
length = m_selectedExpressionLastData->Length() + 1;
if (length > 50)
{
delete[] temp;
return;
}
for (; i < length; ++i)
{
if (i == commandIndex)
{
temp[i] = ch;
continue;
}
temp[i] = data[j++];
}
temp[i] = L'\0';
commandIndex += 1;
}
}
String ^ updatedData = ref new String(temp);
UpdateOperand(m_TokenPosition, updatedData);
displayExpressionToken->Token = updatedData;
IsOperandUpdatedUsingViewModel = true;
displayExpressionToken->CommandIndex = commandIndex;
}