Reverted removing the left parenthesis automation name and updated narrator announcement to trigger on OpenParenthesisCount property changed.

This commit is contained in:
Stephanie Anderl 2019-03-13 15:39:57 -07:00
commit 5a7e982664
18 changed files with 115 additions and 57 deletions

View file

@ -546,7 +546,7 @@ void CCalcEngine::ProcessCommandWorker(WPARAM wParam)
{ {
if (!m_openParenCount && !nx) if (!m_openParenCount && !nx)
{ {
m_pCalcDisplay->OnNoParenAdded(); m_pCalcDisplay->OnNoRightParenAdded();
} }
HandleErrorCommand(wParam); HandleErrorCommand(wParam);

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)
@ -121,9 +120,9 @@ namespace CalculationManager
/// Callback from the engine /// Callback from the engine
/// Used to set the narrator text when no parenthesis can be added /// Used to set the narrator text when no parenthesis can be added
/// </summary> /// </summary>
void CalculatorManager::OnNoParenAdded() void CalculatorManager::OnNoRightParenAdded()
{ {
m_displayCallback->OnNoParenAdded(); m_displayCallback->OnNoRightParenAdded();
} }
/// <summary> /// <summary>

View file

@ -95,7 +95,7 @@ namespace CalculationManager
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) override; void SetParenDisplayText(const std::wstring& parenthesisCount) override;
void OnNoParenAdded() override; void OnNoRightParenAdded() override;
void DisplayPasteError(); void DisplayPasteError();
void MaxDigitsReached() override; void MaxDigitsReached() override;
void BinaryOperatorReceived() override; void BinaryOperatorReceived() override;

View file

@ -13,7 +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 OnNoParenAdded() = 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

@ -145,7 +145,7 @@ NarratorAnnouncement^ CalculatorAnnouncement::GetDisplayCopiedAnnouncement(Strin
AutomationNotificationProcessing::ImportantMostRecent); AutomationNotificationProcessing::ImportantMostRecent);
} }
NarratorAnnouncement^ CalculatorAnnouncement::GetOpenParenethisCount(String^ announcement) NarratorAnnouncement^ CalculatorAnnouncement::GetOpenParenthesisCountChangedAnnouncement(String^ announcement)
{ {
return ref new NarratorAnnouncement( return ref new NarratorAnnouncement(
announcement, announcement,
@ -154,7 +154,7 @@ NarratorAnnouncement^ CalculatorAnnouncement::GetOpenParenethisCount(String^ ann
AutomationNotificationProcessing::ImportantMostRecent); AutomationNotificationProcessing::ImportantMostRecent);
} }
NarratorAnnouncement^ CalculatorAnnouncement::GetNoParenthesisAddedAnnouncement(String^ announcement) NarratorAnnouncement^ CalculatorAnnouncement::GetNoRightParenthesisAddedAnnouncement(String^ announcement)
{ {
return ref new NarratorAnnouncement( return ref new NarratorAnnouncement(
announcement, announcement,

View file

@ -91,7 +91,7 @@ namespace CalculatorApp::Common::Automation
static NarratorAnnouncement^ GetDisplayCopiedAnnouncement(Platform::String^ announcement); static NarratorAnnouncement^ GetDisplayCopiedAnnouncement(Platform::String^ announcement);
static NarratorAnnouncement^ GetOpenParenethisCount(Platform::String^ announcement); static NarratorAnnouncement^ GetOpenParenthesisCountChangedAnnouncement(Platform::String^ announcement);
static NarratorAnnouncement^ GetNoParenthesisAddedAnnouncement(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,22 +40,20 @@ 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::OnNoParenAdded() void CalculatorDisplay::OnNoRightParenAdded()
{ {
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->SetNoParenAddedNarratorAnnouncement(); calcVM->OnNoRightParenAdded();
} }
} }
} }
@ -65,8 +62,7 @@ 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;
} }
@ -77,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);
} }
@ -89,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);
} }
@ -101,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);
} }
@ -113,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();
} }
@ -125,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();
} }
@ -137,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,7 +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 OnNoParenAdded() 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

