diff --git a/src/CalcViewModel/CalcViewModel.vcxproj b/src/CalcViewModel/CalcViewModel.vcxproj
index c2a69b5c..dbab218f 100644
--- a/src/CalcViewModel/CalcViewModel.vcxproj
+++ b/src/CalcViewModel/CalcViewModel.vcxproj
@@ -35,9 +35,9 @@
- {90e9761d-9262-4773-942d-caeae75d7140}
- StaticLibrary
- CalcViewModel
+ {812d1a7b-b8ac-49e4-8e6d-af5d59500d56}
+ WindowsRuntimeComponent
+ CalculatorApp
en-US
14.0
true
@@ -48,45 +48,45 @@
- StaticLibrary
+ DynamicLibrary
true
v142
- StaticLibrary
+ DynamicLibrary
true
v142
- StaticLibrary
+ DynamicLibrary
true
v142
- StaticLibrary
+ DynamicLibrary
true
v142
- StaticLibrary
+ DynamicLibrary
false
true
v142
- StaticLibrary
+ DynamicLibrary
false
true
v142
- StaticLibrary
+ DynamicLibrary
false
true
v142
- StaticLibrary
+ DynamicLibrary
false
true
v142
@@ -105,13 +105,13 @@
-
-
-
-
+
+
+
+
@@ -122,169 +122,165 @@
-
+
+ false
+
+
+ false
+
+
+ false
+
+
+ false
+
+
+ false
+
+
+ false
+
+
+ false
+
+
false
- true
Use
- true
- true
- $(SolutionDir)..\src\;%(AdditionalIncludeDirectories)
- 4453
- /bigobj /await /std:c++17 /utf-8 %(AdditionalOptions)
- Level4
- true
+ _WINRT_DLL;%(PreprocessorDefinitions)
+ pch.h
+ $(IntDir)pch.pch
+ $(SolutionDir);%(AdditionalIncludeDirectories)
+ $(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories)
+ /bigobj /await %(AdditionalOptions)
+ 28204;4453
+ stdcpp17
Console
false
- false
-
- /ignore:4264 %(AdditionalOptions)
-
Use
- true
- true
- $(SolutionDir)..\src\;%(AdditionalIncludeDirectories)
- 4453
- /bigobj /await /std:c++17 /utf-8 %(AdditionalOptions)
- Level4
- true
+ _WINRT_DLL;NDEBUG;%(PreprocessorDefinitions)
+ pch.h
+ $(IntDir)pch.pch
+ $(SolutionDir);%(AdditionalIncludeDirectories)
+ $(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories)
+ /bigobj /await %(AdditionalOptions)
+ 28204;4453
+ stdcpp17
Console
false
- false
-
- /ignore:4264 %(AdditionalOptions)
-
-
+
Use
- true
- true
- $(SolutionDir)..\src\;%(AdditionalIncludeDirectories)
- 4453
- /bigobj /await /std:c++17 /utf-8 %(AdditionalOptions)
- Level4
- true
+ _WINRT_DLL;%(PreprocessorDefinitions)
+ pch.h
+ $(IntDir)pch.pch
+ $(SolutionDir);%(AdditionalIncludeDirectories)
+ $(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories)
+ /bigobj /await %(AdditionalOptions)
+ 28204;4453
+ stdcpp17
Console
false
- false
-
- /ignore:4264 %(AdditionalOptions)
-
-
+
Use
- true
- true
- $(SolutionDir)..\src\;%(AdditionalIncludeDirectories)
- 4453
- /bigobj /await /std:c++17 /utf-8 %(AdditionalOptions)
- Level4
- true
+ _WINRT_DLL;NDEBUG;%(PreprocessorDefinitions)
+ pch.h
+ $(IntDir)pch.pch
+ $(SolutionDir);%(AdditionalIncludeDirectories)
+ $(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories)
+ /bigobj /await %(AdditionalOptions)
+ 28204;4453
+ stdcpp17
+
+
+ Console
+ false
+
+
+
+
+ Use
+ _WINRT_DLL;%(PreprocessorDefinitions)
+ pch.h
+ $(IntDir)pch.pch
+ $(SolutionDir);%(AdditionalIncludeDirectories)
+ $(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories)
+ /bigobj /await %(AdditionalOptions)
+ 28204;4453
+ stdcpp17
+
+
+ Console
+ false
+
+
+
+
+ Use
+ _WINRT_DLL;NDEBUG;%(PreprocessorDefinitions)
+ pch.h
+ $(IntDir)pch.pch
+ $(SolutionDir);%(AdditionalIncludeDirectories)
+ $(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories)
+ /bigobj /await %(AdditionalOptions)
+ 28204;4453
+ stdcpp17
Console
false
- false
-
- /ignore:4264 %(AdditionalOptions)
-
Use
- true
- true
- $(SolutionDir)..\src\;%(AdditionalIncludeDirectories)
- 4453
- /bigobj /await /std:c++17 /utf-8 %(AdditionalOptions)
- Level4
- true
+ _WINRT_DLL;%(PreprocessorDefinitions)
+ pch.h
+ $(IntDir)pch.pch
+ $(SolutionDir);%(AdditionalIncludeDirectories)
+ $(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories)
+ /bigobj /await %(AdditionalOptions)
+ 28204;4453
+ stdcpp17
Console
false
- false
-
- /ignore:4264 %(AdditionalOptions)
-
Use
- true
- true
- $(SolutionDir)..\src\;%(AdditionalIncludeDirectories)
- 4453
- /bigobj /await /std:c++17 /utf-8 %(AdditionalOptions)
- Level4
- true
+ _WINRT_DLL;NDEBUG;%(PreprocessorDefinitions)
+ pch.h
+ $(IntDir)pch.pch
+ $(SolutionDir);%(AdditionalIncludeDirectories)
+ $(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories)
+ /bigobj /await %(AdditionalOptions)
+ 28204;4453
+ stdcpp17
Console
false
- false
-
- /ignore:4264 %(AdditionalOptions)
-
-
-
-
- Use
- true
- true
- $(SolutionDir)..\src\;%(AdditionalIncludeDirectories)
- 4453
- /bigobj /await /std:c++17 /utf-8 %(AdditionalOptions)
- Level4
- true
-
-
- Console
- false
- false
-
-
- /ignore:4264 %(AdditionalOptions)
-
-
-
-
- Use
- true
- true
- $(SolutionDir)..\src\;%(AdditionalIncludeDirectories)
- 4453
- /bigobj /await /std:c++17 /utf-8 %(AdditionalOptions)
- Level4
- true
-
-
- Console
- false
- false
-
-
- /ignore:4264 %(AdditionalOptions)
-
@@ -314,6 +310,7 @@
+
@@ -350,6 +347,7 @@
+
@@ -365,10 +363,10 @@
Create
Create
- Create
Create
- Create
Create
+ Create
+ Create
Create
Create
@@ -389,6 +387,7 @@
/DUSE_MOCK_DATA %(AdditionalOptions)
+ _WINRT_DLL;%(PreprocessorDefinitions)
@@ -407,5 +406,6 @@
-
+
+
\ No newline at end of file
diff --git a/src/CalcViewModel/CalcViewModel.vcxproj.filters b/src/CalcViewModel/CalcViewModel.vcxproj.filters
index b219806e..1571ac45 100644
--- a/src/CalcViewModel/CalcViewModel.vcxproj.filters
+++ b/src/CalcViewModel/CalcViewModel.vcxproj.filters
@@ -1,28 +1,25 @@
+
+ 5f4c8558-c780-41a5-b937-f9d79ad434a0
+ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tga;tiff;tif;png;wav;mfcribbon-ms
+
- {1daab7c4-63f6-4266-a259-f34acad66d09}
+ {05fb7833-4679-4430-bf21-808354e815bf}
- {8d4edf06-c312-4312-978a-b6c2beb8295a}
+ {8f1ef587-e5ce-4fc2-b9b7-73326d5e779a}
- {0184f727-b8aa-4af8-a699-63f1b56e7853}
+ {70216695-3d7b-451a-98e4-cacbea3ba0a6}
- {cf7dca32-9727-4f98-83c3-1c0ca7dd1e0c}
+ {9b94309f-6b9b-4cbb-8584-4273061cc432}
-
-
-
-
-
-
-
Common
@@ -56,12 +53,18 @@
Common
+
+ Common
+
Common
Common
+
+ Common\Automation
+
Common\Automation
@@ -80,26 +83,25 @@
GraphingCalculator
-
- Common\Automation
-
GraphingCalculator
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
Common
+
+ Common
+
Common
@@ -115,6 +117,9 @@
Common
+
+ Common
+
Common
@@ -145,12 +150,21 @@
Common
+
+ Common
+
+
+ Common
+
Common
Common
+
+ Common\Automation
+
Common\Automation
@@ -160,6 +174,9 @@
DataLoaders
+
+ DataLoaders
+
DataLoaders
@@ -169,43 +186,31 @@
DataLoaders
-
- DataLoaders
-
-
- Common\Automation
-
-
- Common
-
-
- Common
-
GraphingCalculator
GraphingCalculator
-
- Common
+
+ GraphingCalculator
GraphingCalculator
-
- GraphingCalculator
-
-
- Common
-
+
+
+
+
+
+
+
+
+
DataLoaders
-
-
-
\ No newline at end of file
diff --git a/src/CalcViewModel/Common/Automation/NarratorAnnouncement.h b/src/CalcViewModel/Common/Automation/NarratorAnnouncement.h
index a19de86f..385fea44 100644
--- a/src/CalcViewModel/Common/Automation/NarratorAnnouncement.h
+++ b/src/CalcViewModel/Common/Automation/NarratorAnnouncement.h
@@ -28,25 +28,23 @@ public
static bool IsValid(NarratorAnnouncement ^ announcement);
private:
- // Make CalculatorAnnouncement a friend class so it is the only
- // class that can access the private constructor.
- friend class CalculatorAnnouncement;
+ Platform::String ^ m_announcement;
+ Platform::String ^ m_activityId;
+ Windows::UI::Xaml::Automation::Peers::AutomationNotificationKind m_kind;
+ Windows::UI::Xaml::Automation::Peers::AutomationNotificationProcessing m_processing;
+ internal:
NarratorAnnouncement(
Platform::String ^ announcement,
Platform::String ^ activityId,
Windows::UI::Xaml::Automation::Peers::AutomationNotificationKind kind,
Windows::UI::Xaml::Automation::Peers::AutomationNotificationProcessing processing);
-
- Platform::String ^ m_announcement;
- Platform::String ^ m_activityId;
- Windows::UI::Xaml::Automation::Peers::AutomationNotificationKind m_kind;
- Windows::UI::Xaml::Automation::Peers::AutomationNotificationProcessing m_processing;
};
// CalculatorAnnouncement is intended to contain only static methods
// that return announcements made for the Calculator app.
- class CalculatorAnnouncement
+public
+ ref class CalculatorAnnouncement sealed
{
public:
static NarratorAnnouncement ^ GetDisplayUpdatedAnnouncement(Platform::String ^ announcement);
diff --git a/src/CalcViewModel/Common/CopyPasteManager.cpp b/src/CalcViewModel/Common/CopyPasteManager.cpp
index 8f84eead..19326006 100644
--- a/src/CalcViewModel/Common/CopyPasteManager.cpp
+++ b/src/CalcViewModel/Common/CopyPasteManager.cpp
@@ -116,7 +116,7 @@ String
}
// Get english translated expression
- String ^ englishString = LocalizationSettings::GetInstance().GetEnglishValueFromLocalizedDigits(pastedText);
+ String ^ englishString = LocalizationSettings::GetInstance()->GetEnglishValueFromLocalizedDigits(pastedText);
// Removing the spaces, comma separator from the pasteExpression to allow pasting of expressions like 1 + 2+1,333
auto pasteExpression = wstring(RemoveUnwantedCharsFromString(englishString)->Data());
@@ -614,7 +614,7 @@ ULONG32 CopyPasteManager::ProgrammerOperandLength(Platform::String ^ operand, Nu
Platform::String ^ CopyPasteManager::RemoveUnwantedCharsFromString(Platform::String ^ input)
{
constexpr wchar_t unWantedChars[] = { L' ', L',', L'"', 165, 164, 8373, 36, 8353, 8361, 8362, 8358, 8377, 163, 8364, 8234, 8235, 8236, 8237, 160 };
- input = CalculatorApp::Common::LocalizationSettings::GetInstance().RemoveGroupSeparators(input);
+ input = CalculatorApp::Common::LocalizationSettings::GetInstance()->RemoveGroupSeparators(input);
return ref new String(Utils::RemoveUnwantedCharsFromString(input->Data(), unWantedChars).c_str());
}
diff --git a/src/CalcViewModel/Common/DisplayExpressionToken.h b/src/CalcViewModel/Common/DisplayExpressionToken.h
index aaaaf37c..45b23c0d 100644
--- a/src/CalcViewModel/Common/DisplayExpressionToken.h
+++ b/src/CalcViewModel/Common/DisplayExpressionToken.h
@@ -50,7 +50,10 @@ public
m_InEditMode = val;
}
}
- internal : OBSERVABLE_PROPERTY_RW(TokenType, Type);
+
+ // CSHARP_MIGRATION: TODO: this property has been changed from Internal to Public
+ // double check if this change is reasonable
+ OBSERVABLE_PROPERTY_RW(TokenType, Type);
private:
bool m_InEditMode;
diff --git a/src/CalcViewModel/Common/EngineResourceProvider.cpp b/src/CalcViewModel/Common/EngineResourceProvider.cpp
index 05faff9f..2ad77835 100644
--- a/src/CalcViewModel/Common/EngineResourceProvider.cpp
+++ b/src/CalcViewModel/Common/EngineResourceProvider.cpp
@@ -19,16 +19,16 @@ namespace CalculatorApp
wstring EngineResourceProvider::GetCEngineString(wstring_view id)
{
- const auto& localizationSettings = LocalizationSettings::GetInstance();
+ LocalizationSettings^ localizationSettings = LocalizationSettings::GetInstance();
if (id.compare(L"sDecimal") == 0)
{
- return localizationSettings.GetDecimalSeparatorStr();
+ return localizationSettings->GetDecimalSeparatorStr();
}
if (id.compare(L"sThousand") == 0)
{
- return localizationSettings.GetNumberGroupingSeparatorStr();
+ return localizationSettings->GetNumberGroupingSeparatorStr();
}
if (id.compare(L"sGrouping") == 0)
@@ -39,7 +39,7 @@ namespace CalculatorApp
// 3;2;0 0x023 - group 1st 3 and then every 2 digits
// 4;0 0x004 - group every 4 digits
// 5;3;2;0 0x235 - group 5, then 3, then every 2
- wstring numberGroupingString = localizationSettings.GetNumberGroupingStr();
+ wstring numberGroupingString = localizationSettings->GetNumberGroupingStr();
return numberGroupingString;
}
diff --git a/src/CalcViewModel/Common/LocalizationService.cpp b/src/CalcViewModel/Common/LocalizationService.cpp
index c7fb9e0c..27bdfb1d 100644
--- a/src/CalcViewModel/Common/LocalizationService.cpp
+++ b/src/CalcViewModel/Common/LocalizationService.cpp
@@ -371,7 +371,7 @@ void LocalizationService::UpdateFontFamilyAndSize(DependencyObject ^ target)
// If successful, returns a formatter that respects the user's regional format settings,
// as configured by running intl.cpl.
-DecimalFormatter ^ LocalizationService::GetRegionalSettingsAwareDecimalFormatter() const
+DecimalFormatter ^ LocalizationService::GetRegionalSettingsAwareDecimalFormatter()
{
IIterable ^ languageIdentifiers = LocalizationService::GetLanguageIdentifiers();
if (languageIdentifiers != nullptr)
@@ -386,7 +386,7 @@ DecimalFormatter ^ LocalizationService::GetRegionalSettingsAwareDecimalFormatter
// as configured by running intl.cpl.
//
// This helper function creates a DateTimeFormatter with a TwentyFour hour clock
-DateTimeFormatter ^ LocalizationService::GetRegionalSettingsAwareDateTimeFormatter(_In_ String ^ format) const
+DateTimeFormatter ^ LocalizationService::GetRegionalSettingsAwareDateTimeFormatter(_In_ String ^ format)
{
IIterable ^ languageIdentifiers = LocalizationService::GetLanguageIdentifiers();
if (languageIdentifiers == nullptr)
@@ -399,7 +399,7 @@ DateTimeFormatter ^ LocalizationService::GetRegionalSettingsAwareDateTimeFormatt
// If successful, returns a formatter that respects the user's regional format settings,
// as configured by running intl.cpl.
-DateTimeFormatter ^ LocalizationService::GetRegionalSettingsAwareDateTimeFormatter(_In_ String ^ format, _In_ String ^ calendarIdentifier, _In_ String ^ clockIdentifier) const
+DateTimeFormatter ^ LocalizationService::GetRegionalSettingsAwareDateTimeFormatter(_In_ String ^ format, _In_ String ^ calendarIdentifier, _In_ String ^ clockIdentifier)
{
IIterable ^ languageIdentifiers = LocalizationService::GetLanguageIdentifiers();
if (languageIdentifiers == nullptr)
@@ -410,7 +410,7 @@ DateTimeFormatter ^ LocalizationService::GetRegionalSettingsAwareDateTimeFormatt
return ref new DateTimeFormatter(format, languageIdentifiers, GlobalizationPreferences::HomeGeographicRegion, calendarIdentifier, clockIdentifier);
}
-CurrencyFormatter ^ LocalizationService::GetRegionalSettingsAwareCurrencyFormatter() const
+CurrencyFormatter ^ LocalizationService::GetRegionalSettingsAwareCurrencyFormatter()
{
String ^ userCurrency =
(GlobalizationPreferences::Currencies->Size > 0) ? GlobalizationPreferences::Currencies->GetAt(0) : StringReference(DefaultCurrencyCode.data());
@@ -423,7 +423,7 @@ CurrencyFormatter ^ LocalizationService::GetRegionalSettingsAwareCurrencyFormatt
auto currencyFormatter = ref new CurrencyFormatter(userCurrency, languageIdentifiers, GlobalizationPreferences::HomeGeographicRegion);
- int fractionDigits = LocalizationSettings::GetInstance().GetCurrencyTrailingDigits();
+ int fractionDigits = LocalizationSettings::GetInstance()->GetCurrencyTrailingDigits();
currencyFormatter->FractionDigits = fractionDigits;
return currencyFormatter;
diff --git a/src/CalcViewModel/Common/LocalizationService.h b/src/CalcViewModel/Common/LocalizationService.h
index d6921371..4641acaf 100644
--- a/src/CalcViewModel/Common/LocalizationService.h
+++ b/src/CalcViewModel/Common/LocalizationService.h
@@ -30,10 +30,7 @@ namespace CalculatorApp
DEPENDENCY_PROPERTY_ATTACHED_WITH_DEFAULT_AND_CALLBACK(LanguageFontType, FontType, LanguageFontType::UIText);
DEPENDENCY_PROPERTY_ATTACHED_WITH_CALLBACK(double, FontSize);
- internal:
static LocalizationService ^ GetInstance();
- static void OverrideWithLanguage(_In_ const wchar_t* const language);
-
Windows::UI::Xaml::FlowDirection GetFlowDirection();
bool IsRtlLayout();
bool GetOverrideFontApiValues();
@@ -42,7 +39,17 @@ namespace CalculatorApp
Platform::String ^ GetFontFamilyOverride();
Windows::UI::Text::FontWeight GetFontWeightOverride();
double GetFontScaleFactorOverride(LanguageFontType fontType);
+ Windows::Globalization::NumberFormatting::DecimalFormatter ^ GetRegionalSettingsAwareDecimalFormatter();
+ Windows::Globalization::DateTimeFormatting::DateTimeFormatter ^ GetRegionalSettingsAwareDateTimeFormatter(_In_ Platform::String ^ format);
+ Windows::Globalization::DateTimeFormatting::DateTimeFormatter
+ ^ GetRegionalSettingsAwareDateTimeFormatter(
+ _In_ Platform::String ^ format,
+ _In_ Platform::String ^ calendarIdentifier,
+ _In_ Platform::String ^ clockIdentifier);
+ Windows::Globalization::NumberFormatting::CurrencyFormatter ^ GetRegionalSettingsAwareCurrencyFormatter();
+ internal:
+ static void OverrideWithLanguage(_In_ const wchar_t* const language);
void Sort(std::vector& source);
template
@@ -56,16 +63,6 @@ namespace CalculatorApp
});
}
- Windows::Globalization::NumberFormatting::DecimalFormatter ^ GetRegionalSettingsAwareDecimalFormatter() const;
- Windows::Globalization::DateTimeFormatting::DateTimeFormatter ^ GetRegionalSettingsAwareDateTimeFormatter(_In_ Platform::String ^ format) const;
- Windows::Globalization::DateTimeFormatting::DateTimeFormatter
- ^ GetRegionalSettingsAwareDateTimeFormatter(
- _In_ Platform::String ^ format,
- _In_ Platform::String ^ calendarIdentifier,
- _In_ Platform::String ^ clockIdentifier) const;
-
- Windows::Globalization::NumberFormatting::CurrencyFormatter ^ GetRegionalSettingsAwareCurrencyFormatter() const;
-
static Platform::String ^ GetNarratorReadableToken(Platform::String ^ rawToken);
static Platform::String ^ GetNarratorReadableString(Platform::String ^ rawString);
diff --git a/src/CalcViewModel/Common/LocalizationSettings.h b/src/CalcViewModel/Common/LocalizationSettings.h
index 86d45ab2..fe0625d2 100644
--- a/src/CalcViewModel/Common/LocalizationSettings.h
+++ b/src/CalcViewModel/Common/LocalizationSettings.h
@@ -10,13 +10,14 @@ namespace CalculatorApp
{
namespace Common
{
- class LocalizationSettings
+ public ref class LocalizationSettings sealed
{
private:
LocalizationSettings()
// Use DecimalFormatter as it respects the locale and the user setting
- : LocalizationSettings(LocalizationService::GetInstance()->GetRegionalSettingsAwareDecimalFormatter())
+ //: LocalizationSettings(LocalizationService::GetInstance()->GetRegionalSettingsAwareDecimalFormatter())
{
+ LocalizationSettings(LocalizationService::GetInstance()->GetRegionalSettingsAwareDecimalFormatter());
}
public:
@@ -126,48 +127,33 @@ namespace CalculatorApp
}
// A LocalizationSettings object is not copyable.
- LocalizationSettings(const LocalizationSettings&) = delete;
- LocalizationSettings& operator=(const LocalizationSettings&) = delete;
+ // CSHARP_MIGRATION: TODO: deleted and defaulted functions are not supported in managed/WinRT classes
+ //LocalizationSettings(const LocalizationSettings^) = delete;
+ //LocalizationSettings^ operator=(const LocalizationSettings^) = delete;
// A LocalizationSettings object is not moveable.
- LocalizationSettings(LocalizationSettings&&) = delete;
- LocalizationSettings& operator=(LocalizationSettings&&) = delete;
+ // CSHARP_MIGRATION: TODO: Double check how should we hanlde move constrcutor and move assignment
+ //LocalizationSettings(LocalizationSettings&&) = delete;
+ //LocalizationSettings& operator=(LocalizationSettings&&) = delete;
// Provider of the singleton LocalizationSettings instance.
- static const LocalizationSettings& GetInstance()
+ static LocalizationSettings^ GetInstance()
{
- static const LocalizationSettings localizationSettings;
-
+ static LocalizationSettings^ localizationSettings = ref new LocalizationSettings();
return localizationSettings;
}
- Platform::String ^ GetLocaleName() const
+ Platform::String ^ GetLocaleName()
{
return m_resolvedName;
}
- bool IsDigitEnUsSetting() const
+ bool IsDigitEnUsSetting()
{
return (this->GetDigitSymbolFromEnUsDigit('0') == L'0');
}
- void LocalizeDisplayValue(_Inout_ std::wstring* stringToLocalize) const
- {
- if (IsDigitEnUsSetting())
- {
- return;
- }
-
- for (wchar_t& ch : *stringToLocalize)
- {
- if (IsEnUsDigit(ch))
- {
- ch = GetDigitSymbolFromEnUsDigit(ch);
- }
- }
- }
-
- Platform::String ^ GetEnglishValueFromLocalizedDigits(Platform::String ^ localizedString) const
+ Platform::String ^ GetEnglishValueFromLocalizedDigits(Platform::String ^ localizedString)
{
if (m_resolvedName == L"en-US")
{
@@ -199,17 +185,63 @@ namespace CalculatorApp
return ref new Platform::String(englishString.c_str());
}
- bool IsEnUsDigit(const wchar_t digit) const
+ Platform::String ^ RemoveGroupSeparators(Platform::String ^ source)
+ {
+ std::wstring destination;
+ std::copy_if(
+ begin(source), end(source), std::back_inserter(destination), [this](auto const c) { return c != L' ' && c != m_numberGroupSeparator; });
+
+ return ref new Platform::String(destination.c_str());
+ }
+
+ Platform::String ^ GetCalendarIdentifier()
+ {
+ return m_calendarIdentifier;
+ }
+
+ Windows::Globalization::DayOfWeek GetFirstDayOfWeek()
+ {
+ return m_firstDayOfWeek;
+ }
+
+ int GetCurrencyTrailingDigits()
+ {
+ return m_currencyTrailingDigits;
+ }
+
+ int GetCurrencySymbolPrecedence()
+ {
+ return m_currencySymbolPrecedence;
+ }
+
+ wchar_t GetDecimalSeparator()
+ {
+ return m_decimalSeparator;
+ }
+
+ wchar_t GetDigitSymbolFromEnUsDigit(wchar_t digitSymbol)
+ {
+ assert(digitSymbol >= L'0' && digitSymbol <= L'9');
+ int digit = digitSymbol - L'0';
+ return m_digitSymbols.at(digit); // throws on out of range
+ }
+
+ wchar_t GetNumberGroupSeparator()
+ {
+ return m_numberGroupSeparator;
+ }
+
+ bool IsEnUsDigit(wchar_t digit)
{
return (digit >= L'0' && digit <= L'9');
}
- bool IsLocalizedDigit(const wchar_t digit) const
+ bool IsLocalizedDigit(wchar_t digit)
{
return std::find(m_digitSymbols.begin(), m_digitSymbols.end(), digit) != m_digitSymbols.end();
}
- bool IsLocalizedHexDigit(const wchar_t digit) const
+ bool IsLocalizedHexDigit(wchar_t digit)
{
if (IsLocalizedDigit(digit))
{
@@ -219,71 +251,53 @@ namespace CalculatorApp
return std::find(s_hexSymbols.begin(), s_hexSymbols.end(), digit) != s_hexSymbols.end();
}
- wchar_t GetDigitSymbolFromEnUsDigit(wchar_t digitSymbol) const
+ Platform::String ^ GetListSeparatorWinRT()
{
- assert(digitSymbol >= L'0' && digitSymbol <= L'9');
- int digit = digitSymbol - L'0';
- return m_digitSymbols.at(digit); // throws on out of range
+ return ref new Platform::String(GetListSeparator().c_str());
}
- wchar_t GetDecimalSeparator() const
+ Platform::String ^ GetDecimalSeparatorStrWinRT()
{
- return m_decimalSeparator;
+ return ref new Platform::String(GetDecimalSeparatorStr().c_str());
}
- wchar_t GetNumberGroupSeparator() const
+ internal:
+ void LocalizeDisplayValue(_Inout_ std::wstring* stringToLocalize)
{
- return m_numberGroupSeparator;
+ if (IsDigitEnUsSetting())
+ {
+ return;
+ }
+
+ for (wchar_t& ch : *stringToLocalize)
+ {
+ if (IsEnUsDigit(ch))
+ {
+ ch = GetDigitSymbolFromEnUsDigit(ch);
+ }
+ }
}
- std::wstring GetDecimalSeparatorStr() const
+ std::wstring GetDecimalSeparatorStr()
{
return std::wstring(1, m_decimalSeparator);
}
- std::wstring GetNumberGroupingSeparatorStr() const
+ std::wstring GetNumberGroupingSeparatorStr()
{
return std::wstring(1, m_numberGroupSeparator);
}
- std::wstring GetNumberGroupingStr() const
+ std::wstring GetNumberGroupingStr()
{
return m_numberGrouping;
}
- Platform::String ^ RemoveGroupSeparators(Platform::String ^ source) const
- {
- std::wstring destination;
- std::copy_if(
- begin(source), end(source), std::back_inserter(destination), [this](auto const c) { return c != L' ' && c != m_numberGroupSeparator; });
-
- return ref new Platform::String(destination.c_str());
- }
-
- Platform::String ^ GetCalendarIdentifier() const
- {
- return m_calendarIdentifier;
- }
-
- std::wstring GetListSeparator() const
+ std::wstring GetListSeparator()
{
return m_listSeparator;
}
- Windows::Globalization::DayOfWeek GetFirstDayOfWeek() const
- {
- return m_firstDayOfWeek;
- }
-
- int GetCurrencyTrailingDigits() const
- {
- return m_currencyTrailingDigits;
- }
-
- int GetCurrencySymbolPrecedence() const
- {
- return m_currencySymbolPrecedence;
- }
private:
static Platform::String^ GetCalendarIdentifierFromCalid(CALID calId)
diff --git a/src/CalcViewModel/Common/NavCategory.cpp b/src/CalcViewModel/Common/NavCategory.cpp
index 6af89959..f23f46e1 100644
--- a/src/CalcViewModel/Common/NavCategory.cpp
+++ b/src/CalcViewModel/Common/NavCategory.cpp
@@ -73,10 +73,22 @@ bool IsGraphingModeEnabled()
}
User ^ firstUser;
- create_task(User::FindAllAsync(UserType::LocalUser)).then([&firstUser](IVectorView ^ users) {
- firstUser = users->GetAt(0); }).wait();
- auto namedPolicyData = NamedPolicy::GetPolicyFromPathForUser(firstUser, L"Education", L"AllowGraphingCalculator");
- _isGraphingModeEnabledCached = namedPolicyData->GetBoolean() == true;
+ std::atomic_flag finished = ATOMIC_FLAG_INIT;
+
+ finished.test_and_set(std::memory_order_acquire); // acquire
+
+ create_task(User::FindAllAsync(UserType::LocalUser)).then([&firstUser, &finished](IVectorView ^ users) {
+ firstUser = users->GetAt(0);
+ finished.clear(std::memory_order_release); // release
+ }, task_continuation_context::use_arbitrary());
+
+ while (finished.test_and_set(std::memory_order_acquire)) // aquire
+ ; // spin
+
+ finished.clear(std::memory_order_release); // release
+
+ auto namedPolicyData = NamedPolicy::GetPolicyFromPathForUser(firstUser, L"Education", L"AllowGraphingCalculator");
+ _isGraphingModeEnabledCached = namedPolicyData->GetBoolean() == true;
return _isGraphingModeEnabledCached->Value;
}
@@ -528,3 +540,4 @@ NavCategoryGroup ^ NavCategoryGroup::CreateConverterCategory()
return ref new NavCategoryGroup(
NavCategoryGroupInitializer{ CategoryGroupType::Converter, L"ConverterModeTextCaps", L"ConverterModeText", L"ConverterModePluralText" });
}
+
diff --git a/src/CalcViewModel/Common/RadixType.cpp b/src/CalcViewModel/Common/RadixType.cpp
new file mode 100644
index 00000000..12b45371
--- /dev/null
+++ b/src/CalcViewModel/Common/RadixType.cpp
@@ -0,0 +1,8 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+#include "pch.h"
+#include "RadixType.h"
+
+// export enum RadixType
+
diff --git a/src/CalcViewModel/Common/RadixType.h b/src/CalcViewModel/Common/RadixType.h
new file mode 100644
index 00000000..e9b05414
--- /dev/null
+++ b/src/CalcViewModel/Common/RadixType.h
@@ -0,0 +1,19 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+#pragma once
+
+namespace CalculatorApp
+{
+ namespace Common
+ {
+ // This is expected to be in same order as IDM_HEX, IDM_DEC, IDM_OCT, IDM_BIN
+ public enum class RadixType
+ {
+ Hex,
+ Decimal,
+ Octal,
+ Binary
+ };
+ }
+}
diff --git a/src/CalcViewModel/Common/TraceLogger.cpp b/src/CalcViewModel/Common/TraceLogger.cpp
index f58513de..53a8ec15 100644
--- a/src/CalcViewModel/Common/TraceLogger.cpp
+++ b/src/CalcViewModel/Common/TraceLogger.cpp
@@ -147,11 +147,11 @@ namespace CalculatorApp
TraceLoggingCommon::GetInstance()->LogLevel2Event(StringReference(EVENT_NAME_EXCEPTION), fields);
}
- void TraceLogger::LogPlatformException(ViewMode mode, wstring_view functionName, Platform::Exception ^ e)
+ void TraceLogger::LogPlatformException(ViewMode mode, Platform::String ^ functionName, Platform::Exception ^ e)
{
auto fields = ref new LoggingFields();
fields->AddString(StringReference(CALC_MODE), NavCategory::GetFriendlyName(mode));
- fields->AddString(StringReference(L"FunctionName"), StringReference(functionName.data()));
+ fields->AddString(StringReference(L"FunctionName"), functionName);
fields->AddString(StringReference(L"Message"), e->Message);
fields->AddInt32(StringReference(L"HRESULT"), e->HResult);
TraceLoggingCommon::GetInstance()->LogLevel2Event(StringReference(EVENT_NAME_EXCEPTION), fields);
diff --git a/src/CalcViewModel/Common/TraceLogger.h b/src/CalcViewModel/Common/TraceLogger.h
index cef592e8..9f3ca663 100644
--- a/src/CalcViewModel/Common/TraceLogger.h
+++ b/src/CalcViewModel/Common/TraceLogger.h
@@ -83,9 +83,11 @@ namespace CalculatorApp
void LogVariableSettingsChanged(Platform::String ^ setting);
void LogGraphSettingsChanged(GraphSettingsType settingsType, Platform::String ^ settingValue);
void LogGraphTheme(Platform::String ^ graphTheme);
+ // CSHARP_MIGRATION: TODO:
+ void LogPlatformException(CalculatorApp::Common::ViewMode mode, Platform::String ^ functionName, Platform::Exception ^ e);
+
internal:
void LogStandardException(CalculatorApp::Common::ViewMode mode, std::wstring_view functionName, _In_ const std::exception& e);
- void LogPlatformException(CalculatorApp::Common::ViewMode mode, std::wstring_view functionName, _In_ Platform::Exception ^ e);
void LogInputPasted(CalculatorApp::Common::ViewMode mode);
private:
diff --git a/src/CalcViewModel/Common/Utils.cpp b/src/CalcViewModel/Common/Utils.cpp
index 6bcc527d..9fa35f16 100644
--- a/src/CalcViewModel/Common/Utils.cpp
+++ b/src/CalcViewModel/Common/Utils.cpp
@@ -10,6 +10,7 @@
#include "Common/AppResourceProvider.h"
#include "Common/ExpressionCommandSerializer.h"
#include "Common/ExpressionCommandDeserializer.h"
+#include "CalcManager/NumberFormattingUtils.h"
using namespace CalculatorApp;
using namespace CalculatorApp::Common;
@@ -168,18 +169,20 @@ void Utils::TrimBack(wstring& value)
}).base(), value.end());
}
-String^ Utils::EscapeHtmlSpecialCharacters(String^ originalString, shared_ptr> specialCharacters)
+bool operator==(const Color& color1, const Color& color2)
+{
+ return equal_to()(color1, color2);
+}
+
+bool operator!=(const Color& color1, const Color& color2)
+{
+ return !(color1 == color2);
+}
+
+String^ CalculatorApp::Utilities::EscapeHtmlSpecialCharacters(String^ originalString)
{
// Construct a default special characters if not provided.
- if (specialCharacters == nullptr)
- {
- specialCharacters = make_shared>();
- specialCharacters->push_back(L'&');
- specialCharacters->push_back(L'\"');
- specialCharacters->push_back(L'\'');
- specialCharacters->push_back(L'<');
- specialCharacters->push_back(L'>');
- }
+ const std::vector specialCharacters {L'&', L'\"', L'\'', L'<', L'>'};
bool replaceCharacters = false;
const wchar_t* pCh;
@@ -189,7 +192,7 @@ String^ Utils::EscapeHtmlSpecialCharacters(String^ originalString, shared_ptrData(); *pCh; pCh++)
{
- if (std::find(specialCharacters->begin(), specialCharacters->end(), *pCh) != specialCharacters->end())
+ if (std::find(specialCharacters.begin(), specialCharacters.end(), *pCh) != specialCharacters.end())
{
replaceCharacters = true;
break;
@@ -233,20 +236,22 @@ String^ Utils::EscapeHtmlSpecialCharacters(String^ originalString, shared_ptr()(color1, color2);
+ std::wstring tmp(input->Data());
+ CalcManager::NumberFormattingUtils::TrimTrailingZeros(tmp);
+ return ref new Platform::String(tmp.c_str());
}
-bool operator!=(const Color& color1, const Color& color2)
+bool CalculatorApp::Utilities::AreColorsEqual(Windows::UI::Color color1, Windows::UI::Color color2)
{
- return !(color1 == color2);
+ return Utils::AreColorsEqual(color1, color2);
}
// This method calculates the luminance ratio between White and the given background color.
// The luminance is calculate using the RGB values and does not use the A value.
// White or Black is returned
-SolidColorBrush ^ Utils::GetContrastColor(Color backgroundColor)
+SolidColorBrush ^ CalculatorApp::Utilities::GetContrastColor(Color backgroundColor)
{
auto luminance = 0.2126 * backgroundColor.R + 0.7152 * backgroundColor.G + 0.0722 * backgroundColor.B;
@@ -257,3 +262,9 @@ SolidColorBrush ^ Utils::GetContrastColor(Color backgroundColor)
return static_cast(Application::Current->Resources->Lookup(L"BlackBrush"));
}
+
+int CalculatorApp::Utilities::GetWindowId()
+{
+ return Utils::GetWindowId();
+}
+
diff --git a/src/CalcViewModel/Common/Utils.h b/src/CalcViewModel/Common/Utils.h
index 553e43f3..fe13e763 100644
--- a/src/CalcViewModel/Common/Utils.h
+++ b/src/CalcViewModel/Common/Utils.h
@@ -399,10 +399,6 @@ namespace Utils
void Trim(std::wstring& value);
void TrimFront(std::wstring& value);
void TrimBack(std::wstring& value);
-
- Platform::String ^ EscapeHtmlSpecialCharacters(Platform::String ^ originalString, std::shared_ptr> specialCharacters = nullptr);
-
- Windows::UI::Xaml::Media::SolidColorBrush ^ GetContrastColor(Windows::UI::Color backgroundColor);
}
// This goes into the header to define the property, in the public: section of the class
@@ -698,6 +694,18 @@ namespace CalculatorApp
return to;
}
+
+ // CSHARP_MIGRATION: TODO: Review below utils
+public
+ ref class Utilities sealed
+ {
+ public:
+ static Platform::String ^ EscapeHtmlSpecialCharacters(Platform::String ^ originalString);
+ static Platform::String^ TrimTrailingZeros(Platform::String^ input);
+ static bool AreColorsEqual(Windows::UI::Color color1, Windows::UI::Color color2);
+ static Windows::UI::Xaml::Media::SolidColorBrush ^ GetContrastColor(Windows::UI::Color backgroundColor);
+ static int GetWindowId();
+ };
}
// There's no standard definition of equality for Windows::UI::Color structs.
diff --git a/src/CalcViewModel/DataLoaders/CurrencyDataLoader.cpp b/src/CalcViewModel/DataLoaders/CurrencyDataLoader.cpp
index fc91a920..f45972e9 100644
--- a/src/CalcViewModel/DataLoaders/CurrencyDataLoader.cpp
+++ b/src/CalcViewModel/DataLoaders/CurrencyDataLoader.cpp
@@ -300,7 +300,7 @@ pair CurrencyDataLoader::GetCurrencyRatioEquality(_In_ const U
double ratio = (iter2->second).ratio;
double rounded = RoundCurrencyRatio(ratio);
- auto digit = LocalizationSettings::GetInstance().GetDigitSymbolFromEnUsDigit(L'1');
+ auto digit = LocalizationSettings::GetInstance()->GetDigitSymbolFromEnUsDigit(L'1');
auto digitSymbol = ref new String(&digit, 1);
auto roundedFormat = m_ratioFormatter->Format(rounded);
diff --git a/src/CalcViewModel/DateCalculatorViewModel.cpp b/src/CalcViewModel/DateCalculatorViewModel.cpp
index a34c1288..fb8eec09 100644
--- a/src/CalcViewModel/DateCalculatorViewModel.cpp
+++ b/src/CalcViewModel/DateCalculatorViewModel.cpp
@@ -45,13 +45,13 @@ DateCalculatorViewModel::DateCalculatorViewModel()
, m_StrDateResult(L"")
, m_StrDateResultAutomationName(L"")
{
- const auto & localizationSettings = LocalizationSettings::GetInstance();
+ LocalizationSettings^ localizationSettings = LocalizationSettings::GetInstance();
// Initialize Date Output format instances
- InitializeDateOutputFormats(localizationSettings.GetCalendarIdentifier());
+ InitializeDateOutputFormats(localizationSettings->GetCalendarIdentifier());
// Initialize Date Calc engine
- m_dateCalcEngine = ref new DateCalculationEngine(localizationSettings.GetCalendarIdentifier());
+ m_dateCalcEngine = ref new DateCalculationEngine(localizationSettings->GetCalendarIdentifier());
// Initialize dates of DatePicker controls to today's date
auto calendar = ref new Calendar();
// We force the timezone to UTC, in order to avoid being affected by Daylight Saving Time
@@ -68,7 +68,7 @@ DateCalculatorViewModel::DateCalculatorViewModel()
// Initialize the list separator delimiter appended with a space at the end, e.g. ", "
// This will be used for date difference formatting: Y years, M months, W weeks, D days
- m_listSeparator = localizationSettings.GetListSeparator() + L" ";
+ m_listSeparator = localizationSettings->GetListSeparator() + L" ";
// Initialize the output results
UpdateDisplayResult();
@@ -77,7 +77,7 @@ DateCalculatorViewModel::DateCalculatorViewModel()
for (int i = 0; i <= c_maxOffsetValue; i++)
{
wstring numberStr(to_wstring(i));
- localizationSettings.LocalizeDisplayValue(&numberStr);
+ localizationSettings->LocalizeDisplayValue(&numberStr);
m_offsetValues->Append(ref new String(numberStr.c_str()));
}
@@ -378,7 +378,7 @@ void DateCalculatorViewModel::OnCopyCommand(Platform::Object ^ parameter)
String ^ DateCalculatorViewModel::GetLocalizedNumberString(int value) const
{
wstring numberStr(to_wstring(value));
- LocalizationSettings::GetInstance().LocalizeDisplayValue(&numberStr);
+ LocalizationSettings::GetInstance()->LocalizeDisplayValue(&numberStr);
return ref new String(numberStr.c_str());
}
diff --git a/src/CalcViewModel/GraphingCalculator/EquationViewModel.cpp b/src/CalcViewModel/GraphingCalculator/EquationViewModel.cpp
index 50592aa4..b869776a 100644
--- a/src/CalcViewModel/GraphingCalculator/EquationViewModel.cpp
+++ b/src/CalcViewModel/GraphingCalculator/EquationViewModel.cpp
@@ -245,7 +245,7 @@ namespace CalculatorApp::ViewModel
return;
}
- Platform::String ^ separator = ref new String(LocalizationSettings::GetInstance().GetListSeparator().c_str());
+ Platform::String ^ separator = ref new String(LocalizationSettings::GetInstance()->GetListSeparator().c_str());
wstring error;
if ((graphEquation->TooComplexFeatures & KeyGraphFeaturesFlag::Domain) == KeyGraphFeaturesFlag::Domain)
diff --git a/src/CalcViewModel/HistoryViewModel.cpp b/src/CalcViewModel/HistoryViewModel.cpp
index 8235c93a..29152e3b 100644
--- a/src/CalcViewModel/HistoryViewModel.cpp
+++ b/src/CalcViewModel/HistoryViewModel.cpp
@@ -57,15 +57,15 @@ void HistoryViewModel::ReloadHistory(_In_ ViewMode currentMode)
auto historyListModel = m_calculatorManager->GetHistoryItems(m_currentMode);
auto historyListVM = ref new Platform::Collections::Vector();
- const auto& localizer = LocalizationSettings::GetInstance();
+ LocalizationSettings^ localizer = LocalizationSettings::GetInstance();
if (historyListModel.size() > 0)
{
for (auto ritr = historyListModel.rbegin(); ritr != historyListModel.rend(); ++ritr)
{
wstring expression = (*ritr)->historyItemVector.expression;
wstring result = (*ritr)->historyItemVector.result;
- localizer.LocalizeDisplayValue(&expression);
- localizer.LocalizeDisplayValue(&result);
+ localizer->LocalizeDisplayValue(&expression);
+ localizer->LocalizeDisplayValue(&result);
auto item = ref new HistoryItemViewModel(
ref new Platform::String(expression.c_str()),
@@ -83,11 +83,11 @@ void HistoryViewModel::ReloadHistory(_In_ ViewMode currentMode)
void HistoryViewModel::OnHistoryItemAdded(_In_ unsigned int addedItemIndex)
{
auto newItem = m_calculatorManager->GetHistoryItem(addedItemIndex);
- const auto& localizer = LocalizationSettings::GetInstance();
+ LocalizationSettings^ localizer = LocalizationSettings::GetInstance();
wstring expression = newItem->historyItemVector.expression;
wstring result = newItem->historyItemVector.result;
- localizer.LocalizeDisplayValue(&expression);
- localizer.LocalizeDisplayValue(&result);
+ localizer->LocalizeDisplayValue(&expression);
+ localizer->LocalizeDisplayValue(&result);
auto item = ref new HistoryItemViewModel(
ref new Platform::String(expression.c_str()),
ref new Platform::String(result.c_str()),
@@ -133,7 +133,7 @@ void HistoryViewModel::DeleteItem(_In_ HistoryItemViewModel ^ e)
}
// Adding 1 to the history item index to provide 1-based numbering on announcements.
wstring localizedIndex = to_wstring(itemIndex + 1);
- LocalizationSettings::GetInstance().LocalizeDisplayValue(&localizedIndex);
+ LocalizationSettings::GetInstance()->LocalizeDisplayValue(&localizedIndex);
m_localizedHistorySlotCleared = AppResourceProvider::GetInstance()->GetResourceString(HistoryResourceKeys::HistorySlotCleared);
String ^ announcement = LocalizationStringUtil::GetLocalizedString(m_localizedHistorySlotCleared, StringReference(localizedIndex.c_str()));
HistoryAnnouncement = CalculatorAnnouncement::GetHistorySlotClearedAnnouncement(announcement);
diff --git a/src/CalcViewModel/HistoryViewModel.h b/src/CalcViewModel/HistoryViewModel.h
index d7c7874e..f340c58d 100644
--- a/src/CalcViewModel/HistoryViewModel.h
+++ b/src/CalcViewModel/HistoryViewModel.h
@@ -48,13 +48,13 @@ namespace CalculatorApp
event HideHistoryClickedHandler ^ HideHistoryClicked;
event HistoryItemClickedHandler ^ HistoryItemClicked;
void ShowItem(_In_ CalculatorApp::ViewModel::HistoryItemViewModel ^ e);
+ void DeleteItem(_In_ CalculatorApp::ViewModel::HistoryItemViewModel ^ e);
internal : HistoryViewModel(_In_ CalculationManager::CalculatorManager* calculatorManager);
void SetCalculatorDisplay(CalculatorDisplay& calculatorDisplay);
void ReloadHistory(_In_ CalculatorApp::Common::ViewMode currentMode);
unsigned long long GetMaxItemSize();
- void DeleteItem(_In_ CalculatorApp::ViewModel::HistoryItemViewModel ^ e);
private:
CalculationManager::CalculatorManager* const m_calculatorManager;
diff --git a/src/CalcViewModel/StandardCalculatorViewModel.cpp b/src/CalcViewModel/StandardCalculatorViewModel.cpp
index 56f2bda4..2521ec47 100644
--- a/src/CalcViewModel/StandardCalculatorViewModel.cpp
+++ b/src/CalcViewModel/StandardCalculatorViewModel.cpp
@@ -25,7 +25,6 @@ using namespace Windows::UI::Core;
using namespace Windows::UI::Popups;
using namespace Windows::Storage::Streams;
using namespace Windows::Foundation::Collections;
-using namespace Utils;
using namespace concurrency;
constexpr int StandardModePrecision = 16;
@@ -118,7 +117,7 @@ StandardCalculatorViewModel::StandardCalculatorViewModel()
m_HistoryVM = ref new HistoryViewModel(&m_standardCalculatorManager);
m_HistoryVM->SetCalculatorDisplay(m_calculatorDisplay);
- m_decimalSeparator = LocalizationSettings::GetInstance().GetDecimalSeparator();
+ m_decimalSeparator = LocalizationSettings::GetInstance()->GetDecimalSeparator();
if (CoreWindow::GetForCurrentThread() != nullptr)
{
@@ -138,7 +137,7 @@ StandardCalculatorViewModel::StandardCalculatorViewModel()
String ^ StandardCalculatorViewModel::LocalizeDisplayValue(_In_ wstring const& displayValue)
{
wstring result(displayValue);
- LocalizationSettings::GetInstance().LocalizeDisplayValue(&result);
+ LocalizationSettings::GetInstance()->LocalizeDisplayValue(&result);
return ref new Platform::String(result.c_str());
}
@@ -170,13 +169,13 @@ String ^ StandardCalculatorViewModel::CalculateNarratorDisplayValue(_In_ wstring
String ^ StandardCalculatorViewModel::GetNarratorStringReadRawNumbers(_In_ String ^ localizedDisplayValue)
{
wstring ws;
- const auto& locSettings = LocalizationSettings::GetInstance();
+ LocalizationSettings^ locSettings = LocalizationSettings::GetInstance();
// Insert a space after each digit in the string, to force Narrator to read them as separate numbers.
for (const wchar_t& c : localizedDisplayValue)
{
ws += c;
- if (locSettings.IsLocalizedHexDigit(c))
+ if (locSettings->IsLocalizedHexDigit(c))
{
ws += L' ';
}
@@ -230,7 +229,7 @@ void StandardCalculatorViewModel::SetParenthesisCount(_In_ unsigned int parenthe
void StandardCalculatorViewModel::SetOpenParenthesisCountNarratorAnnouncement()
{
wstring localizedParenthesisCount = to_wstring(m_OpenParenthesisCount).c_str();
- LocalizationSettings::GetInstance().LocalizeDisplayValue(&localizedParenthesisCount);
+ LocalizationSettings::GetInstance()->LocalizeDisplayValue(&localizedParenthesisCount);
if (m_localizedOpenParenthesisCountChangedAutomationFormat == nullptr)
{
@@ -329,7 +328,7 @@ void StandardCalculatorViewModel::SetTokens(_Inout_ shared_ptrLocalizeDisplayValue(&(currentToken.first));
if (!isEditable)
{
@@ -392,7 +391,7 @@ String ^ StandardCalculatorViewModel::GetCalculatorExpressionAutomationName()
void StandardCalculatorViewModel::SetMemorizedNumbers(const vector& newMemorizedNumbers)
{
- const auto& localizer = LocalizationSettings::GetInstance();
+ LocalizationSettings^ localizer = LocalizationSettings::GetInstance();
if (newMemorizedNumbers.size() == 0) // Memory has been cleared
{
MemorizedNumbers->Clear();
@@ -408,7 +407,7 @@ void StandardCalculatorViewModel::SetMemorizedNumbers(const vector& new
MemoryItemViewModel ^ memorySlot = ref new MemoryItemViewModel(this);
memorySlot->Position = 0;
- localizer.LocalizeDisplayValue(&stringValue);
+ localizer->LocalizeDisplayValue(&stringValue);
memorySlot->Value = ref new String(stringValue.c_str());
MemorizedNumbers->InsertAt(0, memorySlot);
@@ -426,7 +425,7 @@ void StandardCalculatorViewModel::SetMemorizedNumbers(const vector& new
for (unsigned int i = 0; i < MemorizedNumbers->Size; i++)
{
auto newStringValue = newMemorizedNumbers.at(i);
- localizer.LocalizeDisplayValue(&newStringValue);
+ localizer->LocalizeDisplayValue(&newStringValue);
// If the value is different, update the value
if (MemorizedNumbers->GetAt(i)->Value != StringReference(newStringValue.c_str()))
@@ -1001,10 +1000,10 @@ ButtonInfo StandardCalculatorViewModel::MapCharacterToButtonId(char16 ch)
if (result.buttonId == NumbersAndOperatorsEnum::None)
{
- if (LocalizationSettings::GetInstance().IsLocalizedDigit(ch))
+ if (LocalizationSettings::GetInstance()->IsLocalizedDigit(ch))
{
result.buttonId =
- NumbersAndOperatorsEnum::Zero + static_cast(ch - LocalizationSettings::GetInstance().GetDigitSymbolFromEnUsDigit('0'));
+ NumbersAndOperatorsEnum::Zero + static_cast(ch - LocalizationSettings::GetInstance()->GetDigitSymbolFromEnUsDigit('0'));
result.canSendNegate = true;
}
}
@@ -1044,7 +1043,7 @@ void StandardCalculatorViewModel::OnMemoryItemChanged(unsigned int indexOfMemory
String ^ localizedValue = memSlot->Value;
wstring localizedIndex = to_wstring(indexOfMemory + 1);
- LocalizationSettings::GetInstance().LocalizeDisplayValue(&localizedIndex);
+ LocalizationSettings::GetInstance()->LocalizeDisplayValue(&localizedIndex);
if (m_localizedMemoryItemChangedAutomationFormat == nullptr)
{
@@ -1116,7 +1115,7 @@ void StandardCalculatorViewModel::OnMemoryClear(_In_ Object ^ memoryItemPosition
TraceLogger::GetInstance()->UpdateButtonUsage(NumbersAndOperatorsEnum::MemoryClear, GetCalculatorMode());
wstring localizedIndex = to_wstring(boxedPosition->Value + 1);
- LocalizationSettings::GetInstance().LocalizeDisplayValue(&localizedIndex);
+ LocalizationSettings::GetInstance()->LocalizeDisplayValue(&localizedIndex);
if (m_localizedMemoryItemClearedAutomationFormat == nullptr)
{
@@ -1216,7 +1215,7 @@ String ^ StandardCalculatorViewModel::GetRawDisplayValue()
}
else
{
- return LocalizationSettings::GetInstance().RemoveGroupSeparators(DisplayValue);
+ return LocalizationSettings::GetInstance()->RemoveGroupSeparators(DisplayValue);
}
}
@@ -1535,7 +1534,7 @@ size_t StandardCalculatorViewModel::LengthWithoutPadding(wstring str)
wstring StandardCalculatorViewModel::AddPadding(wstring binaryString)
{
- if (LocalizationSettings::GetInstance().GetEnglishValueFromLocalizedDigits(StringReference(binaryString.c_str())) == L"0")
+ if (LocalizationSettings::GetInstance()->GetEnglishValueFromLocalizedDigits(StringReference(binaryString.c_str())) == L"0")
{
return binaryString;
}
@@ -1571,13 +1570,13 @@ void StandardCalculatorViewModel::UpdateProgrammerPanelDisplay()
binaryDisplayString = m_standardCalculatorManager.GetResultForRadix(2, precision, true);
}
}
- const auto& localizer = LocalizationSettings::GetInstance();
+ LocalizationSettings^ localizer = LocalizationSettings::GetInstance();
binaryDisplayString = AddPadding(binaryDisplayString);
- localizer.LocalizeDisplayValue(&hexDisplayString);
- localizer.LocalizeDisplayValue(&decimalDisplayString);
- localizer.LocalizeDisplayValue(&octalDisplayString);
- localizer.LocalizeDisplayValue(&binaryDisplayString);
+ localizer->LocalizeDisplayValue(&hexDisplayString);
+ localizer->LocalizeDisplayValue(&decimalDisplayString);
+ localizer->LocalizeDisplayValue(&octalDisplayString);
+ localizer->LocalizeDisplayValue(&binaryDisplayString);
HexDisplayValue = ref new Platform::String(hexDisplayString.c_str());
DecimalDisplayValue = ref new Platform::String(decimalDisplayString.c_str());
@@ -1609,7 +1608,7 @@ void StandardCalculatorViewModel::UpdateOperand(int pos, String ^ text)
{
pair p = m_tokens->at(pos);
- String ^ englishString = LocalizationSettings::GetInstance().GetEnglishValueFromLocalizedDigits(text);
+ String ^ englishString = LocalizationSettings::GetInstance()->GetEnglishValueFromLocalizedDigits(text);
p.first = englishString->Data();
int commandPos = p.second;
diff --git a/src/CalcViewModel/StandardCalculatorViewModel.h b/src/CalcViewModel/StandardCalculatorViewModel.h
index d60122bf..de5fb049 100644
--- a/src/CalcViewModel/StandardCalculatorViewModel.h
+++ b/src/CalcViewModel/StandardCalculatorViewModel.h
@@ -244,6 +244,21 @@ namespace CalculatorApp
void ResetCalcManager(bool clearMemory);
void SendCommandToCalcManager(int command);
+ public:
+ // CSHARP_MIGRATION: TODO: check if these still need to be internal
+ // Memory feature related methods. They are internal because they need to called from the MainPage code-behind
+ void OnMemoryButtonPressed();
+ void OnMemoryItemPressed(Platform::Object ^ memoryItemPosition);
+ void OnMemoryAdd(Platform::Object ^ memoryItemPosition);
+ void OnMemorySubtract(Platform::Object ^ memoryItemPosition);
+ void OnMemoryClear(_In_ Platform::Object ^ memoryItemPosition);
+ void SelectHistoryItem(HistoryItemViewModel ^ item);
+ void SwitchProgrammerModeBase(CalculatorApp::Common::NumberBase calculatorBase);
+ void SetBitshiftRadioButtonCheckedAnnouncement(Platform::String ^ announcement);
+ void SetOpenParenthesisCountNarratorAnnouncement();
+ void SwitchAngleType(NumbersAndOperatorsEnum num);
+ void FtoEButtonToggled();
+
internal:
void OnPaste(Platform::String ^ pastedString);
void OnCopyCommand(Platform::Object ^ parameter);
@@ -251,23 +266,14 @@ namespace CalculatorApp
ButtonInfo MapCharacterToButtonId(char16 ch);
- // Memory feature related methods. They are internal because they need to called from the MainPage code-behind
- void OnMemoryButtonPressed();
- void OnMemoryItemPressed(Platform::Object ^ memoryItemPosition);
- void OnMemoryAdd(Platform::Object ^ memoryItemPosition);
- void OnMemorySubtract(Platform::Object ^ memoryItemPosition);
- void OnMemoryClear(_In_ Platform::Object ^ memoryItemPosition);
-
void OnInputChanged();
void DisplayPasteError();
void SetParenthesisCount(_In_ unsigned int parenthesisCount);
- void SetOpenParenthesisCountNarratorAnnouncement();
void OnNoRightParenAdded();
void SetNoParenAddedNarratorAnnouncement();
void OnMaxDigitsReached();
void OnBinaryOperatorReceived();
void OnMemoryItemChanged(unsigned int indexOfMemory);
- void SetBitshiftRadioButtonCheckedAnnouncement(Platform::String ^ announcement);
Platform::String ^ GetLocalizedStringFormat(Platform::String ^ format, Platform::String ^ displayValue);
void OnPropertyChanged(Platform::String ^ propertyname);
@@ -276,10 +282,7 @@ namespace CalculatorApp
Platform::String ^ GetRawDisplayValue();
void Recalculate(bool fromHistory = false);
bool IsOperator(CalculationManager::Command cmdenum);
- void FtoEButtonToggled();
- void SwitchProgrammerModeBase(CalculatorApp::Common::NumberBase calculatorBase);
- void SetMemorizedNumbersString();
- void SwitchAngleType(NumbersAndOperatorsEnum num);
+ void SetMemorizedNumbersString();
void ResetDisplay();
void SetPrecision(int32_t precision);
@@ -291,7 +294,7 @@ namespace CalculatorApp
{
return m_CurrentAngleType;
}
- void SelectHistoryItem(HistoryItemViewModel ^ item);
+
private:
void SetMemorizedNumbers(const std::vector& memorizedNumbers);
void UpdateProgrammerPanelDisplay();
diff --git a/src/CalcViewModel/UnitConverterViewModel.cpp b/src/CalcViewModel/UnitConverterViewModel.cpp
index 90960eb8..7bedece5 100644
--- a/src/CalcViewModel/UnitConverterViewModel.cpp
+++ b/src/CalcViewModel/UnitConverterViewModel.cpp
@@ -128,7 +128,7 @@ UnitConverterViewModel::UnitConverterViewModel(const shared_ptrGetRegionalSettingsAwareDecimalFormatter();
m_decimalFormatter->FractionDigits = 0;
m_decimalFormatter->IsGrouped = true;
- m_decimalSeparator = LocalizationSettings::GetInstance().GetDecimalSeparator();
+ m_decimalSeparator = LocalizationSettings::GetInstance()->GetDecimalSeparator();
m_currencyFormatter = localizationService->GetRegionalSettingsAwareCurrencyFormatter();
m_currencyFormatter->IsGrouped = true;
@@ -922,10 +922,10 @@ NumbersAndOperatorsEnum UnitConverterViewModel::MapCharacterToButtonId(const wch
if (mappedValue == NumbersAndOperatorsEnum::None)
{
- if (LocalizationSettings::GetInstance().IsLocalizedDigit(ch))
+ if (LocalizationSettings::GetInstance()->IsLocalizedDigit(ch))
{
mappedValue = NumbersAndOperatorsEnum::Zero
- + static_cast(ch - LocalizationSettings::GetInstance().GetDigitSymbolFromEnUsDigit(L'0'));
+ + static_cast(ch - LocalizationSettings::GetInstance()->GetDigitSymbolFromEnUsDigit(L'0'));
canSendNegate = true;
}
}
diff --git a/src/CalcViewModel/UnitConverterViewModel.h b/src/CalcViewModel/UnitConverterViewModel.h
index b48c1c3b..fd62940d 100644
--- a/src/CalcViewModel/UnitConverterViewModel.h
+++ b/src/CalcViewModel/UnitConverterViewModel.h
@@ -70,6 +70,18 @@ namespace CalculatorApp
return AccessibleName;
}
+ // CSHARP_MIGRATION: TODO:
+ public:
+ bool IsModelUnitWhimsical()
+ {
+ return m_original.isWhimsical;
+ }
+
+ int ModelUnitID()
+ {
+ return m_original.id;
+ }
+
internal : const UnitConversionManager::Unit& GetModelUnit() const
{
return m_original;
@@ -87,11 +99,14 @@ namespace CalculatorApp
{
}
- bool IsWhimsical() const
+ // CSHARP_MIGRATION: TODO: double check below method's accessor
+ public:
+ bool IsWhimsical()
{
return m_Unit->GetModelUnit().isWhimsical;
}
+ public:
Platform::String ^ GetLocalizedAutomationName();
public: