Support other locales for decimal and list separators (#1060)
* Support other locales for decimal and list seperators * PR fixes
This commit is contained in:
parent
880072016f
commit
f1d53fba61
@ -74,6 +74,8 @@ GraphingCalculator::GraphingCalculator()
|
||||
// Update where the pointer value is (ie: where the user cursor from keyboard inputs moves the point to)
|
||||
GraphingControl->PointerValueChangedEvent += ref new PointerValueChangedEventHandler(this, &GraphingCalculator::OnPointerPointChanged);
|
||||
|
||||
GraphingControl->UseCommaDecimalSeperator = LocalizationSettings::GetInstance().GetDecimalSeparator() == ',';
|
||||
|
||||
// OemMinus and OemAdd aren't declared in the VirtualKey enum, we can't add this accelerator XAML-side
|
||||
auto virtualKey = ref new KeyboardAccelerator();
|
||||
virtualKey->Key = (VirtualKey)189; // OemPlus key
|
||||
|
@ -9,6 +9,7 @@
|
||||
#include "Controls/MathRichEditBox.h"
|
||||
|
||||
using namespace CalculatorApp;
|
||||
using namespace CalculatorApp::Common;
|
||||
|
||||
using namespace Platform;
|
||||
using namespace Windows::Foundation;
|
||||
@ -60,9 +61,9 @@ static const std::unordered_map<NumbersAndOperatorsEnum, std::tuple<Platform::St
|
||||
{ NumbersAndOperatorsEnum::LogBaseE, { L"ln()", 3, 0 } },
|
||||
{ NumbersAndOperatorsEnum::Sqrt, { L"sqrt()", 5, 0 } },
|
||||
{ NumbersAndOperatorsEnum::CubeRoot, { L"cbrt()", 5, 0 } },
|
||||
{ NumbersAndOperatorsEnum::YRootX, { L"root(x,n)", 7, 1 } },
|
||||
{ NumbersAndOperatorsEnum::YRootX, { L"root(x" + StringReference(LocalizationSettings::GetInstance().GetListSeparator().data()) + L"n)", 7, 1 } },
|
||||
{ NumbersAndOperatorsEnum::TwoPowerX, { L"2^", 2, 0 } },
|
||||
{ NumbersAndOperatorsEnum::LogBaseX, { L"log(b, x)", 4, 1 } },
|
||||
{ NumbersAndOperatorsEnum::LogBaseX, { "log(b" + StringReference(LocalizationSettings::GetInstance().GetListSeparator().data()) + L" x)", 4, 1 } },
|
||||
{ NumbersAndOperatorsEnum::EPowerX, { L"e^", 4, 0 } },
|
||||
{ NumbersAndOperatorsEnum::Abs, { L"abs()", 4, 0 } },
|
||||
{ NumbersAndOperatorsEnum::X, { L"x", 1, 0 } },
|
||||
@ -90,13 +91,13 @@ static const std::unordered_map<NumbersAndOperatorsEnum, std::tuple<Platform::St
|
||||
{ NumbersAndOperatorsEnum::Seven, { L"7", 1, 0 } },
|
||||
{ NumbersAndOperatorsEnum::Eight, { L"8", 1, 0 } },
|
||||
{ NumbersAndOperatorsEnum::Nine, { L"9", 1, 0 } },
|
||||
{ NumbersAndOperatorsEnum::Decimal, { L".", 1, 0 } },
|
||||
{ NumbersAndOperatorsEnum::Decimal, { StringReference(LocalizationSettings::GetInstance().GetDecimalSeparatorStr().data()), 1, 0 } },
|
||||
};
|
||||
|
||||
GraphingNumPad::GraphingNumPad()
|
||||
{
|
||||
InitializeComponent();
|
||||
const auto& localizationSettings = CalculatorApp::Common::LocalizationSettings::GetInstance();
|
||||
const auto& localizationSettings = LocalizationSettings::GetInstance();
|
||||
DecimalSeparatorButton->Content = localizationSettings.GetDecimalSeparator();
|
||||
Num0Button->Content = localizationSettings.GetDigitSymbolFromEnUsDigit('0');
|
||||
Num1Button->Content = localizationSettings.GetDigitSymbolFromEnUsDigit('1');
|
||||
|
@ -29,6 +29,7 @@ using namespace Windows::UI::Xaml::Media;
|
||||
using namespace GraphControl;
|
||||
|
||||
DEPENDENCY_PROPERTY_INITIALIZATION(Grapher, ForceProportionalAxes);
|
||||
DEPENDENCY_PROPERTY_INITIALIZATION(Grapher, UseCommaDecimalSeperator);
|
||||
DEPENDENCY_PROPERTY_INITIALIZATION(Grapher, Variables);
|
||||
DEPENDENCY_PROPERTY_INITIALIZATION(Grapher, Equations);
|
||||
DEPENDENCY_PROPERTY_INITIALIZATION(Grapher, AxesColor);
|
||||
@ -279,7 +280,14 @@ namespace GraphControl
|
||||
|
||||
if (numValidEquations++ > 0)
|
||||
{
|
||||
request += L"<mo>,</mo>";
|
||||
if (!UseCommaDecimalSeperator)
|
||||
{
|
||||
request += L"<mo>,</mo>";
|
||||
}
|
||||
else
|
||||
{
|
||||
request += L"<mo>;</mo>";
|
||||
}
|
||||
}
|
||||
auto equationRequest = eq->GetRequest()->Data();
|
||||
|
||||
@ -511,6 +519,20 @@ namespace GraphControl
|
||||
TryUpdateGraph(false);
|
||||
}
|
||||
|
||||
void Grapher::OnUseCommaDecimalSeperatorPropertyChanged(bool oldValue, bool newValue)
|
||||
{
|
||||
if (newValue)
|
||||
{
|
||||
m_solver->ParsingOptions().SetLocalizationType(::LocalizationType::DecimalCommaAndListSemicolon);
|
||||
m_solver->FormatOptions().SetLocalizationType(::LocalizationType::DecimalCommaAndListSemicolon);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_solver->ParsingOptions().SetLocalizationType(::LocalizationType::DecimalPointAndListComma);
|
||||
m_solver->FormatOptions().SetLocalizationType(::LocalizationType::DecimalPointAndListComma);
|
||||
}
|
||||
}
|
||||
|
||||
void Grapher::OnPointerEntered(PointerRoutedEventArgs ^ e)
|
||||
{
|
||||
if (m_renderMain)
|
||||
|
@ -38,6 +38,7 @@ public
|
||||
|
||||
DEPENDENCY_PROPERTY_OWNER(Grapher);
|
||||
DEPENDENCY_PROPERTY_WITH_DEFAULT_AND_CALLBACK(bool, ForceProportionalAxes, true);
|
||||
DEPENDENCY_PROPERTY_WITH_DEFAULT_AND_CALLBACK(bool, UseCommaDecimalSeperator, false);
|
||||
DEPENDENCY_PROPERTY_WITH_DEFAULT(
|
||||
SINGLE_ARG(Windows::Foundation::Collections::IObservableMap<Platform::String ^, double> ^),
|
||||
Variables,
|
||||
@ -266,6 +267,7 @@ public
|
||||
|
||||
private:
|
||||
void OnForceProportionalAxesPropertyChanged(bool oldValue, bool newValue);
|
||||
void OnUseCommaDecimalSeperatorPropertyChanged(bool oldValue, bool newValue);
|
||||
void OnEquationsPropertyChanged(EquationCollection ^ oldValue, EquationCollection ^ newValue);
|
||||
void OnAxesColorPropertyChanged(Windows::UI::Color oldValue, Windows::UI::Color newValue);
|
||||
void OnGraphBackgroundPropertyChanged(Windows::UI::Color oldValue, Windows::UI::Color newValue);
|
||||
|
@ -13,6 +13,10 @@ namespace MockGraphingImpl
|
||||
void SetFormatType(Graphing::FormatType type) override
|
||||
{
|
||||
}
|
||||
|
||||
void SetLocalizationType(Graphing::LocalizationType value) override
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
class EvalOptions : public Graphing::IEvalOptions
|
||||
@ -46,6 +50,10 @@ namespace MockGraphingImpl
|
||||
void SetMathMLPrefix(const std::wstring& value) override
|
||||
{
|
||||
}
|
||||
|
||||
void SetLocalizationType(Graphing::LocalizationType value) override
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
class MockExpression : public Graphing::IExpression
|
||||
|
@ -34,6 +34,7 @@ namespace Graphing
|
||||
virtual ~IParsingOptions() = default;
|
||||
|
||||
virtual void SetFormatType(FormatType type) = 0;
|
||||
virtual void SetLocalizationType(LocalizationType value) = 0;
|
||||
};
|
||||
|
||||
struct IEvalOptions : public NonCopyable, public NonMoveable
|
||||
@ -49,7 +50,8 @@ namespace Graphing
|
||||
virtual ~IFormatOptions() = default;
|
||||
|
||||
virtual void SetFormatType(FormatType type) = 0;
|
||||
virtual void SetMathMLPrefix(const std::wstring& value) = 0;
|
||||
virtual void SetMathMLPrefix(const std::wstring& value) = 0;
|
||||
virtual void SetLocalizationType(LocalizationType value) = 0;
|
||||
};
|
||||
|
||||
struct IMathSolver : public NonCopyable, public NonMoveable
|
||||
|
Loading…
Reference in New Issue
Block a user