@ -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
@ -52,6 +53,7 @@ namespace CalculatorApp::ViewModel
StringReference DecButton(L"Format_DecButtonValue"); StringReference DecButton(L"Format_DecButtonValue");
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 OpenParenthesisCountAutomationFormat(L"Format_OpenParenthesisCountAutomationNamePrefix"); StringReference OpenParenthesisCountAutomationFormat(L"Format_OpenParenthesisCountAutomationNamePrefix");
StringReference NoParenthesisAdded(L"NoParenthesisAdded_Announcement"); StringReference NoParenthesisAdded(L"NoParenthesisAdded_Announcement");
StringReference MaxDigitsReachedFormat(L"Format_MaxDigitsReached"); StringReference MaxDigitsReachedFormat(L"Format_MaxDigitsReached");
@ -95,7 +97,7 @@ StandardCalculatorViewModel::StandardCalculatorViewModel() :
m_localizedMemoryItemClearedAutomationFormat(nullptr), m_localizedMemoryItemClearedAutomationFormat(nullptr),
m_localizedMemoryCleared(nullptr), m_localizedMemoryCleared(nullptr),
m_localizedOpenParenthesisCountChangedAutomationFormat(nullptr), m_localizedOpenParenthesisCountChangedAutomationFormat(nullptr),
m_localizaedNoParenthesisAddedAutomationFormat(nullptr) m_localizedNoRightParenthesisAddedAutomationFormat(nullptr)
{ {
WeakReference calculatorViewModel(this); WeakReference calculatorViewModel(this);
m_calculatorDisplay.SetCallback(calculatorViewModel); m_calculatorDisplay.SetCallback(calculatorViewModel);
@ -106,6 +108,7 @@ StandardCalculatorViewModel::StandardCalculatorViewModel() :
m_localizedDecimalAutomationFormat = AppResourceProvider::GetInstance().GetResourceString(CalculatorResourceKeys::DecButton); m_localizedDecimalAutomationFormat = AppResourceProvider::GetInstance().GetResourceString(CalculatorResourceKeys::DecButton);
m_localizedOctalAutomationFormat = AppResourceProvider::GetInstance().GetResourceString(CalculatorResourceKeys::OctButton); m_localizedOctalAutomationFormat = AppResourceProvider::GetInstance().GetResourceString(CalculatorResourceKeys::OctButton);
m_localizedBinaryAutomationFormat = AppResourceProvider::GetInstance().GetResourceString(CalculatorResourceKeys::BinButton); m_localizedBinaryAutomationFormat = AppResourceProvider::GetInstance().GetResourceString(CalculatorResourceKeys::BinButton);
m_leftParenthesisAutomationFormat = AppResourceProvider::GetInstance().GetResourceString(CalculatorResourceKeys::LeftParenthesisAutomationFormat);
// Initialize the Automation Name // Initialize the Automation Name
CalculationResultAutomationName = GetLocalizedStringFormat(m_localizedCalculationResultAutomationFormat, m_DisplayValue); CalculationResultAutomationName = GetLocalizedStringFormat(m_localizedCalculationResultAutomationFormat, m_DisplayValue);
@ -224,13 +227,14 @@ void StandardCalculatorViewModel::SetParenthesisCount(_In_ const wstring& parent
if (IsProgrammer || IsScientific) if (IsProgrammer || IsScientific)
{ {
OpenParenthesisCount = ref new String(parenthesisCount.c_str()); OpenParenthesisCount = ref new String(parenthesisCount.c_str());
RaisePropertyChanged("LeftParenthesisAutomationName");
} }
} }
void StandardCalculatorViewModel::OpenParenthesisCountNarratorAnnouncment() void StandardCalculatorViewModel::SetOpenParenthesisCountNarratorAnnouncement()
{ {
String^ parenthesisCount = ((m_OpenParenthesisCount == nullptr) ? "0" : m_OpenParenthesisCount); String^ parenthesisCount = ((m_OpenParenthesisCount == nullptr) ? "0" : m_OpenParenthesisCount);
wstring localizedParenthesisCount = std::wstring(parenthesisCount->Data()); wstring localizedParenthesisCount = parenthesisCount->Data();
LocalizationSettings::GetInstance().LocalizeDisplayValue(&localizedParenthesisCount); LocalizationSettings::GetInstance().LocalizeDisplayValue(&localizedParenthesisCount);
String^ announcement = LocalizationStringUtil::GetLocalizedNarratorAnnouncement( String^ announcement = LocalizationStringUtil::GetLocalizedNarratorAnnouncement(
@ -238,16 +242,21 @@ void StandardCalculatorViewModel::OpenParenthesisCountNarratorAnnouncment()
m_localizedOpenParenthesisCountChangedAutomationFormat, m_localizedOpenParenthesisCountChangedAutomationFormat,
localizedParenthesisCount.c_str()); localizedParenthesisCount.c_str());
Announcement = CalculatorAnnouncement::GetOpenParenethisCount(announcement); Announcement = CalculatorAnnouncement::GetOpenParenthesisCountChangedAnnouncement(announcement);
}
void StandardCalculatorViewModel::OnNoRightParenAdded()
{
SetNoParenAddedNarratorAnnouncement();
} }
void StandardCalculatorViewModel::SetNoParenAddedNarratorAnnouncement() void StandardCalculatorViewModel::SetNoParenAddedNarratorAnnouncement()
{ {
String^ announcement = LocalizationStringUtil::GetLocalizedNarratorAnnouncement( String^ announcement = LocalizationStringUtil::GetLocalizedNarratorAnnouncement(
CalculatorResourceKeys::NoParenthesisAdded, CalculatorResourceKeys::NoParenthesisAdded,
m_localizaedNoParenthesisAddedAutomationFormat); m_localizedNoRightParenthesisAddedAutomationFormat);
Announcement = CalculatorAnnouncement::GetNoParenthesisAddedAnnouncement(announcement); Announcement = CalculatorAnnouncement::GetNoRightParenthesisAddedAnnouncement(announcement);
} }
void StandardCalculatorViewModel::DisableButtons(CommandType selectedExpressionCommandType) void StandardCalculatorViewModel::DisableButtons(CommandType selectedExpressionCommandType)
@ -278,6 +287,15 @@ void StandardCalculatorViewModel::DisableButtons(CommandType selectedExpressionC
} }
} }
String ^ StandardCalculatorViewModel::GetLeftParenthesisAutomationName()
{
String^ parenthesisCount = ((m_OpenParenthesisCount == nullptr) ? "0" : m_OpenParenthesisCount);
wstring localizedParenthesisCount = std::wstring(parenthesisCount->Data());
LocalizationSettings::GetInstance().LocalizeDisplayValue(&localizedParenthesisCount);
return GetLocalizedStringFormat(m_leftParenthesisAutomationFormat, ref new String(localizedParenthesisCount.c_str()));
}
void StandardCalculatorViewModel::SetExpressionDisplay(_Inout_ shared_ptr<CalculatorVector<pair<wstring, int>>> const &tokens, _Inout_ shared_ptr<CalculatorVector <shared_ptr<IExpressionCommand>>> const &commands) void StandardCalculatorViewModel::SetExpressionDisplay(_Inout_ shared_ptr<CalculatorVector<pair<wstring, int>>> const &tokens, _Inout_ shared_ptr<CalculatorVector <shared_ptr<IExpressionCommand>>> const &commands)
{ {
m_tokens = tokens; m_tokens = tokens;
@ -581,7 +599,6 @@ void StandardCalculatorViewModel::OnButtonPressed(Object^ parameter)
m_feedbackForButtonPress = CalculatorButtonPressedEventArgs::GetAuditoryFeedbackFromCommandParameter(parameter); m_feedbackForButtonPress = CalculatorButtonPressedEventArgs::GetAuditoryFeedbackFromCommandParameter(parameter);
NumbersAndOperatorsEnum numOpEnum = CalculatorButtonPressedEventArgs::GetOperationFromCommandParameter(parameter); NumbersAndOperatorsEnum numOpEnum = CalculatorButtonPressedEventArgs::GetOperationFromCommandParameter(parameter);
Command cmdenum = ConvertToOperatorsEnum(numOpEnum); Command cmdenum = ConvertToOperatorsEnum(numOpEnum);
String^ previousParenthesisCount = m_OpenParenthesisCount;
TraceLogger::GetInstance().UpdateFunctionUsage((int)numOpEnum); TraceLogger::GetInstance().UpdateFunctionUsage((int)numOpEnum);
@ -659,11 +676,6 @@ void StandardCalculatorViewModel::OnButtonPressed(Object^ parameter)
m_standardCalculatorManager.SendCommand(cmdenum); m_standardCalculatorManager.SendCommand(cmdenum);
} }
if (numOpEnum == NumbersAndOperatorsEnum::OpenParenthesis || (numOpEnum == NumbersAndOperatorsEnum::CloseParenthesis && previousParenthesisCount) )
{
OpenParenthesisCountNarratorAnnouncment();
}
} }
} }

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]
@ -261,6 +262,14 @@ namespace CalculatorApp
void set(bool value) { m_completeTextSelection = value; } void set(bool value) { m_completeTextSelection = value; }
} }
property Platform::String^ LeftParenthesisAutomationName
{
Platform::String^ get()
{
return GetLeftParenthesisAutomationName();
}
}
internal: internal:
void OnPaste(Platform::String^ pastedString, CalculatorApp::Common::ViewMode mode); void OnPaste(Platform::String^ pastedString, CalculatorApp::Common::ViewMode mode);
void OnCopyCommand(Platform::Object^ parameter); void OnCopyCommand(Platform::Object^ parameter);
@ -276,14 +285,14 @@ namespace CalculatorApp
void OnMemoryClear(_In_ Platform::Object^ memoryItemPosition); void OnMemoryClear(_In_ Platform::Object^ memoryItemPosition);
void OnPinUnpinCommand(Platform::Object^ parameter); void OnPinUnpinCommand(Platform::Object^ parameter);
void OpenParenthesisCountNarratorAnnouncment();
void SetPrimaryDisplay(_In_ std::wstring const&displayString, _In_ bool isError); void SetPrimaryDisplay(_In_ std::wstring const&displayString, _In_ bool isError);
void DisplayPasteError(); void DisplayPasteError();
void SetTokens(_Inout_ std::shared_ptr<CalculatorVector<std::pair<std::wstring, int>>> const &tokens); void SetTokens(_Inout_ std::shared_ptr<CalculatorVector<std::pair<std::wstring, int>>> const &tokens);
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 SetNoParenAddedNarratorAnnouncement();
void OnMaxDigitsReached(); void OnMaxDigitsReached();
void OnBinaryOperatorReceived(); void OnBinaryOperatorReceived();
@ -333,7 +342,7 @@ namespace CalculatorApp
Platform::String^ m_localizedMemoryItemClearedAutomationFormat; Platform::String^ m_localizedMemoryItemClearedAutomationFormat;
Platform::String^ m_localizedMemoryCleared; Platform::String^ m_localizedMemoryCleared;
Platform::String^ m_localizedOpenParenthesisCountChangedAutomationFormat; Platform::String^ m_localizedOpenParenthesisCountChangedAutomationFormat;
Platform::String^ m_localizaedNoParenthesisAddedAutomationFormat; Platform::String^ m_localizedNoRightParenthesisAddedAutomationFormat;
bool m_pinned; bool m_pinned;
bool m_isOperandEnabled; bool m_isOperandEnabled;
@ -352,6 +361,7 @@ namespace CalculatorApp
bool m_isLastOperationHistoryLoad; bool m_isLastOperationHistoryLoad;
Platform::String^ m_selectedExpressionLastData; Platform::String^ m_selectedExpressionLastData;
Common::DisplayExpressionToken^ m_selectedExpressionToken; Common::DisplayExpressionToken^ m_selectedExpressionToken;
Platform::String^ m_leftParenthesisAutomationFormat;
Platform::String^ LocalizeDisplayValue(_In_ std::wstring const &displayValue, _In_ bool isError); Platform::String^ LocalizeDisplayValue(_In_ std::wstring const &displayValue, _In_ bool isError);
Platform::String^ CalculateNarratorDisplayValue(_In_ std::wstring const &displayValue, _In_ Platform::String^ localizedDisplayValue, _In_ bool isError); Platform::String^ CalculateNarratorDisplayValue(_In_ std::wstring const &displayValue, _In_ Platform::String^ localizedDisplayValue, _In_ bool isError);
@ -361,6 +371,7 @@ namespace CalculatorApp
CalculationManager::Command ConvertToOperatorsEnum(NumbersAndOperatorsEnum operation); CalculationManager::Command ConvertToOperatorsEnum(NumbersAndOperatorsEnum operation);
void DisableButtons(CalculationManager::CommandType selectedExpressionCommandType); void DisableButtons(CalculationManager::CommandType selectedExpressionCommandType);
Platform::String^ GetLeftParenthesisAutomationName();
Platform::String^ m_feedbackForButtonPress; Platform::String^ m_feedbackForButtonPress;
void OnButtonPressed(Platform::Object^ parameter); void OnButtonPressed(Platform::Object^ parameter);

