Conflicts

This commit is contained in:
Cyril Garsaud 2019-03-15 09:11:37 +01:00
commit 0a6fac1ef4
No known key found for this signature in database
GPG key ID: 4127AD82BCCF9CC3
282 changed files with 876 additions and 779 deletions

View file

@ -5,7 +5,6 @@ root = true
[*] [*]
indent_style = space indent_style = space
indent_size = 4 indent_size = 4
end_of_line = crlf
charset = utf-8 charset = utf-8
trim_trailing_whitespace = true trim_trailing_whitespace = true
insert_final_newline = true insert_final_newline = true

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 61 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 69 KiB

After

Width:  |  Height:  |  Size: 64 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 MiB

After

Width:  |  Height:  |  Size: 3 MiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 MiB

After

Width:  |  Height:  |  Size: 2.1 MiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 MiB

After

Width:  |  Height:  |  Size: 3.1 MiB

Before After
Before After

View file

@ -1,11 +0,0 @@
root = true
[*.{xaml,cpp,h}]
charset = utf-8-bom
indent_style = space
indent_size = 4
end_of_line = crlf
[*.{cpp,h}]
insert_final_newline = true
trim_trailing_whitespace = true

View file

@ -3,6 +3,7 @@
#include "pch.h" #include "pch.h"
#include "Header Files/CalcEngine.h" #include "Header Files/CalcEngine.h"
#include "Header Files/CalcUtils.h"
bool IsOpInRange(WPARAM op, uint32_t x, uint32_t y) bool IsOpInRange(WPARAM op, uint32_t x, uint32_t y)
{ {

View file

@ -2,18 +2,25 @@
// Licensed under the MIT License. // Licensed under the MIT License.
#include "pch.h" #include "pch.h"
#pragma once
#include "Header Files/CalcEngine.h" #include "Header Files/CalcEngine.h"
#include "Command.h" #include "Command.h"
#include "CalculatorVector.h" #include "CalculatorVector.h"
#include "ExpressionCommand.h" #include "ExpressionCommand.h"
#include "CalcException.h"
constexpr int ASCII_0 = 48; constexpr int ASCII_0 = 48;
using namespace std; using namespace std;
using namespace CalcEngine; using namespace CalcEngine;
namespace {
void IFT(HRESULT hr)
{
if (FAILED(hr))
{
throw hr;
}
}
}
void CHistoryCollector::ReinitHistory() void CHistoryCollector::ReinitHistory()
{ {
m_lastOpStartIndex = -1; m_lastOpStartIndex = -1;
@ -406,7 +413,7 @@ int CHistoryCollector::AddCommand(_In_ const std::shared_ptr<IExpressionCommand>
return nCommands - 1; return nCommands - 1;
} }
//To Update the operands in the Expression according to the current Radix // To Update the operands in the Expression according to the current Radix
void CHistoryCollector::UpdateHistoryExpression(uint32_t radix, int32_t precision) void CHistoryCollector::UpdateHistoryExpression(uint32_t radix, int32_t precision)
{ {
if (m_spTokens == nullptr) if (m_spTokens == nullptr)
@ -446,7 +453,7 @@ void CHistoryCollector::SetDecimalSymbol(wchar_t decimalSymbol)
m_decimalSymbol = decimalSymbol; m_decimalSymbol = decimalSymbol;
} }
//Update the commands corresponding to the passed string Number // Update the commands corresponding to the passed string Number
std::shared_ptr<CalculatorVector<int>> CHistoryCollector::GetOperandCommandsFromString(wstring_view numStr) std::shared_ptr<CalculatorVector<int>> CHistoryCollector::GetOperandCommandsFromString(wstring_view numStr)
{ {
std::shared_ptr<CalculatorVector<int>> commands = std::make_shared<CalculatorVector<int>>(); std::shared_ptr<CalculatorVector<int>> commands = std::make_shared<CalculatorVector<int>>();

View file

@ -26,28 +26,30 @@
using namespace std; using namespace std;
using namespace CalcEngine; using namespace CalcEngine;
// NPrecedenceOfOp namespace {
// // NPrecedenceOfOp
// returns a virtual number for precedence for the operator. We expect binary operator only, otherwise the lowest number //
// 0 is returned. Higher the number, higher the precedence of the operator. // returns a virtual number for precedence for the operator. We expect binary operator only, otherwise the lowest number
INT NPrecedenceOfOp(int nopCode) // 0 is returned. Higher the number, higher the precedence of the operator.
{ INT NPrecedenceOfOp(int nopCode)
{
static BYTE rgbPrec[] = { 0,0, IDC_OR,0, IDC_XOR,0, IDC_AND,1, static BYTE rgbPrec[] = { 0,0, IDC_OR,0, IDC_XOR,0, IDC_AND,1,
IDC_ADD,2, IDC_SUB,2, IDC_RSHF,3, IDC_LSHF,3, IDC_ADD,2, IDC_SUB,2, IDC_RSHF,3, IDC_LSHF,3,
IDC_MOD,3, IDC_DIV,3, IDC_MUL,3, IDC_PWR,4, IDC_ROOT, 4 }; IDC_MOD,3, IDC_DIV,3, IDC_MUL,3, IDC_PWR,4, IDC_ROOT, 4 };
int iPrec; int iPrec;
iPrec = 0; iPrec = 0;
while ((iPrec < ARRAYSIZE(rgbPrec)) && (nopCode != rgbPrec[iPrec])) while ((iPrec < size(rgbPrec)) && (nopCode != rgbPrec[iPrec]))
{ {
iPrec += 2; iPrec += 2;
} }
if (iPrec >= ARRAYSIZE(rgbPrec)) if (iPrec >= size(rgbPrec))
{ {
iPrec = 0; iPrec = 0;
} }
return rgbPrec[iPrec + 1]; return rgbPrec[iPrec + 1];
}
} }
// HandleErrorCommand // HandleErrorCommand
@ -58,7 +60,7 @@ void CCalcEngine::HandleErrorCommand(WPARAM idc)
{ {
if (!IsGuiSettingOpCode(idc)) if (!IsGuiSettingOpCode(idc))
{ {
// we would have saved the prev command. Need to forget this state // We would have saved the prev command. Need to forget this state
m_nTempCom = m_nLastCom; m_nTempCom = m_nLastCom;
} }
} }
@ -180,7 +182,7 @@ void CCalcEngine::ProcessCommandWorker(WPARAM wParam)
// BINARY OPERATORS: // BINARY OPERATORS:
if (IsBinOpCode(wParam)) if (IsBinOpCode(wParam))
{ {
/* Change the operation if last input was operation. */ // Change the operation if last input was operation.
if (IsBinOpCode(m_nLastCom)) if (IsBinOpCode(m_nLastCom))
{ {
INT nPrev; INT nPrev;
@ -544,6 +546,11 @@ void CCalcEngine::ProcessCommandWorker(WPARAM wParam)
if ((m_openParenCount >= MAXPRECDEPTH && nx) || (!m_openParenCount && !nx) if ((m_openParenCount >= MAXPRECDEPTH && nx) || (!m_openParenCount && !nx)
|| ((m_precedenceOpCount >= MAXPRECDEPTH && m_nPrecOp[m_precedenceOpCount - 1] != 0))) || ((m_precedenceOpCount >= MAXPRECDEPTH && m_nPrecOp[m_precedenceOpCount - 1] != 0)))
{ {
if (!m_openParenCount && !nx)
{
m_pCalcDisplay->OnNoRightParenAdded();
}
HandleErrorCommand(wParam); HandleErrorCommand(wParam);
break; break;
} }
@ -940,7 +947,7 @@ wstring_view CCalcEngine::OpCodeToUnaryString(int nOpCode, bool fInv, ANGLE_TYPE
// Try to lookup the ID in the UFNE table // Try to lookup the ID in the UFNE table
int ids = 0; int ids = 0;
int iufne = nOpCode - IDC_UNARYFIRST; int iufne = nOpCode - IDC_UNARYFIRST;
if (iufne >= 0 && iufne < ARRAYSIZE(rgUfne)) if (iufne >= 0 && iufne < size(rgUfne))
{ {
if (fInv) if (fInv)
{ {
@ -1020,7 +1027,7 @@ wstring CCalcEngine::GetCurrentResultForRadix(uint32_t radix, int32_t precision)
wstring numberString = GetStringForDisplay(rat, radix); wstring numberString = GetStringForDisplay(rat, radix);
if (!numberString.empty()) if (!numberString.empty())
{ {
//revert the precision to previously stored precision // Revert the precision to previously stored precision
ChangeConstants(m_radix, m_precision); ChangeConstants(m_radix, m_precision);
} }

View file

@ -70,7 +70,7 @@ CalcEngine::Rational CCalcEngine::SciCalcFunctions(CalcEngine::Rational const& r
uint64_t w64Bits = result.ToUInt64_t(); uint64_t w64Bits = result.ToUInt64_t();
uint64_t lsb = ((w64Bits & 0x01) == 1) ? 1 : 0; uint64_t lsb = ((w64Bits & 0x01) == 1) ? 1 : 0;
w64Bits >>= 1; //RShift by 1 w64Bits >>= 1; // RShift by 1
w64Bits |= (lsb << (m_dwWordBitWidth - 1)); w64Bits |= (lsb << (m_dwWordBitWidth - 1));
result = w64Bits; result = w64Bits;

View file

@ -6,6 +6,7 @@
using namespace CalcEngine; using namespace CalcEngine;
using namespace CalcEngine::RationalMath; using namespace CalcEngine::RationalMath;
using namespace std;
// To be called when either the radix or num width changes. You can use -1 in either of these values to mean // To be called when either the radix or num width changes. You can use -1 in either of these values to mean
// dont change that. // dont change that.
@ -55,7 +56,7 @@ LONG CCalcEngine::DwWordBitWidthFromeNumWidth(NUM_WIDTH /*numwidth*/)
static constexpr int nBitMax[] = { 64, 32, 16, 8 }; static constexpr int nBitMax[] = { 64, 32, 16, 8 };
LONG wmax = nBitMax[0]; LONG wmax = nBitMax[0];
if (m_numwidth >= 0 && m_numwidth < ARRAYSIZE(nBitMax)) if (m_numwidth >= 0 && m_numwidth < size(nBitMax))
{ {
wmax = nBitMax[m_numwidth]; wmax = nBitMax[m_numwidth];
} }
@ -68,7 +69,7 @@ uint32_t CCalcEngine::NRadixFromRadixType(RADIX_TYPE radixtype)
uint32_t radix = 10; uint32_t radix = 10;
// convert special bases into symbolic values // convert special bases into symbolic values
if (radixtype >= 0 && radixtype < ARRAYSIZE(rgnRadish)) if (radixtype >= 0 && radixtype < size(rgnRadish))
{ {
radix = rgnRadish[radixtype]; radix = rgnRadish[radixtype];
} }

View file

@ -1,26 +0,0 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
class CalcException : public std::exception
{
public:
CalcException(HRESULT hr)
{
m_hr = hr;
}
HRESULT GetException()
{
return m_hr;
}
private:
HRESULT m_hr;
};
void IFT(HRESULT hr)
{
if (FAILED(hr))
{
CalcException exception(hr);
throw(exception);
}
}

View file

@ -119,7 +119,6 @@
<ClInclude Include="Ratpack\ratpak.h"> <ClInclude Include="Ratpack\ratpak.h">
<Filter>RatPack</Filter> <Filter>RatPack</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="CalcException.h" />
<ClInclude Include="CalculatorVector.h" /> <ClInclude Include="CalculatorVector.h" />
<ClInclude Include="Header Files\CalcEngine.h"> <ClInclude Include="Header Files\CalcEngine.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>

View file

@ -109,7 +109,6 @@ namespace CalculationManager
/// <summary> /// <summary>
/// Callback from the engine /// Callback from the engine
/// Used to set the current unmatched open parenthesis count
/// </summary> /// </summary>
/// <param name="parenthesisCount">string containing the parenthesis count</param> /// <param name="parenthesisCount">string containing the parenthesis count</param>
void CalculatorManager::SetParenDisplayText(const wstring& parenthesisCount) void CalculatorManager::SetParenDisplayText(const wstring& parenthesisCount)
@ -117,6 +116,14 @@ namespace CalculationManager
m_displayCallback->SetParenDisplayText(parenthesisCount); m_displayCallback->SetParenDisplayText(parenthesisCount);
} }
/// <summary>
/// Callback from the engine
/// </summary>
void CalculatorManager::OnNoRightParenAdded()
{
m_displayCallback->OnNoRightParenAdded();
}
/// <summary> /// <summary>
/// Reset CalculatorManager. /// Reset CalculatorManager.
/// Set the mode to the standard calculator /// Set the mode to the standard calculator
@ -428,9 +435,9 @@ namespace CalculationManager
if (*commandItr >= MEMORY_COMMAND_TO_UNSIGNED_CHAR(MemoryCommand::MemorizeNumber) && if (*commandItr >= MEMORY_COMMAND_TO_UNSIGNED_CHAR(MemoryCommand::MemorizeNumber) &&
*commandItr <= MEMORY_COMMAND_TO_UNSIGNED_CHAR(MemoryCommand::MemorizedNumberClearAll)) *commandItr <= MEMORY_COMMAND_TO_UNSIGNED_CHAR(MemoryCommand::MemorizedNumberClearAll))
{ {
//MemoryCommands(which have values above 255) are pushed on m_savedCommands upon casting to unsigned char. // MemoryCommands(which have values above 255) are pushed on m_savedCommands upon casting to unsigned char.
//SerializeCommands uses m_savedCommands, which is then used in DeSerializeCommands. // SerializeCommands uses m_savedCommands, which is then used in DeSerializeCommands.
//Hence, a simple cast to MemoryCommand is not sufficient. // Hence, a simple cast to MemoryCommand is not sufficient.
MemoryCommand memoryCommand = static_cast<MemoryCommand>(*commandItr + UCHAR_MAX + 1); MemoryCommand memoryCommand = static_cast<MemoryCommand>(*commandItr + UCHAR_MAX + 1);
unsigned int indexOfMemory = 0; unsigned int indexOfMemory = 0;
switch (memoryCommand) switch (memoryCommand)

View file

@ -42,7 +42,7 @@ namespace CalculationManager
MemorizedNumberClear = 335 MemorizedNumberClear = 335
}; };
class CalculatorManager sealed : public virtual ICalcDisplay class CalculatorManager sealed : public ICalcDisplay
{ {
private: private:
ICalcDisplay* const m_displayCallback; ICalcDisplay* const m_displayCallback;
@ -94,7 +94,8 @@ namespace CalculationManager
void SetExpressionDisplay(_Inout_ std::shared_ptr<CalculatorVector<std::pair<std::wstring, int>>> const &tokens, _Inout_ std::shared_ptr<CalculatorVector<std::shared_ptr<IExpressionCommand>>> const &commands) override; void SetExpressionDisplay(_Inout_ std::shared_ptr<CalculatorVector<std::pair<std::wstring, int>>> const &tokens, _Inout_ std::shared_ptr<CalculatorVector<std::shared_ptr<IExpressionCommand>>> const &commands) override;
void SetMemorizedNumbers(_In_ const std::vector<std::wstring>& memorizedNumbers) override; void SetMemorizedNumbers(_In_ const std::vector<std::wstring>& memorizedNumbers) override;
void OnHistoryItemAdded(_In_ unsigned int addedItemIndex) override; void OnHistoryItemAdded(_In_ unsigned int addedItemIndex) override;
void SetParenDisplayText(const std::wstring& parenthesisCount); void SetParenDisplayText(const std::wstring& parenthesisCount) override;
void OnNoRightParenAdded() override;
void DisplayPasteError(); void DisplayPasteError();
void MaxDigitsReached() override; void MaxDigitsReached() override;
void BinaryOperatorReceived() override; void BinaryOperatorReceived() override;

View file

@ -94,7 +94,7 @@ namespace CalculationManager
CommandFAC = 113, CommandFAC = 113,
CommandREC = 114, CommandREC = 114,
CommandDMS = 115, CommandDMS = 115,
CommandCUBEROOT = 116, //x ^ 1/3 CommandCUBEROOT = 116, // x ^ 1/3
CommandPOW10 = 117, // 10 ^ x CommandPOW10 = 117, // 10 ^ x
CommandPERCENT = 118, CommandPERCENT = 118,

View file

@ -97,7 +97,7 @@
#define IDC_FAC 113 #define IDC_FAC 113
#define IDC_REC 114 #define IDC_REC 114
#define IDC_DMS 115 #define IDC_DMS 115
#define IDC_CUBEROOT 116 //x ^ 1/3 #define IDC_CUBEROOT 116 // x ^ 1/3
#define IDC_POW10 117 // 10 ^ x #define IDC_POW10 117 // 10 ^ x
#define IDC_PERCENT 118 #define IDC_PERCENT 118
#define IDC_UNARYLAST IDC_PERCENT #define IDC_UNARYLAST IDC_PERCENT

View file

@ -85,7 +85,7 @@ private:
// if it hasn't yet been computed // if it hasn't yet been computed
bool m_bChangeOp; /* Flag for changing operation. */ bool m_bChangeOp; /* Flag for changing operation. */
bool m_bRecord; // Global mode: recording or displaying bool m_bRecord; // Global mode: recording or displaying
bool m_bSetCalcState; //Flag for setting the engine result state bool m_bSetCalcState; // Flag for setting the engine result state
CalcEngine::CalcInput m_input; // Global calc input object for decimal strings CalcEngine::CalcInput m_input; // Global calc input object for decimal strings
eNUMOBJ_FMT m_nFE; /* Scientific notation conversion flag. */ eNUMOBJ_FMT m_nFE; /* Scientific notation conversion flag. */
CalcEngine::Rational m_maxTrigonometricNum; CalcEngine::Rational m_maxTrigonometricNum;

View file

@ -13,6 +13,7 @@ public:
virtual void SetIsInError(bool isInError) = 0; virtual void SetIsInError(bool isInError) = 0;
virtual void SetExpressionDisplay(_Inout_ std::shared_ptr<CalculatorVector<std::pair<std::wstring, int>>> const &tokens, _Inout_ std::shared_ptr<CalculatorVector<std::shared_ptr<IExpressionCommand>>> const &commands) = 0; virtual void SetExpressionDisplay(_Inout_ std::shared_ptr<CalculatorVector<std::pair<std::wstring, int>>> const &tokens, _Inout_ std::shared_ptr<CalculatorVector<std::shared_ptr<IExpressionCommand>>> const &commands) = 0;
virtual void SetParenDisplayText(const std::wstring& pszText) = 0; virtual void SetParenDisplayText(const std::wstring& pszText) = 0;
virtual void OnNoRightParenAdded() = 0;
virtual void MaxDigitsReached() = 0; // not an error but still need to inform UI layer. virtual void MaxDigitsReached() = 0; // not an error but still need to inform UI layer.
virtual void BinaryOperatorReceived() = 0; virtual void BinaryOperatorReceived() = 0;
virtual void OnHistoryItemAdded(_In_ unsigned int addedItemIndex) = 0; virtual void OnHistoryItemAdded(_In_ unsigned int addedItemIndex) = 0;

View file

@ -61,7 +61,7 @@ void* zmalloc(size_t a)
// //
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void _dupnum(_In_ PNUMBER dest, _In_ PNUMBER src) void _dupnum(_In_ PNUMBER dest, _In_ const NUMBER * const src)
{ {
memcpy(dest, src, (int)(sizeof(NUMBER) + ((src)->cdigit)*(sizeof(MANTTYPE)))); memcpy(dest, src, (int)(sizeof(NUMBER) + ((src)->cdigit)*(sizeof(MANTTYPE))));
} }

View file

@ -211,9 +211,8 @@ void modrat( PRAT *pa, PRAT b )
remnum( &((*pa)->pp), tmp->pp, BASEX ); remnum( &((*pa)->pp), tmp->pp, BASEX );
mulnumx( &((*pa)->pq), tmp->pq ); mulnumx( &((*pa)->pq), tmp->pq );
//Get *pa back in the integer over integer form. // Get *pa back in the integer over integer form.
RENORMALIZE(*pa); RENORMALIZE(*pa);
destroyrat( tmp ); destroyrat( tmp );
} }

View file

@ -82,7 +82,7 @@ void fracrat( PRAT *pa , uint32_t radix, int32_t precision)
remnum( &((*pa)->pp), (*pa)->pq, BASEX ); remnum( &((*pa)->pp), (*pa)->pq, BASEX );
//Get *pa back in the integer over integer form. // Get *pa back in the integer over integer form.
RENORMALIZE(*pa); RENORMALIZE(*pa);
} }

View file

@ -1,480 +1,482 @@
// Copyright (c) Microsoft Corporation. All rights reserved. // Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. // Licensed under the MIT License.
// Autogenerated by _dumprawrat in support.c #pragma once
NUMBER init_num_one= {
// Autogenerated by _dumprawrat in support.cpp
inline const NUMBER init_num_one= {
1, 1,
1, 1,
0, 0,
{ 1,} { 1,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_num_two= { inline const NUMBER init_num_two= {
1, 1,
1, 1,
0, 0,
{ 2,} { 2,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_num_five= { inline const NUMBER init_num_five= {
1, 1,
1, 1,
0, 0,
{ 5,} { 5,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_num_six= { inline const NUMBER init_num_six= {
1, 1,
1, 1,
0, 0,
{ 6,} { 6,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_num_ten= { inline const NUMBER init_num_ten= {
1, 1,
1, 1,
0, 0,
{ 10,} { 10,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rat_smallest = { inline const NUMBER init_p_rat_smallest = {
1, 1,
1, 1,
0, 0,
{ 1,} { 1,}
}; };
NUMBER init_q_rat_smallest = { inline const NUMBER init_q_rat_smallest = {
1, 1,
4, 4,
0, 0,
{ 0, 190439170, 901055854, 10097,} { 0, 190439170, 901055854, 10097,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rat_negsmallest = { inline const NUMBER init_p_rat_negsmallest = {
-1, -1,
1, 1,
0, 0,
{ 1,} { 1,}
}; };
NUMBER init_q_rat_negsmallest = { inline const NUMBER init_q_rat_negsmallest = {
1, 1,
4, 4,
0, 0,
{ 0, 190439170, 901055854, 10097,} { 0, 190439170, 901055854, 10097,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_pt_eight_five = { inline const NUMBER init_p_pt_eight_five = {
1, 1,
1, 1,
0, 0,
{ 85,} { 85,}
}; };
NUMBER init_q_pt_eight_five = { inline const NUMBER init_q_pt_eight_five = {
1, 1,
1, 1,
0, 0,
{ 100,} { 100,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rat_six = { inline const NUMBER init_p_rat_six = {
1, 1,
1, 1,
0, 0,
{ 6,} { 6,}
}; };
NUMBER init_q_rat_six = { inline const NUMBER init_q_rat_six = {
1, 1,
1, 1,
0, 0,
{ 1,} { 1,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rat_two = { inline const NUMBER init_p_rat_two = {
1, 1,
1, 1,
0, 0,
{ 2,} { 2,}
}; };
NUMBER init_q_rat_two = { inline const NUMBER init_q_rat_two = {
1, 1,
1, 1,
0, 0,
{ 1,} { 1,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rat_zero = { inline const NUMBER init_p_rat_zero = {
1, 1,
1, 1,
0, 0,
{ 0,} { 0,}
}; };
NUMBER init_q_rat_zero = { inline const NUMBER init_q_rat_zero = {
1, 1,
1, 1,
0, 0,
{ 1,} { 1,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rat_one = { inline const NUMBER init_p_rat_one = {
1, 1,
1, 1,
0, 0,
{ 1,} { 1,}
}; };
NUMBER init_q_rat_one = { inline const NUMBER init_q_rat_one = {
1, 1,
1, 1,
0, 0,
{ 1,} { 1,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rat_neg_one = { inline const NUMBER init_p_rat_neg_one = {
-1, -1,
1, 1,
0, 0,
{ 1,} { 1,}
}; };
NUMBER init_q_rat_neg_one = { inline const NUMBER init_q_rat_neg_one = {
1, 1,
1, 1,
0, 0,
{ 1,} { 1,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rat_half = { inline const NUMBER init_p_rat_half = {
1, 1,
1, 1,
0, 0,
{ 1,} { 1,}
}; };
NUMBER init_q_rat_half = { inline const NUMBER init_q_rat_half = {
1, 1,
1, 1,
0, 0,
{ 2,} { 2,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rat_ten = { inline const NUMBER init_p_rat_ten = {
1, 1,
1, 1,
0, 0,
{ 10,} { 10,}
}; };
NUMBER init_q_rat_ten = { inline const NUMBER init_q_rat_ten = {
1, 1,
1, 1,
0, 0,
{ 1,} { 1,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_pi = { inline const NUMBER init_p_pi = {
1, 1,
6, 6,
0, 0,
{ 125527896, 283898350, 1960493936, 1672850762, 1288168272, 8,} { 125527896, 283898350, 1960493936, 1672850762, 1288168272, 8,}
}; };
NUMBER init_q_pi = { inline const NUMBER init_q_pi = {
1, 1,
6, 6,
0, 0,
{ 1288380402, 1120116153, 1860424692, 1944118326, 1583591604, 2,} { 1288380402, 1120116153, 1860424692, 1944118326, 1583591604, 2,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_two_pi = { inline const NUMBER init_p_two_pi = {
1, 1,
6, 6,
0, 0,
{ 251055792, 567796700, 1773504224, 1198217877, 428852897, 17,} { 251055792, 567796700, 1773504224, 1198217877, 428852897, 17,}
}; };
NUMBER init_q_two_pi = { inline const NUMBER init_q_two_pi = {
1, 1,
6, 6,
0, 0,
{ 1288380402, 1120116153, 1860424692, 1944118326, 1583591604, 2,} { 1288380402, 1120116153, 1860424692, 1944118326, 1583591604, 2,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_pi_over_two = { inline const NUMBER init_p_pi_over_two = {
1, 1,
6, 6,
0, 0,
{ 125527896, 283898350, 1960493936, 1672850762, 1288168272, 8,} { 125527896, 283898350, 1960493936, 1672850762, 1288168272, 8,}
}; };
NUMBER init_q_pi_over_two = { inline const NUMBER init_q_pi_over_two = {
1, 1,
6, 6,
0, 0,
{ 429277156, 92748659, 1573365737, 1740753005, 1019699561, 5,} { 429277156, 92748659, 1573365737, 1740753005, 1019699561, 5,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_one_pt_five_pi = { inline const NUMBER init_p_one_pt_five_pi = {
1, 1,
6, 6,
0, 0,
{ 1241201312, 270061909, 1051574664, 1924965045, 1340320627, 70,} { 1241201312, 270061909, 1051574664, 1924965045, 1340320627, 70,}
}; };
NUMBER init_q_one_pt_five_pi = { inline const NUMBER init_q_one_pt_five_pi = {
1, 1,
6, 6,
0, 0,
{ 1579671539, 1837970263, 1067644340, 523549916, 2119366659, 14,} { 1579671539, 1837970263, 1067644340, 523549916, 2119366659, 14,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_e_to_one_half = { inline const NUMBER init_p_e_to_one_half = {
1, 1,
6, 6,
0, 0,
{ 256945612, 216219427, 223516738, 477442596, 581063757, 23,} { 256945612, 216219427, 223516738, 477442596, 581063757, 23,}
}; };
NUMBER init_q_e_to_one_half = { inline const NUMBER init_q_e_to_one_half = {
1, 1,
6, 6,
0, 0,
{ 1536828363, 698484484, 1127331835, 224219346, 245499408, 14,} { 1536828363, 698484484, 1127331835, 224219346, 245499408, 14,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rat_exp = { inline const NUMBER init_p_rat_exp = {
1, 1,
6, 6,
0, 0,
{ 943665199, 1606559160, 1094967530, 1759391384, 1671799163, 1123581,} { 943665199, 1606559160, 1094967530, 1759391384, 1671799163, 1123581,}
}; };
NUMBER init_q_rat_exp = { inline const NUMBER init_q_rat_exp = {
1, 1,
6, 6,
0, 0,
{ 879242208, 2022880100, 617392930, 1374929092, 1367479163, 413342,} { 879242208, 2022880100, 617392930, 1374929092, 1367479163, 413342,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_ln_ten = { inline const NUMBER init_p_ln_ten = {
1, 1,
6, 6,
0, 0,
{ 2086268922, 165794492, 1416063951, 1851428830, 1893239400, 65366841,} { 2086268922, 165794492, 1416063951, 1851428830, 1893239400, 65366841,}
}; };
NUMBER init_q_ln_ten = { inline const NUMBER init_q_ln_ten = {
1, 1,
6, 6,
0, 0,
{ 26790652, 564532679, 783998273, 216030448, 1564709968, 28388458,} { 26790652, 564532679, 783998273, 216030448, 1564709968, 28388458,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_ln_two = { inline const NUMBER init_p_ln_two = {
1, 1,
6, 6,
0, 0,
{ 1789230241, 1057927868, 715399197, 908801241, 1411265331, 3,} { 1789230241, 1057927868, 715399197, 908801241, 1411265331, 3,}
}; };
NUMBER init_q_ln_two = { inline const NUMBER init_q_ln_two = {
1, 1,
6, 6,
0, 0,
{ 1559869847, 1930657510, 1228561531, 219003871, 593099283, 5,} { 1559869847, 1930657510, 1228561531, 219003871, 593099283, 5,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rad_to_deg = { inline const NUMBER init_p_rad_to_deg = {
1, 1,
6, 6,
0, 0,
{ 2127722024, 1904928383, 2016479213, 2048947859, 1578647346, 492,} { 2127722024, 1904928383, 2016479213, 2048947859, 1578647346, 492,}
}; };
NUMBER init_q_rad_to_deg = { inline const NUMBER init_q_rad_to_deg = {
1, 1,
6, 6,
0, 0,
{ 125527896, 283898350, 1960493936, 1672850762, 1288168272, 8,} { 125527896, 283898350, 1960493936, 1672850762, 1288168272, 8,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rad_to_grad = { inline const NUMBER init_p_rad_to_grad = {
1, 1,
6, 6,
0, 0,
{ 2125526288, 684931327, 570267400, 129125085, 1038224725, 547,} { 2125526288, 684931327, 570267400, 129125085, 1038224725, 547,}
}; };
NUMBER init_q_rad_to_grad = { inline const NUMBER init_q_rad_to_grad = {
1, 1,
6, 6,
0, 0,
{ 125527896, 283898350, 1960493936, 1672850762, 1288168272, 8,} { 125527896, 283898350, 1960493936, 1672850762, 1288168272, 8,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rat_qword = { inline const NUMBER init_p_rat_qword = {
1, 1,
3, 3,
0, 0,
{ 2147483647, 2147483647, 3,} { 2147483647, 2147483647, 3,}
}; };
NUMBER init_q_rat_qword = { inline const NUMBER init_q_rat_qword = {
1, 1,
1, 1,
0, 0,
{ 1,} { 1,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rat_dword = { inline const NUMBER init_p_rat_dword = {
1, 1,
2, 2,
0, 0,
{ 2147483647, 1,} { 2147483647, 1,}
}; };
NUMBER init_q_rat_dword = { inline const NUMBER init_q_rat_dword = {
1, 1,
1, 1,
0, 0,
{ 1,} { 1,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rat_max_long = { inline const NUMBER init_p_rat_max_long = {
1, 1,
1, 1,
0, 0,
{ 2147483647,} { 2147483647,}
}; };
NUMBER init_q_rat_max_long = { inline const NUMBER init_q_rat_max_long = {
1, 1,
1, 1,
0, 0,
{ 1,} { 1,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rat_min_long = { inline const NUMBER init_p_rat_min_long = {
-1, -1,
2, 2,
0, 0,
{ 0, 1,} { 0, 1,}
}; };
NUMBER init_q_rat_min_long = { inline const NUMBER init_q_rat_min_long = {
1, 1,
1, 1,
0, 0,
{ 1,} { 1,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rat_word = { inline const NUMBER init_p_rat_word = {
1, 1,
1, 1,
0, 0,
{ 65535,} { 65535,}
}; };
NUMBER init_q_rat_word = { inline const NUMBER init_q_rat_word = {
1, 1,
1, 1,
0, 0,
{ 1,} { 1,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rat_byte = { inline const NUMBER init_p_rat_byte = {
1, 1,
1, 1,
0, 0,
{ 255,} { 255,}
}; };
NUMBER init_q_rat_byte = { inline const NUMBER init_q_rat_byte = {
1, 1,
1, 1,
0, 0,
{ 1,} { 1,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rat_400 = { inline const NUMBER init_p_rat_400 = {
1, 1,
1, 1,
0, 0,
{ 400,} { 400,}
}; };
NUMBER init_q_rat_400 = { inline const NUMBER init_q_rat_400 = {
1, 1,
1, 1,
0, 0,
{ 1,} { 1,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rat_360 = { inline const NUMBER init_p_rat_360 = {
1, 1,
1, 1,
0, 0,
{ 360,} { 360,}
}; };
NUMBER init_q_rat_360 = { inline const NUMBER init_q_rat_360 = {
1, 1,
1, 1,
0, 0,
{ 1,} { 1,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rat_200 = { inline const NUMBER init_p_rat_200 = {
1, 1,
1, 1,
0, 0,
{ 200,} { 200,}
}; };
NUMBER init_q_rat_200 = { inline const NUMBER init_q_rat_200 = {
1, 1,
1, 1,
0, 0,
{ 1,} { 1,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rat_180 = { inline const NUMBER init_p_rat_180 = {
1, 1,
1, 1,
0, 0,
{ 180,} { 180,}
}; };
NUMBER init_q_rat_180 = { inline const NUMBER init_q_rat_180 = {
1, 1,
1, 1,
0, 0,
{ 1,} { 1,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rat_max_exp = { inline const NUMBER init_p_rat_max_exp = {
1, 1,
1, 1,
0, 0,
{ 100000,} { 100000,}
}; };
NUMBER init_q_rat_max_exp = { inline const NUMBER init_q_rat_max_exp = {
1, 1,
1, 1,
0, 0,
{ 1,} { 1,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rat_min_exp = { inline const NUMBER init_p_rat_min_exp = {
-1, -1,
1, 1,
0, 0,
{ 100000,} { 100000,}
}; };
NUMBER init_q_rat_min_exp = { inline const NUMBER init_q_rat_min_exp = {
1, 1,
1, 1,
0, 0,
{ 1,} { 1,}
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rat_max_fact = { inline const NUMBER init_p_rat_max_fact = {
1, 1,
1, 1,
0, 0,
{ 3249, } { 3249, }
}; };
NUMBER init_q_rat_max_fact = { inline const NUMBER init_q_rat_max_fact = {
1, 1,
1, 1,
0, 0,
{ 1, } { 1, }
}; };
// Autogenerated by _dumprawrat in support.c // Autogenerated by _dumprawrat in support.cpp
NUMBER init_p_rat_min_fact = { inline const NUMBER init_p_rat_min_fact = {
-1, -1,
1, 1,
0, 0,
{ 1000, } { 1000, }
}; };
NUMBER init_q_rat_min_fact = { inline const NUMBER init_q_rat_min_fact = {
1, 1,
1, 1,
0, 0,

View file

@ -411,7 +411,7 @@ extern void tanrat( _Inout_ PRAT *px, uint32_t radix, int32_t precision);
// angle type // angle type
extern void tananglerat( _Inout_ PRAT *px, ANGLE_TYPE angletype, uint32_t radix, int32_t precision); extern void tananglerat( _Inout_ PRAT *px, ANGLE_TYPE angletype, uint32_t radix, int32_t precision);
extern void _dupnum(_In_ PNUMBER dest, _In_ PNUMBER src); extern void _dupnum(_In_ PNUMBER dest, _In_ const NUMBER * const src);
extern void _destroynum( _In_ PNUMBER pnum ); extern void _destroynum( _In_ PNUMBER pnum );
extern void _destroyrat( _In_ PRAT prat ); extern void _destroyrat( _In_ PRAT prat );

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.
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
@ -31,8 +31,8 @@ static int cbitsofprecision = 0;
#define READRAWNUM(v) #define READRAWNUM(v)
#define DUMPRAWRAT(v) _dumprawrat(#v,v, wcout) #define DUMPRAWRAT(v) _dumprawrat(#v,v, wcout)
#define DUMPRAWNUM(v) fprintf( stderr, \ #define DUMPRAWNUM(v) fprintf( stderr, \
"// Autogenerated by _dumprawrat in support.c\n" ); \ "// Autogenerated by _dumprawrat in support.cpp\n" ); \
fprintf( stderr, "NUMBER init_" #v "= {\n" ); \ fprintf( stderr, "inline const NUMBER init_" #v "= {\n" ); \
_dumprawnum(v, wcout); \ _dumprawnum(v, wcout); \
fprintf( stderr, "};\n" ) fprintf( stderr, "};\n" )

View file

@ -46,7 +46,7 @@ UnitConverter::UnitConverter(_In_ const shared_ptr<IConverterDataLoader>& dataLo
{ {
m_dataLoader = dataLoader; m_dataLoader = dataLoader;
m_currencyDataLoader = currencyDataLoader; m_currencyDataLoader = currencyDataLoader;
//declaring the delimiter character conversion map // declaring the delimiter character conversion map
quoteConversions[L'|'] = L"{p}"; quoteConversions[L'|'] = L"{p}";
quoteConversions[L'['] = L"{lc}"; quoteConversions[L'['] = L"{lc}";
quoteConversions[L']'] = L"{rc}"; quoteConversions[L']'] = L"{rc}";
@ -434,7 +434,7 @@ wstring UnitConverter::Quote(const wstring& s)
{ {
wstringstream quotedString(wstringstream::out); wstringstream quotedString(wstringstream::out);
//Iterate over the delimiter characters we need to quote // Iterate over the delimiter characters we need to quote
wstring::const_iterator cursor = s.begin(); wstring::const_iterator cursor = s.begin();
while(cursor != s.end()) while(cursor != s.end())
{ {
@ -472,7 +472,7 @@ wstring UnitConverter::Unquote(const wstring& s)
} }
if (cursor == s.end()) if (cursor == s.end())
{ {
//badly formatted // Badly formatted
break; break;
} }
else else
@ -501,7 +501,7 @@ void UnitConverter::SendCommand(Command command)
return; return;
} }
//TODO: Localization of characters // TODO: Localization of characters
bool clearFront = false; bool clearFront = false;
if (m_currentDisplay == L"0") if (m_currentDisplay == L"0")
{ {
@ -723,7 +723,7 @@ vector<tuple<wstring, Unit>> UnitConverter::CalculateSuggested()
vector<SuggestedValueIntermediate> intermediateVector; vector<SuggestedValueIntermediate> intermediateVector;
vector<SuggestedValueIntermediate> intermediateWhimsicalVector; vector<SuggestedValueIntermediate> intermediateWhimsicalVector;
unordered_map<Unit, ConversionData, UnitHash> ratios = m_ratioMap[m_fromType]; unordered_map<Unit, ConversionData, UnitHash> ratios = m_ratioMap[m_fromType];
//Calculate converted values for every other unit type in this category, along with their magnitude // Calculate converted values for every other unit type in this category, along with their magnitude
for (const auto& cur : ratios) for (const auto& cur : ratios)
{ {
if (cur.first != m_fromType && cur.first != m_toType) if (cur.first != m_fromType && cur.first != m_toType)
@ -740,7 +740,7 @@ vector<tuple<wstring, Unit>> UnitConverter::CalculateSuggested()
} }
} }
//Sort the resulting list by absolute magnitude, breaking ties by choosing the positive value // Sort the resulting list by absolute magnitude, breaking ties by choosing the positive value
sort(intermediateVector.begin(), intermediateVector.end(), [] sort(intermediateVector.begin(), intermediateVector.end(), []
(SuggestedValueIntermediate first, SuggestedValueIntermediate second) (SuggestedValueIntermediate first, SuggestedValueIntermediate second)
{ {
@ -754,7 +754,7 @@ vector<tuple<wstring, Unit>> UnitConverter::CalculateSuggested()
} }
}); });
//Now that the list is sorted, iterate over it and populate the return vector with properly rounded and formatted return strings // Now that the list is sorted, iterate over it and populate the return vector with properly rounded and formatted return strings
for (const auto& entry : intermediateVector) for (const auto& entry : intermediateVector)
{ {
wstring roundedString; wstring roundedString;
@ -778,7 +778,7 @@ vector<tuple<wstring, Unit>> UnitConverter::CalculateSuggested()
} }
// The Whimsicals are determined differently // The Whimsicals are determined differently
//Sort the resulting list by absolute magnitude, breaking ties by choosing the positive value // Sort the resulting list by absolute magnitude, breaking ties by choosing the positive value
sort(intermediateWhimsicalVector.begin(), intermediateWhimsicalVector.end(), [] sort(intermediateWhimsicalVector.begin(), intermediateWhimsicalVector.end(), []
(SuggestedValueIntermediate first, SuggestedValueIntermediate second) (SuggestedValueIntermediate first, SuggestedValueIntermediate second)
{ {
@ -792,7 +792,7 @@ vector<tuple<wstring, Unit>> UnitConverter::CalculateSuggested()
} }
}); });
//Now that the list is sorted, iterate over it and populate the return vector with properly rounded and formatted return strings // Now that the list is sorted, iterate over it and populate the return vector with properly rounded and formatted return strings
vector<tuple<wstring, Unit>> whimsicalReturnVector; vector<tuple<wstring, Unit>> whimsicalReturnVector;
for (const auto& entry : intermediateWhimsicalVector) for (const auto& entry : intermediateWhimsicalVector)

View file

@ -51,7 +51,7 @@ namespace UnitConversionManager
// null checks. // null checks.
// //
// unitId, name, abbreviation, isConversionSource, isConversionTarget, isWhimsical // unitId, name, abbreviation, isConversionSource, isConversionTarget, isWhimsical
const Unit EMPTY_UNIT = Unit{ -1, L"", L"", true, true, false }; inline const Unit EMPTY_UNIT = Unit{ -1, L"", L"", true, true, false };
struct Category struct Category
{ {

View file

@ -12,6 +12,7 @@
#include <winerror.h> #include <winerror.h>
#include <sstream> #include <sstream>
#include <iostream> #include <iostream>
#include <iterator>
#include <string> #include <string>
#include <memory> #include <memory>
#include <vector> #include <vector>

View file

@ -1,8 +1,6 @@
// 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
#include "pch.h" #include "pch.h"
#include "AppResourceProvider.h" #include "AppResourceProvider.h"

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.
#include "pch.h" #include "pch.h"
@ -20,6 +20,8 @@ namespace CalculatorApp::Common::Automation
StringReference CategoryNameChanged(L"CategoryNameChanged"); StringReference CategoryNameChanged(L"CategoryNameChanged");
StringReference UpdateCurrencyRates(L"UpdateCurrencyRates"); StringReference UpdateCurrencyRates(L"UpdateCurrencyRates");
StringReference DisplayCopied(L"DisplayCopied"); StringReference DisplayCopied(L"DisplayCopied");
StringReference OpenParenthesisCountChanged(L"OpenParenthesisCountChanged");
StringReference NoParenthesisAdded(L"NoParenthesisAdded");
} }
} }
@ -142,3 +144,21 @@ NarratorAnnouncement^ CalculatorAnnouncement::GetDisplayCopiedAnnouncement(Strin
AutomationNotificationKind::ActionCompleted, AutomationNotificationKind::ActionCompleted,
AutomationNotificationProcessing::ImportantMostRecent); AutomationNotificationProcessing::ImportantMostRecent);
} }
NarratorAnnouncement^ CalculatorAnnouncement::GetOpenParenthesisCountChangedAnnouncement(String^ announcement)
{
return ref new NarratorAnnouncement(
announcement,
CalculatorActivityIds::OpenParenthesisCountChanged,
AutomationNotificationKind::ActionCompleted,
AutomationNotificationProcessing::ImportantMostRecent);
}
NarratorAnnouncement^ CalculatorAnnouncement::GetNoRightParenthesisAddedAnnouncement(String^ announcement)
{
return ref new NarratorAnnouncement(
announcement,
CalculatorActivityIds::NoParenthesisAdded,
AutomationNotificationKind::ActionCompleted,
AutomationNotificationProcessing::ImportantMostRecent);
}

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
@ -90,5 +90,8 @@ namespace CalculatorApp::Common::Automation
static NarratorAnnouncement^ GetUpdateCurrencyRatesAnnouncement(Platform::String^ announcement); static NarratorAnnouncement^ GetUpdateCurrencyRatesAnnouncement(Platform::String^ announcement);
static NarratorAnnouncement^ GetDisplayCopiedAnnouncement(Platform::String^ announcement); static NarratorAnnouncement^ GetDisplayCopiedAnnouncement(Platform::String^ announcement);
static NarratorAnnouncement^ GetOpenParenthesisCountChangedAnnouncement(Platform::String^ announcement);
static NarratorAnnouncement^ GetNoRightParenthesisAddedAnnouncement(Platform::String ^ announcement);
}; };
} }

View file

@ -29,8 +29,7 @@ void CalculatorDisplay::SetPrimaryDisplay(_In_ const wstring& displayStringValue
{ {
if (m_callbackReference) if (m_callbackReference)
{ {
auto calcVM = m_callbackReference.Resolve<ViewModel::StandardCalculatorViewModel>(); if (auto calcVM = m_callbackReference.Resolve<ViewModel::StandardCalculatorViewModel>())
if (calcVM)
{ {
calcVM->SetPrimaryDisplay(displayStringValue, isError); calcVM->SetPrimaryDisplay(displayStringValue, isError);
} }
@ -41,20 +40,29 @@ void CalculatorDisplay::SetParenDisplayText(_In_ const std::wstring& parenthesis
{ {
if (m_callbackReference != nullptr) if (m_callbackReference != nullptr)
{ {
auto calcVM = m_callbackReference.Resolve<ViewModel::StandardCalculatorViewModel>(); if (auto calcVM = m_callbackReference.Resolve<ViewModel::StandardCalculatorViewModel>())
if (calcVM)
{ {
calcVM->SetParenthesisCount(parenthesisCount); calcVM->SetParenthesisCount(parenthesisCount);
} }
} }
} }
void CalculatorDisplay::OnNoRightParenAdded()
{
if (m_callbackReference != nullptr)
{
if (auto calcVM = m_callbackReference.Resolve<ViewModel::StandardCalculatorViewModel>())
{
calcVM->OnNoRightParenAdded();
}
}
}
void CalculatorDisplay::SetIsInError(bool isError) void CalculatorDisplay::SetIsInError(bool isError)
{ {
if (m_callbackReference != nullptr) if (m_callbackReference != nullptr)
{ {
auto calcVM = m_callbackReference.Resolve<ViewModel::StandardCalculatorViewModel>(); if (auto calcVM = m_callbackReference.Resolve<ViewModel::StandardCalculatorViewModel>())
if (calcVM)
{ {
calcVM->IsInError = isError; calcVM->IsInError = isError;
} }
@ -65,8 +73,7 @@ void CalculatorDisplay::SetExpressionDisplay(_Inout_ std::shared_ptr<CalculatorV
{ {
if (m_callbackReference != nullptr) if (m_callbackReference != nullptr)
{ {
auto calcVM = m_callbackReference.Resolve<ViewModel::StandardCalculatorViewModel>(); if(auto calcVM = m_callbackReference.Resolve<ViewModel::StandardCalculatorViewModel>())
if (calcVM)
{ {
calcVM->SetExpressionDisplay(tokens, commands); calcVM->SetExpressionDisplay(tokens, commands);
} }
@ -77,8 +84,7 @@ void CalculatorDisplay::SetMemorizedNumbers(_In_ const vector<std::wstring>& new
{ {
if (m_callbackReference != nullptr) if (m_callbackReference != nullptr)
{ {
auto calcVM = m_callbackReference.Resolve<ViewModel::StandardCalculatorViewModel>(); if (auto calcVM = m_callbackReference.Resolve<ViewModel::StandardCalculatorViewModel>())
if (calcVM)
{ {
calcVM->SetMemorizedNumbers(newMemorizedNumbers); calcVM->SetMemorizedNumbers(newMemorizedNumbers);
} }
@ -89,8 +95,7 @@ void CalculatorDisplay::OnHistoryItemAdded(_In_ unsigned int addedItemIndex)
{ {
if (m_historyCallbackReference != nullptr) if (m_historyCallbackReference != nullptr)
{ {
auto historyVM = m_historyCallbackReference.Resolve<ViewModel::HistoryViewModel>(); if (auto historyVM = m_historyCallbackReference.Resolve<ViewModel::HistoryViewModel>())
if (historyVM)
{ {
historyVM->OnHistoryItemAdded(addedItemIndex); historyVM->OnHistoryItemAdded(addedItemIndex);
} }
@ -101,8 +106,7 @@ void CalculatorDisplay::MaxDigitsReached()
{ {
if (m_callbackReference != nullptr) if (m_callbackReference != nullptr)
{ {
auto calcVM = m_callbackReference.Resolve<ViewModel::StandardCalculatorViewModel>(); if (auto calcVM = m_callbackReference.Resolve<ViewModel::StandardCalculatorViewModel>())
if (calcVM)
{ {
calcVM->OnMaxDigitsReached(); calcVM->OnMaxDigitsReached();
} }
@ -113,8 +117,7 @@ void CalculatorDisplay::BinaryOperatorReceived()
{ {
if (m_callbackReference != nullptr) if (m_callbackReference != nullptr)
{ {
auto calcVM = m_callbackReference.Resolve<ViewModel::StandardCalculatorViewModel>(); if (auto calcVM = m_callbackReference.Resolve<ViewModel::StandardCalculatorViewModel>())
if (calcVM)
{ {
calcVM->OnBinaryOperatorReceived(); calcVM->OnBinaryOperatorReceived();
} }
@ -125,8 +128,7 @@ void CalculatorDisplay::MemoryItemChanged(unsigned int indexOfMemory)
{ {
if (m_callbackReference != nullptr) if (m_callbackReference != nullptr)
{ {
auto calcVM = m_callbackReference.Resolve<ViewModel::StandardCalculatorViewModel>(); if (auto calcVM = m_callbackReference.Resolve<ViewModel::StandardCalculatorViewModel>())
if (calcVM)
{ {
calcVM->OnMemoryItemChanged(indexOfMemory); calcVM->OnMemoryItemChanged(indexOfMemory);
} }

View file

@ -22,6 +22,7 @@ namespace CalculatorApp
void SetMemorizedNumbers(_In_ const std::vector<std::wstring>& memorizedNumbers) override; void SetMemorizedNumbers(_In_ const std::vector<std::wstring>& memorizedNumbers) override;
void OnHistoryItemAdded(_In_ unsigned int addedItemIndex) override; void OnHistoryItemAdded(_In_ unsigned int addedItemIndex) override;
void SetParenDisplayText(_In_ const std::wstring& parenthesisCount) override; void SetParenDisplayText(_In_ const std::wstring& parenthesisCount) override;
void OnNoRightParenAdded() override;
void MaxDigitsReached() override; void MaxDigitsReached() override;
void BinaryOperatorReceived() override; void BinaryOperatorReceived() override;
void MemoryItemChanged(unsigned int indexOfMemory) override; void MemoryItemChanged(unsigned int indexOfMemory) override;

View file

@ -129,7 +129,7 @@ String^ CopyPasteManager::ValidatePasteExpression(String^ pastedText, ViewMode m
if (pastedText->Length() > MaxPasteableLength) if (pastedText->Length() > MaxPasteableLength)
{ {
// return NoOp to indicate don't paste anything. // return NoOp to indicate don't paste anything.
TraceLogger::GetInstance().LogInvalidInputPasted(L"PastedExpressionSizeGreaterThanMaxAllowed", L"MoreThanMaxInput", mode, programmerNumberBase, bitLengthType); TraceLogger::GetInstance().LogInvalidPastedInputOccurred(L"PastedExpressionSizeGreaterThanMaxAllowed", mode, programmerNumberBase, bitLengthType);
return StringReference(PasteErrorString); return StringReference(PasteErrorString);
} }
@ -164,7 +164,7 @@ String^ CopyPasteManager::ValidatePasteExpression(String^ pastedText, ViewMode m
// validate each operand with patterns for different modes // validate each operand with patterns for different modes
if (!ExpressionRegExMatch(operands, mode, modeType, programmerNumberBase, bitLengthType)) if (!ExpressionRegExMatch(operands, mode, modeType, programmerNumberBase, bitLengthType))
{ {
TraceLogger::GetInstance().LogInvalidInputPasted(L"InvalidExpressionForPresentMode", pastedText->Data(), mode, programmerNumberBase, bitLengthType); TraceLogger::GetInstance().LogInvalidPastedInputOccurred(L"InvalidExpressionForPresentMode", mode, programmerNumberBase, bitLengthType);
return StringReference(PasteErrorString); return StringReference(PasteErrorString);
} }
@ -193,7 +193,7 @@ vector<wstring> CopyPasteManager::ExtractOperands(const wstring& pasteExpression
if (operands.size() >= MaxOperandCount) if (operands.size() >= MaxOperandCount)
{ {
TraceLogger::GetInstance().LogInvalidInputPasted(L"OperandCountGreaterThanMaxCount", pasteExpression.c_str(), mode, programmerNumberBase, bitLengthType); TraceLogger::GetInstance().LogInvalidPastedInputOccurred(L"OperandCountGreaterThanMaxCount", mode, programmerNumberBase, bitLengthType);
operands.clear(); operands.clear();
return operands; return operands;
} }
@ -207,7 +207,7 @@ vector<wstring> CopyPasteManager::ExtractOperands(const wstring& pasteExpression
// to disallow pasting of 1e+12345 as 1e+1234, max exponent that can be pasted is 9999. // to disallow pasting of 1e+12345 as 1e+1234, max exponent that can be pasted is 9999.
if (expLength > MaxExponentLength) if (expLength > MaxExponentLength)
{ {
TraceLogger::GetInstance().LogInvalidInputPasted(L"ExponentLengthGreaterThanMaxLength", pasteExpression.c_str(), mode, programmerNumberBase, bitLengthType); TraceLogger::GetInstance().LogInvalidPastedInputOccurred(L"ExponentLengthGreaterThanMaxLength", mode, programmerNumberBase, bitLengthType);
operands.clear(); operands.clear();
return operands; return operands;
} }
@ -404,7 +404,7 @@ wstring CopyPasteManager::SanitizeOperand(const wstring& operand)
{ {
wchar_t unWantedChars[] = { L'\'', L'_', L'`', L'(', L')', L'-' }; wchar_t unWantedChars[] = { L'\'', L'_', L'`', L'(', L')', L'-' };
return Utils::RemoveUnwantedCharsFromWstring(operand, unWantedChars, ARRAYSIZE(unWantedChars)); return Utils::RemoveUnwantedCharsFromWstring(operand, unWantedChars, static_cast<int>(size(unWantedChars)));
} }
bool CopyPasteManager::TryOperandToULL(const wstring& operand, int numberBase, unsigned long long int& result) bool CopyPasteManager::TryOperandToULL(const wstring& operand, int numberBase, unsigned long long int& result)

View file

@ -4,6 +4,8 @@
#pragma once #pragma once
#include "LocalizationService.h" #include "LocalizationService.h"
#include <iterator>
namespace CalculatorApp namespace CalculatorApp
{ {
namespace Common namespace Common
@ -41,7 +43,7 @@ namespace CalculatorApp
result = GetLocaleInfoEx(m_resolvedName.c_str(), result = GetLocaleInfoEx(m_resolvedName.c_str(),
LOCALE_SDECIMAL, LOCALE_SDECIMAL,
decimalString, decimalString,
ARRAYSIZE(decimalString)); static_cast<int>(std::size(decimalString)));
if (result == 0) if (result == 0)
{ {
throw std::runtime_error("Unexpected error while getting locale info"); throw std::runtime_error("Unexpected error while getting locale info");
@ -51,7 +53,7 @@ namespace CalculatorApp
result = GetLocaleInfoEx(m_resolvedName.c_str(), result = GetLocaleInfoEx(m_resolvedName.c_str(),
LOCALE_STHOUSAND, LOCALE_STHOUSAND,
groupingSymbolString, groupingSymbolString,
ARRAYSIZE(groupingSymbolString)); static_cast<int>(std::size(groupingSymbolString)));
if (result == 0) if (result == 0)
{ {
throw std::runtime_error("Unexpected error while getting locale info"); throw std::runtime_error("Unexpected error while getting locale info");
@ -61,7 +63,7 @@ namespace CalculatorApp
result = GetLocaleInfoEx(m_resolvedName.c_str(), result = GetLocaleInfoEx(m_resolvedName.c_str(),
LOCALE_SGROUPING, LOCALE_SGROUPING,
numberGroupingString, numberGroupingString,
ARRAYSIZE(numberGroupingString)); static_cast<int>(std::size(numberGroupingString)));
if (result == 0) if (result == 0)
{ {
throw std::runtime_error("Unexpected error while getting locale info"); throw std::runtime_error("Unexpected error while getting locale info");
@ -72,7 +74,7 @@ namespace CalculatorApp
result = ::GetLocaleInfoEx(LOCALE_NAME_USER_DEFAULT, result = ::GetLocaleInfoEx(LOCALE_NAME_USER_DEFAULT,
LOCALE_SLIST, LOCALE_SLIST,
listSeparatorString, listSeparatorString,
ARRAYSIZE(listSeparatorString)); // Max length of the expected return value is 4 static_cast<int>(std::size(listSeparatorString))); // Max length of the expected return value is 4
if (result == 0) if (result == 0)
{ {
throw std::runtime_error("Unexpected error while getting locale info"); throw std::runtime_error("Unexpected error while getting locale info");
@ -122,7 +124,7 @@ namespace CalculatorApp
::GetLocaleInfoEx(LOCALE_NAME_USER_DEFAULT, ::GetLocaleInfoEx(LOCALE_NAME_USER_DEFAULT,
LOCALE_IFIRSTDAYOFWEEK, // The first day in a week LOCALE_IFIRSTDAYOFWEEK, // The first day in a week
reinterpret_cast<PWSTR>(day), // Argument is of type PWSTR reinterpret_cast<PWSTR>(day), // Argument is of type PWSTR
ARRAYSIZE(day)); // Max return size are 80 characters static_cast<int>(std::size(day))); // Max return size are 80 characters
// The LOCALE_IFIRSTDAYOFWEEK integer value varies from 0, 1, .. 6 for Monday, Tuesday, ... Sunday // The LOCALE_IFIRSTDAYOFWEEK integer value varies from 0, 1, .. 6 for Monday, Tuesday, ... Sunday
// DayOfWeek enum value varies from 0, 1, .. 6 for Sunday, Monday, ... Saturday // DayOfWeek enum value varies from 0, 1, .. 6 for Sunday, Monday, ... Saturday

View file

@ -1,8 +1,6 @@
// 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
#include "pch.h" #include "pch.h"
#include "TraceLogger.h" #include "TraceLogger.h"
#include "NetworkManager.h" #include "NetworkManager.h"
@ -59,7 +57,7 @@ namespace CalculatorApp
constexpr auto EVENT_NAME_MEMORY_FLYOUT_OPEN_BEGIN = L"MemoryFlyoutOpenBegin"; constexpr auto EVENT_NAME_MEMORY_FLYOUT_OPEN_BEGIN = L"MemoryFlyoutOpenBegin";
constexpr auto EVENT_NAME_MEMORY_FLYOUT_OPEN_END = L"MemoryFlyoutOpenEnd"; constexpr auto EVENT_NAME_MEMORY_FLYOUT_OPEN_END = L"MemoryFlyoutOpenEnd";
constexpr auto EVENT_NAME_MEMORY_CLEAR_ALL = L"MemoryClearAll"; constexpr auto EVENT_NAME_MEMORY_CLEAR_ALL = L"MemoryClearAll";
constexpr auto EVENT_NAME_INVALID_INPUT_PASTED = L"InvalidInputPasted"; constexpr auto EVENT_NAME_INVALID_PASTED_INPUT_OCCURRED = L"InvalidPastedInputOccurred";
constexpr auto EVENT_NAME_VALID_INPUT_PASTED = L"ValidInputPasted"; constexpr auto EVENT_NAME_VALID_INPUT_PASTED = L"ValidInputPasted";
constexpr auto EVENT_NAME_BITFLIP_PANE_CLICKED = L"BitFlipPaneClicked"; constexpr auto EVENT_NAME_BITFLIP_PANE_CLICKED = L"BitFlipPaneClicked";
constexpr auto EVENT_NAME_BITFLIP_BUTTONS_USED = L"BitFlipToggleButtonUsed"; constexpr auto EVENT_NAME_BITFLIP_BUTTONS_USED = L"BitFlipToggleButtonUsed";
@ -81,6 +79,9 @@ namespace CalculatorApp
constexpr auto EVENT_NAME_EXCEPTION = L"Exception"; constexpr auto EVENT_NAME_EXCEPTION = L"Exception";
constexpr auto PDT_PRIVACY_DATA_TAG = L"PartA_PrivTags";
constexpr auto PDT_PRODUCT_AND_SERVICE_USAGE = 0x0000'0000'0200'0000u;
#ifdef SEND_TELEMETRY #ifdef SEND_TELEMETRY
// c.f. WINEVENT_KEYWORD_RESERVED_63-56 0xFF00000000000000 // Bits 63-56 - channel keywords // c.f. WINEVENT_KEYWORD_RESERVED_63-56 0xFF00000000000000 // Bits 63-56 - channel keywords
// c.f. WINEVENT_KEYWORD_* 0x00FF000000000000 // Bits 55-48 - system-reserved keywords // c.f. WINEVENT_KEYWORD_* 0x00FF000000000000 // Bits 55-48 - system-reserved keywords
@ -102,7 +103,7 @@ namespace CalculatorApp
g_calculatorProvider( g_calculatorProvider(
L"MicrosoftCalculator", L"MicrosoftCalculator",
LoggingChannelOptions(GUID{ 0x4f50731a, 0x89cf, 0x4782, 0xb3, 0xe0, 0xdc, 0xe8, 0xc9, 0x4, 0x76, 0xba }), // Microsoft Telemetry group LoggingChannelOptions(GUID{ 0x4f50731a, 0x89cf, 0x4782, 0xb3, 0xe0, 0xdc, 0xe8, 0xc9, 0x4, 0x76, 0xba }), // Microsoft Telemetry group
GUID{ 0x905ca09, 0x610e, 0x401e, 0xb6, 0x50, 0x2f, 0x21, 0x29, 0x80, 0xb9, 0xe0 }), //Unique providerID {0905CA09-610E-401E-B650-2F212980B9E0} GUID{ 0x905ca09, 0x610e, 0x401e, 0xb6, 0x50, 0x2f, 0x21, 0x29, 0x80, 0xb9, 0xe0 }), // Unique providerID {0905CA09-610E-401E-B650-2F212980B9E0}
m_appLaunchActivity{ nullptr } m_appLaunchActivity{ nullptr }
{ {
// initialize the function array // initialize the function array
@ -481,9 +482,9 @@ namespace CalculatorApp
LogTelemetryEvent(EVENT_NAME_MEMORY_BODY_OPENED, fields); LogTelemetryEvent(EVENT_NAME_MEMORY_BODY_OPENED, fields);
} }
//If calculator is launched in any mode other than standard then this call will come which is not intended. But there is no way to avoid it. // If calculator is launched in any mode other than standard then this call will come which is not intended. But there is no way to avoid it.
//So don't use this function to analyze the count of mode change in session instead use CalculatorViewedInSession and ConverterViewedInSession to do that. // So don't use this function to analyze the count of mode change in session instead use CalculatorViewedInSession and ConverterViewedInSession to do that.
//Use of this function is to analyze perf of mode change. // Use of this function is to analyze perf of mode change.
void TraceLogger::LogModeChangeBegin(ViewMode fromMode, ViewMode toMode, int windowId) void TraceLogger::LogModeChangeBegin(ViewMode fromMode, ViewMode toMode, int windowId)
{ {
if (!GetTraceLoggingProviderEnabled()) return; if (!GetTraceLoggingProviderEnabled()) return;
@ -498,7 +499,7 @@ namespace CalculatorApp
} }
} }
//comment: same as LogModeChangeBegin // comment: same as LogModeChangeBegin
void TraceLogger::LogModeChangeEnd(ViewMode toMode, int windowId) const void TraceLogger::LogModeChangeEnd(ViewMode toMode, int windowId) const
{ {
if (!GetTraceLoggingProviderEnabled()) return; if (!GetTraceLoggingProviderEnabled()) return;
@ -641,17 +642,17 @@ namespace CalculatorApp
LogTelemetryEvent(EVENT_NAME_SINGLE_MEMORY_USED, fields); LogTelemetryEvent(EVENT_NAME_SINGLE_MEMORY_USED, fields);
} }
void TraceLogger::LogInvalidInputPasted(wstring_view reason, wstring_view pastedExpression, ViewMode mode, int programmerNumberBase, int bitLengthType) void TraceLogger::LogInvalidPastedInputOccurred(wstring_view reason, ViewMode mode, int programmerNumberBase, int bitLengthType)
{ {
if (!GetTraceLoggingProviderEnabled()) return; if (!GetTraceLoggingProviderEnabled()) return;
LoggingFields fields{}; LoggingFields fields{};
fields.AddString(L"Mode", NavCategory::GetFriendlyName(mode)->Data()); fields.AddString(L"Mode", NavCategory::GetFriendlyName(mode)->Data());
fields.AddString(L"Reason", reason); fields.AddString(L"Reason", reason);
fields.AddString(L"PastedExpression", pastedExpression);
fields.AddString(L"ProgrammerNumberBase", GetProgrammerType(programmerNumberBase).c_str()); fields.AddString(L"ProgrammerNumberBase", GetProgrammerType(programmerNumberBase).c_str());
fields.AddString(L"BitLengthType", GetProgrammerType(bitLengthType).c_str()); fields.AddString(L"BitLengthType", GetProgrammerType(bitLengthType).c_str());
LogTelemetryEvent(EVENT_NAME_INVALID_INPUT_PASTED, fields); fields.AddUInt64(PDT_PRIVACY_DATA_TAG, PDT_PRODUCT_AND_SERVICE_USAGE);
LogTelemetryEvent(EVENT_NAME_INVALID_PASTED_INPUT_OCCURRED, fields);
} }
void TraceLogger::LogValidInputPasted(ViewMode mode) const void TraceLogger::LogValidInputPasted(ViewMode mode) const

View file

@ -64,7 +64,7 @@ namespace CalculatorApp
void LogMemoryFlyoutOpenBegin(unsigned int) const; void LogMemoryFlyoutOpenBegin(unsigned int) const;
void LogDebug(std::wstring_view debugData); void LogDebug(std::wstring_view debugData);
void LogMemoryFlyoutOpenEnd(unsigned int) const; void LogMemoryFlyoutOpenEnd(unsigned int) const;
void LogInvalidInputPasted(std::wstring_view reason, std::wstring_view pastedExpression, CalculatorApp::Common::ViewMode mode, int ProgrammerNumberBase, int bitLengthType); void LogInvalidPastedInputOccurred(std::wstring_view reason, CalculatorApp::Common::ViewMode mode, int ProgrammerNumberBase, int bitLengthType);
void LogValidInputPasted(CalculatorApp::Common::ViewMode mode) const; void LogValidInputPasted(CalculatorApp::Common::ViewMode mode) const;
void UpdateFunctionUsage(int func); void UpdateFunctionUsage(int func);
void LogFunctionUsage(int); void LogFunctionUsage(int);

View file

@ -54,7 +54,7 @@ double Utils::GetDoubleFromWstring(wstring input)
return ::atof(inputString.c_str()); return ::atof(inputString.c_str());
} }
//returns windowId for the current view // Returns windowId for the current view
int Utils::GetWindowId() int Utils::GetWindowId()
{ {
int windowId = -1; int windowId = -1;
@ -80,20 +80,20 @@ void Utils::RunOnUIThreadNonblocking(std::function<void()>&& function, _In_ Core
} }
} }
// returns if the last character of a wstring is the target wchar_t // Returns if the last character of a wstring is the target wchar_t
bool Utils::IsLastCharacterTarget(_In_ wstring const &input, _In_ wchar_t target) bool Utils::IsLastCharacterTarget(_In_ wstring const &input, _In_ wchar_t target)
{ {
return !input.empty() && input.back() == target; return !input.empty() && input.back() == target;
} }
//return wstring after removing characters like space, comma, and double quotes // Returns wstring after removing characters like space, comma, and double quotes
wstring Utils::RemoveUnwantedCharsFromWstring(wstring input) wstring Utils::RemoveUnwantedCharsFromWstring(wstring input)
{ {
wchar_t unWantedChars[] = { L' ', L',', L'"', 8234, 8235, 8236, 8237 }; wchar_t unWantedChars[] = { L' ', L',', L'"', 8234, 8235, 8236, 8237 };
return RemoveUnwantedCharsFromWstring(input, unWantedChars, 6); return RemoveUnwantedCharsFromWstring(input, unWantedChars, 6);
} }
//return wstring after removing characters specified by unwantedChars array // Returns wstring after removing characters specified by unwantedChars array
wstring Utils::RemoveUnwantedCharsFromWstring(wstring input, wchar_t* unwantedChars, unsigned int size) wstring Utils::RemoveUnwantedCharsFromWstring(wstring input, wchar_t* unwantedChars, unsigned int size)
{ {
for (unsigned int i = 0; i < size; ++i) for (unsigned int i = 0; i < size; ++i)
@ -110,7 +110,7 @@ void Utils::SerializeCommandsAndTokens(_In_ shared_ptr<CalculatorVector <pair<ws
unsigned int commandsSize; unsigned int commandsSize;
IFTPlatformException(commands->GetSize(&commandsSize)); IFTPlatformException(commands->GetSize(&commandsSize));
// save the size of the commands vector // Save the size of the commands vector
writer->WriteUInt32(commandsSize); writer->WriteUInt32(commandsSize);
SerializeCommandVisitor cmdVisitor(writer); SerializeCommandVisitor cmdVisitor(writer);

View file

@ -41,6 +41,7 @@ namespace CalculatorApp::ViewModel
StringReference DisplayValue(L"DisplayValue"); StringReference DisplayValue(L"DisplayValue");
StringReference IsInError(L"IsInError"); StringReference IsInError(L"IsInError");
StringReference BinaryDisplayValue(L"BinaryDisplayValue"); StringReference BinaryDisplayValue(L"BinaryDisplayValue");
StringReference OpenParenthesisCount(L"OpenParenthesisCount");
} }
namespace CalculatorResourceKeys namespace CalculatorResourceKeys
@ -53,6 +54,8 @@ namespace CalculatorApp::ViewModel
StringReference OctButton(L"Format_OctButtonValue"); StringReference OctButton(L"Format_OctButtonValue");
StringReference BinButton(L"Format_BinButtonValue"); StringReference BinButton(L"Format_BinButtonValue");
StringReference LeftParenthesisAutomationFormat(L"Format_OpenParenthesisAutomationNamePrefix"); StringReference LeftParenthesisAutomationFormat(L"Format_OpenParenthesisAutomationNamePrefix");
StringReference OpenParenthesisCountAutomationFormat(L"Format_OpenParenthesisCountAutomationNamePrefix");
StringReference NoParenthesisAdded(L"NoRightParenthesisAdded_Announcement");
StringReference MaxDigitsReachedFormat(L"Format_MaxDigitsReached"); StringReference MaxDigitsReachedFormat(L"Format_MaxDigitsReached");
StringReference ButtonPressFeedbackFormat(L"Format_ButtonPressAuditoryFeedback"); StringReference ButtonPressFeedbackFormat(L"Format_ButtonPressAuditoryFeedback");
StringReference MemorySave(L"Format_MemorySave"); StringReference MemorySave(L"Format_MemorySave");
@ -92,7 +95,9 @@ StandardCalculatorViewModel::StandardCalculatorViewModel() :
m_localizedMemorySavedAutomationFormat(nullptr), m_localizedMemorySavedAutomationFormat(nullptr),
m_localizedMemoryItemChangedAutomationFormat(nullptr), m_localizedMemoryItemChangedAutomationFormat(nullptr),
m_localizedMemoryItemClearedAutomationFormat(nullptr), m_localizedMemoryItemClearedAutomationFormat(nullptr),
m_localizedMemoryCleared(nullptr) m_localizedMemoryCleared(nullptr),
m_localizedOpenParenthesisCountChangedAutomationFormat(nullptr),
m_localizedNoRightParenthesisAddedFormat(nullptr)
{ {
WeakReference calculatorViewModel(this); WeakReference calculatorViewModel(this);
m_calculatorDisplay.SetCallback(calculatorViewModel); m_calculatorDisplay.SetCallback(calculatorViewModel);
@ -226,6 +231,34 @@ void StandardCalculatorViewModel::SetParenthesisCount(_In_ const wstring& parent
} }
} }
void StandardCalculatorViewModel::SetOpenParenthesisCountNarratorAnnouncement()
{
String^ parenthesisCount = ((m_OpenParenthesisCount == nullptr) ? "0" : m_OpenParenthesisCount);
wstring localizedParenthesisCount = parenthesisCount->Data();
LocalizationSettings::GetInstance().LocalizeDisplayValue(&localizedParenthesisCount);
String^ announcement = LocalizationStringUtil::GetLocalizedNarratorAnnouncement(
CalculatorResourceKeys::OpenParenthesisCountAutomationFormat,
m_localizedOpenParenthesisCountChangedAutomationFormat,
localizedParenthesisCount.c_str());
Announcement = CalculatorAnnouncement::GetOpenParenthesisCountChangedAnnouncement(announcement);
}
void StandardCalculatorViewModel::OnNoRightParenAdded()
{
SetNoParenAddedNarratorAnnouncement();
}
void StandardCalculatorViewModel::SetNoParenAddedNarratorAnnouncement()
{
String^ announcement = LocalizationStringUtil::GetLocalizedNarratorAnnouncement(
CalculatorResourceKeys::NoParenthesisAdded,
m_localizedNoRightParenthesisAddedFormat);
Announcement = CalculatorAnnouncement::GetNoRightParenthesisAddedAnnouncement(announcement);
}
void StandardCalculatorViewModel::DisableButtons(CommandType selectedExpressionCommandType) void StandardCalculatorViewModel::DisableButtons(CommandType selectedExpressionCommandType)
{ {
if (selectedExpressionCommandType == CommandType::OperandCommand) if (selectedExpressionCommandType == CommandType::OperandCommand)
@ -483,7 +516,7 @@ void StandardCalculatorViewModel::HandleUpdatedOperandData(Command cmdenum)
if (IsOperandTextCompletelySelected) if (IsOperandTextCompletelySelected)
{ {
//Clear older text; // Clear older text;
m_selectedExpressionLastData = L""; m_selectedExpressionLastData = L"";
if (ch == L'x') if (ch == L'x')
{ {
@ -525,6 +558,7 @@ void StandardCalculatorViewModel::HandleUpdatedOperandData(Command cmdenum)
length = m_selectedExpressionLastData->Length() + 1; length = m_selectedExpressionLastData->Length() + 1;
if (length > 50) if (length > 50)
{ {
delete [] temp;
return; return;
} }
for (; i < length; ++i) for (; i < length; ++i)
@ -1162,10 +1196,10 @@ Array<unsigned char>^ StandardCalculatorViewModel::Serialize()
writer->WriteInt32(data); writer->WriteInt32(data);
} }
//For ProgrammerMode // For ProgrammerMode
writer->WriteUInt32(static_cast<UINT32>(CurrentRadixType)); writer->WriteUInt32(static_cast<UINT32>(CurrentRadixType));
//Serialize commands of calculator manager // Serialize commands of calculator manager
vector<unsigned char> serializedCommand = m_standardCalculatorManager.SerializeCommands(); vector<unsigned char> serializedCommand = m_standardCalculatorManager.SerializeCommands();
writer->WriteUInt32(static_cast<UINT32>(serializedCommand.size())); writer->WriteUInt32(static_cast<UINT32>(serializedCommand.size()));
writer->WriteBytes(ref new Array<unsigned char>(serializedCommand.data(), static_cast<unsigned int>(serializedCommand.size()))); writer->WriteBytes(ref new Array<unsigned char>(serializedCommand.data(), static_cast<unsigned int>(serializedCommand.size())));
@ -1175,7 +1209,7 @@ Array<unsigned char>^ StandardCalculatorViewModel::Serialize()
Utils::SerializeCommandsAndTokens(m_tokens, m_commands, writer); Utils::SerializeCommandsAndTokens(m_tokens, m_commands, writer);
} }
//Convert viewmodel data in writer to bytes // Convert viewmodel data in writer to bytes
IBuffer^ buffer = writer->DetachBuffer(); IBuffer^ buffer = writer->DetachBuffer();
DataReader^ reader = DataReader::FromBuffer(buffer); DataReader^ reader = DataReader::FromBuffer(buffer);
Platform::Array<unsigned char>^ viewModelDataAsBytes = ref new Array<unsigned char>(buffer->Length); Platform::Array<unsigned char>^ viewModelDataAsBytes = ref new Array<unsigned char>(buffer->Length);
@ -1223,7 +1257,7 @@ void StandardCalculatorViewModel::Deserialize(Array<unsigned char>^ state)
m_standardCalculatorManager.DeSerializePrimaryDisplay(serializedPrimaryDisplay); m_standardCalculatorManager.DeSerializePrimaryDisplay(serializedPrimaryDisplay);
CurrentRadixType = reader->ReadUInt32(); CurrentRadixType = reader->ReadUInt32();
//Read command data and Deserialize // Read command data and Deserialize
UINT32 modeldatalength = reader->ReadUInt32(); UINT32 modeldatalength = reader->ReadUInt32();
Array<unsigned char>^ modelDataAsBytes = ref new Array<unsigned char>(modeldatalength); Array<unsigned char>^ modelDataAsBytes = ref new Array<unsigned char>(modeldatalength);
reader->ReadBytes(modelDataAsBytes); reader->ReadBytes(modelDataAsBytes);
@ -1614,7 +1648,7 @@ bool StandardCalculatorViewModel::IsOpnd(int nOpCode)
Command::CommandPNT Command::CommandPNT
}; };
for (int i = 0; i < ARRAYSIZE(opnd); i++) for (int i = 0; i < size(opnd); i++)
{ {
if (nOpCode == static_cast<int>(opnd[i])) if (nOpCode == static_cast<int>(opnd[i]))
{ {
@ -1645,7 +1679,7 @@ bool StandardCalculatorViewModel::IsUnaryOp(int nOpCode)
Command::CommandCUB Command::CommandCUB
}; };
for (int i = 0; i < ARRAYSIZE(unaryOp); i++) for (int i = 0; i < size(unaryOp); i++)
{ {
if (nOpCode == static_cast<int>(unaryOp[i])) if (nOpCode == static_cast<int>(unaryOp[i]))
{ {
@ -1672,7 +1706,7 @@ bool StandardCalculatorViewModel::IsTrigOp(int nOpCode)
Command::CommandATAN Command::CommandATAN
}; };
for (int i = 0; i < ARRAYSIZE(trigOp); i++) for (int i = 0; i < size(trigOp); i++)
{ {
if (nOpCode == static_cast<int>(trigOp[i])) if (nOpCode == static_cast<int>(trigOp[i]))
{ {
@ -1695,7 +1729,7 @@ bool StandardCalculatorViewModel::IsBinOp(int nOpCode)
Command::CommandPWR Command::CommandPWR
}; };
for (int i = 0; i < ARRAYSIZE(binOp); i++) for (int i = 0; i < size(binOp); i++)
{ {
if (nOpCode == static_cast<int>(binOp[i])) if (nOpCode == static_cast<int>(binOp[i]))
{ {
@ -1729,7 +1763,7 @@ bool StandardCalculatorViewModel::IsRecoverableCommand(int nOpCode)
Command::CommandF Command::CommandF
}; };
for (int i = 0; i < ARRAYSIZE(recoverableCommands); i++) for (int i = 0; i < size(recoverableCommands); i++)
{ {
if (nOpCode == static_cast<int>(recoverableCommands[i])) if (nOpCode == static_cast<int>(recoverableCommands[i]))
{ {
@ -1947,7 +1981,7 @@ void StandardCalculatorViewModel::UpdatecommandsInRecordingMode()
} }
else else
{ {
//reset all vars // Reset all vars
isDecimal = false; isDecimal = false;
isNegative = false; isNegative = false;
isExpMode = false; isExpMode = false;

View file

@ -36,6 +36,7 @@ namespace CalculatorApp
extern Platform::StringReference IsMemoryEmpty; extern Platform::StringReference IsMemoryEmpty;
extern Platform::StringReference IsInError; extern Platform::StringReference IsInError;
extern Platform::StringReference BinaryDisplayValue; extern Platform::StringReference BinaryDisplayValue;
extern Platform::StringReference OpenParenthesisCount;
} }
[Windows::UI::Xaml::Data::Bindable] [Windows::UI::Xaml::Data::Bindable]
@ -276,7 +277,7 @@ namespace CalculatorApp
NumbersAndOperatorsEnum MapCharacterToButtonId(const wchar_t ch, bool& canSendNegate); NumbersAndOperatorsEnum MapCharacterToButtonId(const wchar_t ch, bool& canSendNegate);
//Memory feature related methods. They are internal because they need to called from the MainPage code-behind // Memory feature related methods. They are internal because they need to called from the MainPage code-behind
void OnMemoryButtonPressed(); void OnMemoryButtonPressed();
void OnMemoryItemPressed(Platform::Object^ memoryItemPosition); void OnMemoryItemPressed(Platform::Object^ memoryItemPosition);
void OnMemoryAdd(Platform::Object^ memoryItemPosition); void OnMemoryAdd(Platform::Object^ memoryItemPosition);
@ -290,6 +291,9 @@ namespace CalculatorApp
void SetExpressionDisplay(_Inout_ std::shared_ptr<CalculatorVector<std::pair<std::wstring, int>>> const &tokens, _Inout_ std::shared_ptr<CalculatorVector<std::shared_ptr<IExpressionCommand>>> const &commands); void SetExpressionDisplay(_Inout_ std::shared_ptr<CalculatorVector<std::pair<std::wstring, int>>> const &tokens, _Inout_ std::shared_ptr<CalculatorVector<std::shared_ptr<IExpressionCommand>>> const &commands);
void SetHistoryExpressionDisplay(_Inout_ std::shared_ptr<CalculatorVector<std::pair<std::wstring, int>>> const &tokens, _Inout_ std::shared_ptr<CalculatorVector <std::shared_ptr<IExpressionCommand>>> const &commands); void SetHistoryExpressionDisplay(_Inout_ std::shared_ptr<CalculatorVector<std::pair<std::wstring, int>>> const &tokens, _Inout_ std::shared_ptr<CalculatorVector <std::shared_ptr<IExpressionCommand>>> const &commands);
void SetParenthesisCount(_In_ const std::wstring& parenthesisCount); void SetParenthesisCount(_In_ const std::wstring& parenthesisCount);
void SetOpenParenthesisCountNarratorAnnouncement();
void OnNoRightParenAdded();
void SetNoParenAddedNarratorAnnouncement();
void OnMaxDigitsReached(); void OnMaxDigitsReached();
void OnBinaryOperatorReceived(); void OnBinaryOperatorReceived();
void OnMemoryItemChanged(unsigned int indexOfMemory); void OnMemoryItemChanged(unsigned int indexOfMemory);
@ -337,6 +341,8 @@ namespace CalculatorApp
Platform::String^ m_localizedMemoryItemChangedAutomationFormat; Platform::String^ m_localizedMemoryItemChangedAutomationFormat;
Platform::String^ m_localizedMemoryItemClearedAutomationFormat; Platform::String^ m_localizedMemoryItemClearedAutomationFormat;
Platform::String^ m_localizedMemoryCleared; Platform::String^ m_localizedMemoryCleared;
Platform::String^ m_localizedOpenParenthesisCountChangedAutomationFormat;
Platform::String^ m_localizedNoRightParenthesisAddedFormat;
bool m_pinned; bool m_pinned;
bool m_isOperandEnabled; bool m_isOperandEnabled;

View file

@ -479,7 +479,7 @@ void UnitConverterViewModel::OnButtonPressed(Platform::Object^ parameter)
NumbersAndOperatorsEnum numOpEnum = CalculatorButtonPressedEventArgs::GetOperationFromCommandParameter(parameter); NumbersAndOperatorsEnum numOpEnum = CalculatorButtonPressedEventArgs::GetOperationFromCommandParameter(parameter);
UCM::Command command = CommandFromButtonId(numOpEnum); UCM::Command command = CommandFromButtonId(numOpEnum);
//Don't clear the display if combo box is open and escape is pressed // Don't clear the display if combo box is open and escape is pressed
if (command == UCM::Command::Clear && IsDropDownOpen) if (command == UCM::Command::Clear && IsDropDownOpen)
{ {
return; return;
@ -674,7 +674,7 @@ void UnitConverterViewModel::Deserialize(Platform::String^ state)
RaisePropertyChanged(nullptr); // Update since all props have been updated. RaisePropertyChanged(nullptr); // Update since all props have been updated.
} }
//Saving User Preferences of Category and Associated-Units across Sessions. // Saving User Preferences of Category and Associated-Units across Sessions.
void UnitConverterViewModel::SaveUserPreferences() void UnitConverterViewModel::SaveUserPreferences()
{ {
if (UnitsAreValid()) if (UnitsAreValid())
@ -695,7 +695,7 @@ void UnitConverterViewModel::SaveUserPreferences()
} }
} }
//Restoring User Preferences of Category and Associated-Units. // Restoring User Preferences of Category and Associated-Units.
void UnitConverterViewModel::RestoreUserPreferences() void UnitConverterViewModel::RestoreUserPreferences()
{ {
if (!IsCurrencyCurrentCategory) if (!IsCurrencyCurrentCategory)

View file

@ -243,7 +243,7 @@ namespace CalculatorApp
Platform::String^ Serialize(); Platform::String^ Serialize();
void Deserialize(Platform::String^ state); void Deserialize(Platform::String^ state);
//Saving And Restoring User Preferences of Category and Associated-Units across Sessions. // Saving And Restoring User Preferences of Category and Associated-Units across Sessions.
void SaveUserPreferences(); void SaveUserPreferences();
void RestoreUserPreferences(); void RestoreUserPreferences();

View file

@ -26,7 +26,7 @@
#include <sstream> #include <sstream>
#include <concrt.h> #include <concrt.h>
#include <regex> #include <regex>
#include <iterator>
// C++\WinRT Headers // C++\WinRT Headers
#include "winrt/base.h" #include "winrt/base.h"
#include "winrt/Windows.Foundation.Diagnostics.h" #include "winrt/Windows.Foundation.Diagnostics.h"

View file

@ -9,7 +9,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CalcManager", "CalcManager\
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{3A5DF651-B8A1-45CA-9135-964A6FC7F5D1}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{3A5DF651-B8A1-45CA-9135-964A6FC7F5D1}"
ProjectSection(SolutionItems) = preProject ProjectSection(SolutionItems) = preProject
.editorconfig = .editorconfig
nuget.config = nuget.config nuget.config = nuget.config
EndProjectSection EndProjectSection
EndProject EndProject

View file

@ -371,12 +371,13 @@
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<VisualStateManager.VisualStateGroups> <VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="ActiveStates"> <VisualStateGroup x:Name="ActiveStates">
<VisualState x:Name="Active"/> <VisualState x:Name="Active">
<VisualState x:Name="Normal">
<VisualState.Setters> <VisualState.Setters>
<Setter Target="normalOutput.FontWeight" Value="Light"/> <Setter Target="normalOutput.FontWeight" Value="SemiBold"/>
<Setter Target="normalOutput.IsTextSelectionEnabled" Value="True"/>
</VisualState.Setters> </VisualState.Setters>
</VisualState> </VisualState>
<VisualState x:Name="Normal"/>
</VisualStateGroup> </VisualStateGroup>
</VisualStateManager.VisualStateGroups> </VisualStateManager.VisualStateGroups>
<ScrollViewer x:Name="textContainer" <ScrollViewer x:Name="textContainer"
@ -390,7 +391,7 @@
VerticalAlignment="{TemplateBinding VerticalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
Foreground="{TemplateBinding Foreground}" Foreground="{TemplateBinding Foreground}"
FontSize="{TemplateBinding FontSize}" FontSize="{TemplateBinding FontSize}"
FontWeight="SemiBold" FontWeight="Light"
AutomationProperties.AccessibilityView="Raw" AutomationProperties.AccessibilityView="Raw"
Text="{TemplateBinding DisplayValue}" Text="{TemplateBinding DisplayValue}"
TextAlignment="{TemplateBinding HorizontalContentAlignment}" TextAlignment="{TemplateBinding HorizontalContentAlignment}"
@ -457,12 +458,13 @@
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<VisualStateManager.VisualStateGroups> <VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="ActiveStates"> <VisualStateGroup x:Name="ActiveStates">
<VisualState x:Name="Active"/> <VisualState x:Name="Active">
<VisualState x:Name="Normal">
<VisualState.Setters> <VisualState.Setters>
<Setter Target="normalOutput.FontWeight" Value="Light"/> <Setter Target="normalOutput.IsTextSelectionEnabled" Value="True"/>
<Setter Target="normalOutput.FontWeight" Value="SemiBold"/>
</VisualState.Setters> </VisualState.Setters>
</VisualState> </VisualState>
<VisualState x:Name="Normal"/>
</VisualStateGroup> </VisualStateGroup>
</VisualStateManager.VisualStateGroups> </VisualStateManager.VisualStateGroups>
<ScrollViewer x:Name="textContainer" <ScrollViewer x:Name="textContainer"
@ -476,7 +478,7 @@
VerticalAlignment="{TemplateBinding VerticalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
Foreground="{TemplateBinding Foreground}" Foreground="{TemplateBinding Foreground}"
FontSize="{TemplateBinding FontSize}" FontSize="{TemplateBinding FontSize}"
FontWeight="SemiBold" FontWeight="Light"
AutomationProperties.AccessibilityView="Raw" AutomationProperties.AccessibilityView="Raw"
Text="{TemplateBinding DisplayValue}" Text="{TemplateBinding DisplayValue}"
TextAlignment="{TemplateBinding HorizontalContentAlignment}" TextAlignment="{TemplateBinding HorizontalContentAlignment}"
@ -544,12 +546,13 @@
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<VisualStateManager.VisualStateGroups> <VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="ActiveStates"> <VisualStateGroup x:Name="ActiveStates">
<VisualState x:Name="Active"/> <VisualState x:Name="Active">
<VisualState x:Name="Normal">
<VisualState.Setters> <VisualState.Setters>
<Setter Target="normalOutput.FontWeight" Value="Light"/> <Setter Target="normalOutput.FontWeight" Value="SemiBold"/>
<Setter Target="normalOutput.IsTextSelectionEnabled" Value="True"/>
</VisualState.Setters> </VisualState.Setters>
</VisualState> </VisualState>
<VisualState x:Name="Normal"/>
</VisualStateGroup> </VisualStateGroup>
</VisualStateManager.VisualStateGroups> </VisualStateManager.VisualStateGroups>
<ScrollViewer x:Name="textContainer" <ScrollViewer x:Name="textContainer"
@ -563,7 +566,7 @@
VerticalAlignment="{TemplateBinding VerticalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
Foreground="{TemplateBinding Foreground}" Foreground="{TemplateBinding Foreground}"
FontSize="{TemplateBinding FontSize}" FontSize="{TemplateBinding FontSize}"
FontWeight="SemiBold" FontWeight="Light"
AutomationProperties.AccessibilityView="Raw" AutomationProperties.AccessibilityView="Raw"
Text="{TemplateBinding DisplayValue}" Text="{TemplateBinding DisplayValue}"
TextAlignment="{TemplateBinding HorizontalContentAlignment}" TextAlignment="{TemplateBinding HorizontalContentAlignment}"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 391 B

After

Width:  |  Height:  |  Size: 384 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 513 B

After

Width:  |  Height:  |  Size: 484 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 806 B

After

Width:  |  Height:  |  Size: 728 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 235 B

After

Width:  |  Height:  |  Size: 234 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 456 B

After

Width:  |  Height:  |  Size: 441 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 487 B

After

Width:  |  Height:  |  Size: 470 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 532 B

After

Width:  |  Height:  |  Size: 511 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 557 B

After

Width:  |  Height:  |  Size: 503 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 683 B

After

Width:  |  Height:  |  Size: 634 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 485 B

After

Width:  |  Height:  |  Size: 296 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 524 B

After

Width:  |  Height:  |  Size: 331 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 577 B

After

Width:  |  Height:  |  Size: 390 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 690 B

After

Width:  |  Height:  |  Size: 484 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 996 B

After

Width:  |  Height:  |  Size: 728 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 371 B

After

Width:  |  Height:  |  Size: 180 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 384 B

After

Width:  |  Height:  |  Size: 193 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 421 B

After

Width:  |  Height:  |  Size: 231 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 453 B

After

Width:  |  Height:  |  Size: 262 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 474 B

After

Width:  |  Height:  |  Size: 284 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 491 B

After

Width:  |  Height:  |  Size: 303 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 505 B

After

Width:  |  Height:  |  Size: 311 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 558 B

After

Width:  |  Height:  |  Size: 370 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 630 B

After

Width:  |  Height:  |  Size: 445 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 665 B

After

Width:  |  Height:  |  Size: 471 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 707 B

After

Width:  |  Height:  |  Size: 506 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 737 B

After

Width:  |  Height:  |  Size: 507 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 867 B

After

Width:  |  Height:  |  Size: 639 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 371 B

After

Width:  |  Height:  |  Size: 180 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 371 B

After

Width:  |  Height:  |  Size: 180 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 371 B

After

Width:  |  Height:  |  Size: 180 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 384 B

After

Width:  |  Height:  |  Size: 193 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 384 B

After

Width:  |  Height:  |  Size: 193 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 384 B

After

Width:  |  Height:  |  Size: 193 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 235 B

After

Width:  |  Height:  |  Size: 234 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 235 B

After

Width:  |  Height:  |  Size: 234 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 421 B

After

Width:  |  Height:  |  Size: 231 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 421 B

After

Width:  |  Height:  |  Size: 231 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 235 B

After

Width:  |  Height:  |  Size: 234 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 235 B

After

Width:  |  Height:  |  Size: 234 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 421 B

After

Width:  |  Height:  |  Size: 231 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 453 B

After

Width:  |  Height:  |  Size: 262 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 453 B

After

Width:  |  Height:  |  Size: 262 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 453 B

After

Width:  |  Height:  |  Size: 262 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 474 B

After

Width:  |  Height:  |  Size: 284 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 474 B

After

Width:  |  Height:  |  Size: 284 B

Before After
Before After

Some files were not shown because too many files have changed in this diff Show more