View file

@ -1312,6 +1312,10 @@
<data name="openParenthesisButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve"> <data name="openParenthesisButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
<value>Left parenthesis</value> <value>Left parenthesis</value>
<comment>Screen reader prompt for the Calculator "(" button on the scientific operator keypad</comment> <comment>Screen reader prompt for the Calculator "(" button on the scientific operator keypad</comment>
</data>
<data name="Format_OpenParenthesisAutomationNamePrefix" xml:space="preserve">
<value>Left parenthesis, open parenthesis count %1</value>
<comment>{Locked="%1"} Screen reader prompt for the Calculator "(" button on the scientific operator keypad. %1 is the localized count of open parenthesis, e.g. "2".</comment>
</data> </data>
<data name="closeParenthesisButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve"> <data name="closeParenthesisButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
<value>Right parenthesis</value> <value>Right parenthesis</value>
@ -1319,11 +1323,11 @@
</data> </data>
<data name="Format_OpenParenthesisCountAutomationNamePrefix" xml:space="preserve"> <data name="Format_OpenParenthesisCountAutomationNamePrefix" xml:space="preserve">
<value>Open parenthesis count %1</value> <value>Open parenthesis count %1</value>
<comment>{Locked="%1"} Screen reader prompt for the Calculator "(" button on the scientific operator keypad. %1 is the localized count of open parenthesis, e.g. "2".</comment> <comment>{Locked="%1"} Screen reader prompt for the Calculator "(" button on the scientific and programmer operator keypad. %1 is the localized count of open parenthesis, e.g. "2".</comment>
</data> </data>
<data name="NoParenthesisAdded_Announcement" xml:space="preserve"> <data name="NoParenthesisAdded_Announcement" xml:space="preserve">
<value>There are no open parentheses to close.</value> <value>There are no open parentheses to close.</value>
<comment>{Locked="%1"} Screen reader prompt for the Calculator when the ")" button on the scientific or programmer operator keypad cannot be added to the equation. e.g. "1+)".</comment> <comment>{Locked="%1"} Screen reader prompt for the Calculator when the ")" button on the scientific and programmer operator keypad cannot be added to the equation. e.g. "1+)".</comment>
</data> </data>
<data name="ftoeButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve"> <data name="ftoeButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
<value>Scientific notation</value> <value>Scientific notation</value>

View file

@ -10,6 +10,7 @@
d:DesignHeight="395" d:DesignHeight="395"
d:DesignWidth="315" d:DesignWidth="315"
Loaded="OnLoaded" Loaded="OnLoaded"
Unloaded="OnUnloaded"
mc:Ignorable="d"> mc:Ignorable="d">
<Grid x:Name="ProgRadixOps"> <Grid x:Name="ProgRadixOps">
@ -408,6 +409,7 @@
Style="{StaticResource ParenthesisCalcButtonStyle}" Style="{StaticResource ParenthesisCalcButtonStyle}"
FontSize="18" FontSize="18"
AutomationProperties.AutomationId="openParenthesisButton" AutomationProperties.AutomationId="openParenthesisButton"
AutomationProperties.Name="{Binding LeftParenthesisAutomationName}"
ButtonId="OpenParenthesis" ButtonId="OpenParenthesis"
Content="(" Content="("
Tag="{x:Bind Model.OpenParenthesisCount, Mode=OneWay}"/> Tag="{x:Bind Model.OpenParenthesisCount, Mode=OneWay}"/>

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.
// //
@ -34,8 +34,12 @@ CalculatorProgrammerRadixOperators::CalculatorProgrammerRadixOperators() :
void CalculatorProgrammerRadixOperators::OnLoaded(Object^, RoutedEventArgs^) void CalculatorProgrammerRadixOperators::OnLoaded(Object^, RoutedEventArgs^)
{ {
auto viewmodel = safe_cast<StandardCalculatorViewModel^>(this->DataContext); Model->ProgModeRadixChange += ref new ProgModeRadixChangeHandler(this, &CalculatorProgrammerRadixOperators::ProgModeRadixChange);
viewmodel->ProgModeRadixChange += ref new ProgModeRadixChangeHandler(this, &CalculatorProgrammerRadixOperators::ProgModeRadixChange); m_propertyChangedToken = Model->PropertyChanged += ref new PropertyChangedEventHandler(this, &CalculatorProgrammerRadixOperators::OnPropertyChanged);
}
void CalculatorProgrammerRadixOperators::OnUnloaded(Object^, RoutedEventArgs^)
{
Model->PropertyChanged -= m_propertyChangedToken;
} }
void CalculatorProgrammerRadixOperators::Shift_Clicked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e) void CalculatorProgrammerRadixOperators::Shift_Clicked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
@ -94,3 +98,11 @@ void CalculatorProgrammerRadixOperators::IsErrorVisualState::set(bool value)
NumberPad->IsErrorVisualState = m_isErrorVisualState; NumberPad->IsErrorVisualState = m_isErrorVisualState;
} }
} }
void CalculatorProgrammerRadixOperators::OnPropertyChanged(Object^ sender, PropertyChangedEventArgs^ e)
{
if (e->PropertyName == CalculatorViewModelProperties::OpenParenthesisCount && closeParenthesisButton->FocusState != Windows::UI::Xaml::FocusState::Unfocused)
{
Model->SetOpenParenthesisCountNarratorAnnouncement();
}
}

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
@ -33,8 +33,11 @@ namespace CalculatorApp
void Shift_Clicked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e); void Shift_Clicked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
void SetVisibilityBinding(Windows::UI::Xaml::FrameworkElement^ element, Platform::String^ path, Windows::UI::Xaml::Data::IValueConverter^ converter); void SetVisibilityBinding(Windows::UI::Xaml::FrameworkElement^ element, Platform::String^ path, Windows::UI::Xaml::Data::IValueConverter^ converter);
void OnLoaded(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e); void OnLoaded(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
void OnUnloaded(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
void ProgModeRadixChange(); void ProgModeRadixChange();
void OnPropertyChanged(Platform::Object^ sender, Windows::UI::Xaml::Data::PropertyChangedEventArgs ^ e);
bool m_isErrorVisualState; bool m_isErrorVisualState;
Windows::Foundation::EventRegistrationToken m_propertyChangedToken;
}; };
} }

View file

@ -11,6 +11,8 @@
x:Name="ControlRoot" x:Name="ControlRoot"
d:DesignHeight="400" d:DesignHeight="400"
d:DesignWidth="315" d:DesignWidth="315"
Loaded="OnLoaded"
Unloaded="OnUnloaded"
mc:Ignorable="d"> mc:Ignorable="d">
<UserControl.Resources> <UserControl.Resources>
<converters:BooleanNegationConverter x:Key="BooleanNegationConverter"/> <converters:BooleanNegationConverter x:Key="BooleanNegationConverter"/>
@ -727,6 +729,7 @@
Style="{StaticResource ParenthesisCalcButtonStyle}" Style="{StaticResource ParenthesisCalcButtonStyle}"
FontSize="19" FontSize="19"
AutomationProperties.AutomationId="openParenthesisButton" AutomationProperties.AutomationId="openParenthesisButton"
AutomationProperties.Name="{Binding LeftParenthesisAutomationName}"
ButtonId="OpenParenthesis" ButtonId="OpenParenthesis"
Content="(" Content="("
Tag="{x:Bind Model.OpenParenthesisCount, Mode=OneWay}"/> Tag="{x:Bind Model.OpenParenthesisCount, Mode=OneWay}"/>

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.
// //
@ -38,6 +38,15 @@ CalculatorScientificOperators::CalculatorScientificOperators()
Common::KeyboardShortcutManager::ShiftButtonChecked(false); Common::KeyboardShortcutManager::ShiftButtonChecked(false);
} }
void CalculatorScientificOperators::OnLoaded(Object^, RoutedEventArgs^)
{
m_propertyChangedToken = Model->PropertyChanged += ref new PropertyChangedEventHandler(this, &CalculatorScientificOperators::OnPropertyChanged);
}
void CalculatorScientificOperators::OnUnloaded(Object^, RoutedEventArgs^)
{
Model->PropertyChanged -= m_propertyChangedToken;
}
void CalculatorScientificOperators::ShortLayout_Completed(_In_ Platform::Object^ /*sender*/, _In_ Platform::Object^ /*e*/) void CalculatorScientificOperators::ShortLayout_Completed(_In_ Platform::Object^ /*sender*/, _In_ Platform::Object^ /*e*/)
{ {
IsWideLayout = false; IsWideLayout = false;
@ -97,3 +106,11 @@ void CalculatorScientificOperators::SetOperatorRowVisibility()
InvRow1->Visibility = invRowVis; InvRow1->Visibility = invRowVis;
InvRow2->Visibility = invRowVis; InvRow2->Visibility = invRowVis;
} }
void CalculatorScientificOperators::OnPropertyChanged(Object^ sender, PropertyChangedEventArgs^ e)
{
if (e->PropertyName == CalculatorViewModelProperties::OpenParenthesisCount && closeParenthesisButton->FocusState != Windows::UI::Xaml::FocusState::Unfocused)
{
Model->SetOpenParenthesisCountNarratorAnnouncement();
}
}

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.
// //
@ -41,5 +41,10 @@ namespace CalculatorApp
void shiftButton_Check(_In_ Platform::Object^ sender, _In_ Windows::UI::Xaml::RoutedEventArgs^ e); void shiftButton_Check(_In_ Platform::Object^ sender, _In_ Windows::UI::Xaml::RoutedEventArgs^ e);
void shiftButton_IsEnabledChanged(_In_ Platform::Object^ sender, _In_ Windows::UI::Xaml::DependencyPropertyChangedEventArgs^ e); void shiftButton_IsEnabledChanged(_In_ Platform::Object^ sender, _In_ Windows::UI::Xaml::DependencyPropertyChangedEventArgs^ e);
void SetOperatorRowVisibility(); void SetOperatorRowVisibility();
void OnPropertyChanged(Platform::Object^ sender, Windows::UI::Xaml::Data::PropertyChangedEventArgs ^ e);
void OnLoaded(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
void OnUnloaded(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
Windows::Foundation::EventRegistrationToken m_propertyChangedToken;
}; };
} }

View file

@ -62,7 +62,7 @@ namespace CalculatorManagerTest
m_parenDisplay = parenthesisCount; m_parenDisplay = parenthesisCount;
} }
void OnNoParenAdded() override void OnNoRightParenAdded() override
{ {
// This method is used to create a narrator announcement when a close parenthesis cannot be added because there are no open parentheses // This method is used to create a narrator announcement when a close parenthesis cannot be added because there are no open parentheses
} }