diff --git a/src/CalcManager/CEngine/scicomm.cpp b/src/CalcManager/CEngine/scicomm.cpp index fdcf749c..f39405e4 100644 --- a/src/CalcManager/CEngine/scicomm.cpp +++ b/src/CalcManager/CEngine/scicomm.cpp @@ -546,7 +546,7 @@ void CCalcEngine::ProcessCommandWorker(WPARAM wParam) { if (!m_openParenCount && !nx) { - m_pCalcDisplay->OnNoParenAdded(); + m_pCalcDisplay->OnNoRightParenAdded(); } HandleErrorCommand(wParam); diff --git a/src/CalcManager/CalculatorManager.cpp b/src/CalcManager/CalculatorManager.cpp index d52256e8..25cef8b2 100644 --- a/src/CalcManager/CalculatorManager.cpp +++ b/src/CalcManager/CalculatorManager.cpp @@ -109,7 +109,6 @@ namespace CalculationManager /// /// Callback from the engine - /// Used to set the current unmatched open parenthesis count /// /// string containing the parenthesis count void CalculatorManager::SetParenDisplayText(const wstring& parenthesisCount) @@ -121,9 +120,9 @@ namespace CalculationManager /// Callback from the engine /// Used to set the narrator text when no parenthesis can be added /// - void CalculatorManager::OnNoParenAdded() + void CalculatorManager::OnNoRightParenAdded() { - m_displayCallback->OnNoParenAdded(); + m_displayCallback->OnNoRightParenAdded(); } /// diff --git a/src/CalcManager/CalculatorManager.h b/src/CalcManager/CalculatorManager.h index cb90fbdf..d3e354fc 100644 --- a/src/CalcManager/CalculatorManager.h +++ b/src/CalcManager/CalculatorManager.h @@ -95,7 +95,7 @@ namespace CalculationManager void SetMemorizedNumbers(_In_ const std::vector& memorizedNumbers) override; void OnHistoryItemAdded(_In_ unsigned int addedItemIndex) override; void SetParenDisplayText(const std::wstring& parenthesisCount) override; - void OnNoParenAdded() override; + void OnNoRightParenAdded() override; void DisplayPasteError(); void MaxDigitsReached() override; void BinaryOperatorReceived() override; diff --git a/src/CalcManager/Header Files/ICalcDisplay.h b/src/CalcManager/Header Files/ICalcDisplay.h index 8f57d4fb..2ba57e65 100644 --- a/src/CalcManager/Header Files/ICalcDisplay.h +++ b/src/CalcManager/Header Files/ICalcDisplay.h @@ -13,7 +13,7 @@ public: virtual void SetIsInError(bool isInError) = 0; virtual void SetExpressionDisplay(_Inout_ std::shared_ptr>> const &tokens, _Inout_ std::shared_ptr>> const &commands) = 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 BinaryOperatorReceived() = 0; virtual void OnHistoryItemAdded(_In_ unsigned int addedItemIndex) = 0; diff --git a/src/CalcViewModel/Common/Automation/NarratorAnnouncement.cpp b/src/CalcViewModel/Common/Automation/NarratorAnnouncement.cpp index 7371bfa3..823572f3 100644 --- a/src/CalcViewModel/Common/Automation/NarratorAnnouncement.cpp +++ b/src/CalcViewModel/Common/Automation/NarratorAnnouncement.cpp @@ -145,7 +145,7 @@ NarratorAnnouncement^ CalculatorAnnouncement::GetDisplayCopiedAnnouncement(Strin AutomationNotificationProcessing::ImportantMostRecent); } -NarratorAnnouncement^ CalculatorAnnouncement::GetOpenParenethisCount(String^ announcement) +NarratorAnnouncement^ CalculatorAnnouncement::GetOpenParenthesisCountChangedAnnouncement(String^ announcement) { return ref new NarratorAnnouncement( announcement, @@ -154,7 +154,7 @@ NarratorAnnouncement^ CalculatorAnnouncement::GetOpenParenethisCount(String^ ann AutomationNotificationProcessing::ImportantMostRecent); } -NarratorAnnouncement^ CalculatorAnnouncement::GetNoParenthesisAddedAnnouncement(String^ announcement) +NarratorAnnouncement^ CalculatorAnnouncement::GetNoRightParenthesisAddedAnnouncement(String^ announcement) { return ref new NarratorAnnouncement( announcement, diff --git a/src/CalcViewModel/Common/Automation/NarratorAnnouncement.h b/src/CalcViewModel/Common/Automation/NarratorAnnouncement.h index 3bf3e433..70067d72 100644 --- a/src/CalcViewModel/Common/Automation/NarratorAnnouncement.h +++ b/src/CalcViewModel/Common/Automation/NarratorAnnouncement.h @@ -91,7 +91,7 @@ namespace CalculatorApp::Common::Automation static NarratorAnnouncement^ GetDisplayCopiedAnnouncement(Platform::String^ announcement); - static NarratorAnnouncement^ GetOpenParenethisCount(Platform::String^ announcement); - static NarratorAnnouncement^ GetNoParenthesisAddedAnnouncement(Platform::String ^ announcement); + static NarratorAnnouncement^ GetOpenParenthesisCountChangedAnnouncement(Platform::String^ announcement); + static NarratorAnnouncement^ GetNoRightParenthesisAddedAnnouncement(Platform::String ^ announcement); }; } diff --git a/src/CalcViewModel/Common/CalculatorDisplay.cpp b/src/CalcViewModel/Common/CalculatorDisplay.cpp index 0e6b45a3..36fe4fed 100644 --- a/src/CalcViewModel/Common/CalculatorDisplay.cpp +++ b/src/CalcViewModel/Common/CalculatorDisplay.cpp @@ -29,8 +29,7 @@ void CalculatorDisplay::SetPrimaryDisplay(_In_ const wstring& displayStringValue { if (m_callbackReference) { - auto calcVM = m_callbackReference.Resolve(); - if (calcVM) + if (auto calcVM = m_callbackReference.Resolve()) { calcVM->SetPrimaryDisplay(displayStringValue, isError); } @@ -41,22 +40,20 @@ void CalculatorDisplay::SetParenDisplayText(_In_ const std::wstring& parenthesis { if (m_callbackReference != nullptr) { - auto calcVM = m_callbackReference.Resolve(); - if (calcVM) + if (auto calcVM = m_callbackReference.Resolve()) { calcVM->SetParenthesisCount(parenthesisCount); } } } -void CalculatorDisplay::OnNoParenAdded() +void CalculatorDisplay::OnNoRightParenAdded() { if (m_callbackReference != nullptr) { - auto calcVM = m_callbackReference.Resolve(); - if (calcVM) + if (auto calcVM = m_callbackReference.Resolve()) { - calcVM->SetNoParenAddedNarratorAnnouncement(); + calcVM->OnNoRightParenAdded(); } } } @@ -65,8 +62,7 @@ void CalculatorDisplay::SetIsInError(bool isError) { if (m_callbackReference != nullptr) { - auto calcVM = m_callbackReference.Resolve(); - if (calcVM) + if (auto calcVM = m_callbackReference.Resolve()) { calcVM->IsInError = isError; } @@ -77,8 +73,7 @@ void CalculatorDisplay::SetExpressionDisplay(_Inout_ std::shared_ptr(); - if (calcVM) + if(auto calcVM = m_callbackReference.Resolve()) { calcVM->SetExpressionDisplay(tokens, commands); } @@ -89,8 +84,7 @@ void CalculatorDisplay::SetMemorizedNumbers(_In_ const vector& new { if (m_callbackReference != nullptr) { - auto calcVM = m_callbackReference.Resolve(); - if (calcVM) + if (auto calcVM = m_callbackReference.Resolve()) { calcVM->SetMemorizedNumbers(newMemorizedNumbers); } @@ -101,8 +95,7 @@ void CalculatorDisplay::OnHistoryItemAdded(_In_ unsigned int addedItemIndex) { if (m_historyCallbackReference != nullptr) { - auto historyVM = m_historyCallbackReference.Resolve(); - if (historyVM) + if (auto historyVM = m_historyCallbackReference.Resolve()) { historyVM->OnHistoryItemAdded(addedItemIndex); } @@ -113,8 +106,7 @@ void CalculatorDisplay::MaxDigitsReached() { if (m_callbackReference != nullptr) { - auto calcVM = m_callbackReference.Resolve(); - if (calcVM) + if (auto calcVM = m_callbackReference.Resolve()) { calcVM->OnMaxDigitsReached(); } @@ -125,8 +117,7 @@ void CalculatorDisplay::BinaryOperatorReceived() { if (m_callbackReference != nullptr) { - auto calcVM = m_callbackReference.Resolve(); - if (calcVM) + if (auto calcVM = m_callbackReference.Resolve()) { calcVM->OnBinaryOperatorReceived(); } @@ -137,8 +128,7 @@ void CalculatorDisplay::MemoryItemChanged(unsigned int indexOfMemory) { if (m_callbackReference != nullptr) { - auto calcVM = m_callbackReference.Resolve(); - if (calcVM) + if (auto calcVM = m_callbackReference.Resolve()) { calcVM->OnMemoryItemChanged(indexOfMemory); } diff --git a/src/CalcViewModel/Common/CalculatorDisplay.h b/src/CalcViewModel/Common/CalculatorDisplay.h index 20e82f08..9ff06a6e 100644 --- a/src/CalcViewModel/Common/CalculatorDisplay.h +++ b/src/CalcViewModel/Common/CalculatorDisplay.h @@ -22,7 +22,7 @@ namespace CalculatorApp void SetMemorizedNumbers(_In_ const std::vector& memorizedNumbers) override; void OnHistoryItemAdded(_In_ unsigned int addedItemIndex) override; void SetParenDisplayText(_In_ const std::wstring& parenthesisCount) override; - void OnNoParenAdded() override; + void OnNoRightParenAdded() override; void MaxDigitsReached() override; void BinaryOperatorReceived() override; void MemoryItemChanged(unsigned int indexOfMemory) override; diff --git a/src/CalcViewModel/StandardCalculatorViewModel.cpp b/src/CalcViewModel/StandardCalculatorViewModel.cpp index 7e85beb1..08b3f9d1 100644 --- a/src/CalcViewModel/StandardCalculatorViewModel.cpp +++ b/src/CalcViewModel/StandardCalculatorViewModel.cpp @@ -41,6 +41,7 @@ namespace CalculatorApp::ViewModel StringReference DisplayValue(L"DisplayValue"); StringReference IsInError(L"IsInError"); StringReference BinaryDisplayValue(L"BinaryDisplayValue"); + StringReference OpenParenthesisCount(L"OpenParenthesisCount"); } namespace CalculatorResourceKeys @@ -52,6 +53,7 @@ namespace CalculatorApp::ViewModel StringReference DecButton(L"Format_DecButtonValue"); StringReference OctButton(L"Format_OctButtonValue"); StringReference BinButton(L"Format_BinButtonValue"); + StringReference LeftParenthesisAutomationFormat(L"Format_OpenParenthesisAutomationNamePrefix"); StringReference OpenParenthesisCountAutomationFormat(L"Format_OpenParenthesisCountAutomationNamePrefix"); StringReference NoParenthesisAdded(L"NoParenthesisAdded_Announcement"); StringReference MaxDigitsReachedFormat(L"Format_MaxDigitsReached"); @@ -95,7 +97,7 @@ StandardCalculatorViewModel::StandardCalculatorViewModel() : m_localizedMemoryItemClearedAutomationFormat(nullptr), m_localizedMemoryCleared(nullptr), m_localizedOpenParenthesisCountChangedAutomationFormat(nullptr), - m_localizaedNoParenthesisAddedAutomationFormat(nullptr) + m_localizedNoRightParenthesisAddedAutomationFormat(nullptr) { WeakReference calculatorViewModel(this); m_calculatorDisplay.SetCallback(calculatorViewModel); @@ -106,6 +108,7 @@ StandardCalculatorViewModel::StandardCalculatorViewModel() : m_localizedDecimalAutomationFormat = AppResourceProvider::GetInstance().GetResourceString(CalculatorResourceKeys::DecButton); m_localizedOctalAutomationFormat = AppResourceProvider::GetInstance().GetResourceString(CalculatorResourceKeys::OctButton); m_localizedBinaryAutomationFormat = AppResourceProvider::GetInstance().GetResourceString(CalculatorResourceKeys::BinButton); + m_leftParenthesisAutomationFormat = AppResourceProvider::GetInstance().GetResourceString(CalculatorResourceKeys::LeftParenthesisAutomationFormat); // Initialize the Automation Name CalculationResultAutomationName = GetLocalizedStringFormat(m_localizedCalculationResultAutomationFormat, m_DisplayValue); @@ -224,13 +227,14 @@ void StandardCalculatorViewModel::SetParenthesisCount(_In_ const wstring& parent if (IsProgrammer || IsScientific) { OpenParenthesisCount = ref new String(parenthesisCount.c_str()); + RaisePropertyChanged("LeftParenthesisAutomationName"); } } -void StandardCalculatorViewModel::OpenParenthesisCountNarratorAnnouncment() +void StandardCalculatorViewModel::SetOpenParenthesisCountNarratorAnnouncement() { String^ parenthesisCount = ((m_OpenParenthesisCount == nullptr) ? "0" : m_OpenParenthesisCount); - wstring localizedParenthesisCount = std::wstring(parenthesisCount->Data()); + wstring localizedParenthesisCount = parenthesisCount->Data(); LocalizationSettings::GetInstance().LocalizeDisplayValue(&localizedParenthesisCount); String^ announcement = LocalizationStringUtil::GetLocalizedNarratorAnnouncement( @@ -238,16 +242,21 @@ void StandardCalculatorViewModel::OpenParenthesisCountNarratorAnnouncment() m_localizedOpenParenthesisCountChangedAutomationFormat, localizedParenthesisCount.c_str()); - Announcement = CalculatorAnnouncement::GetOpenParenethisCount(announcement); + Announcement = CalculatorAnnouncement::GetOpenParenthesisCountChangedAnnouncement(announcement); +} + +void StandardCalculatorViewModel::OnNoRightParenAdded() +{ + SetNoParenAddedNarratorAnnouncement(); } void StandardCalculatorViewModel::SetNoParenAddedNarratorAnnouncement() { String^ announcement = LocalizationStringUtil::GetLocalizedNarratorAnnouncement( CalculatorResourceKeys::NoParenthesisAdded, - m_localizaedNoParenthesisAddedAutomationFormat); + m_localizedNoRightParenthesisAddedAutomationFormat); - Announcement = CalculatorAnnouncement::GetNoParenthesisAddedAnnouncement(announcement); + Announcement = CalculatorAnnouncement::GetNoRightParenthesisAddedAnnouncement(announcement); } 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>> const &tokens, _Inout_ shared_ptr>> const &commands) { m_tokens = tokens; @@ -581,7 +599,6 @@ void StandardCalculatorViewModel::OnButtonPressed(Object^ parameter) m_feedbackForButtonPress = CalculatorButtonPressedEventArgs::GetAuditoryFeedbackFromCommandParameter(parameter); NumbersAndOperatorsEnum numOpEnum = CalculatorButtonPressedEventArgs::GetOperationFromCommandParameter(parameter); Command cmdenum = ConvertToOperatorsEnum(numOpEnum); - String^ previousParenthesisCount = m_OpenParenthesisCount; TraceLogger::GetInstance().UpdateFunctionUsage((int)numOpEnum); @@ -659,11 +676,6 @@ void StandardCalculatorViewModel::OnButtonPressed(Object^ parameter) m_standardCalculatorManager.SendCommand(cmdenum); } - - if (numOpEnum == NumbersAndOperatorsEnum::OpenParenthesis || (numOpEnum == NumbersAndOperatorsEnum::CloseParenthesis && previousParenthesisCount) ) - { - OpenParenthesisCountNarratorAnnouncment(); - } } } diff --git a/src/CalcViewModel/StandardCalculatorViewModel.h b/src/CalcViewModel/StandardCalculatorViewModel.h index 58863469..576cee66 100644 --- a/src/CalcViewModel/StandardCalculatorViewModel.h +++ b/src/CalcViewModel/StandardCalculatorViewModel.h @@ -36,6 +36,7 @@ namespace CalculatorApp extern Platform::StringReference IsMemoryEmpty; extern Platform::StringReference IsInError; extern Platform::StringReference BinaryDisplayValue; + extern Platform::StringReference OpenParenthesisCount; } [Windows::UI::Xaml::Data::Bindable] @@ -261,6 +262,14 @@ namespace CalculatorApp void set(bool value) { m_completeTextSelection = value; } } + property Platform::String^ LeftParenthesisAutomationName + { + Platform::String^ get() + { + return GetLeftParenthesisAutomationName(); + } + } + internal: void OnPaste(Platform::String^ pastedString, CalculatorApp::Common::ViewMode mode); void OnCopyCommand(Platform::Object^ parameter); @@ -276,14 +285,14 @@ namespace CalculatorApp void OnMemoryClear(_In_ Platform::Object^ memoryItemPosition); void OnPinUnpinCommand(Platform::Object^ parameter); - void OpenParenthesisCountNarratorAnnouncment(); - void SetPrimaryDisplay(_In_ std::wstring const&displayString, _In_ bool isError); void DisplayPasteError(); void SetTokens(_Inout_ std::shared_ptr>> const &tokens); void SetExpressionDisplay(_Inout_ std::shared_ptr>> const &tokens, _Inout_ std::shared_ptr>> const &commands); void SetHistoryExpressionDisplay(_Inout_ std::shared_ptr>> const &tokens, _Inout_ std::shared_ptr>> const &commands); void SetParenthesisCount(_In_ const std::wstring& parenthesisCount); + void SetOpenParenthesisCountNarratorAnnouncement(); + void OnNoRightParenAdded(); void SetNoParenAddedNarratorAnnouncement(); void OnMaxDigitsReached(); void OnBinaryOperatorReceived(); @@ -333,7 +342,7 @@ namespace CalculatorApp Platform::String^ m_localizedMemoryItemClearedAutomationFormat; Platform::String^ m_localizedMemoryCleared; Platform::String^ m_localizedOpenParenthesisCountChangedAutomationFormat; - Platform::String^ m_localizaedNoParenthesisAddedAutomationFormat; + Platform::String^ m_localizedNoRightParenthesisAddedAutomationFormat; bool m_pinned; bool m_isOperandEnabled; @@ -352,6 +361,7 @@ namespace CalculatorApp bool m_isLastOperationHistoryLoad; Platform::String^ m_selectedExpressionLastData; Common::DisplayExpressionToken^ m_selectedExpressionToken; + Platform::String^ m_leftParenthesisAutomationFormat; 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); @@ -361,6 +371,7 @@ namespace CalculatorApp CalculationManager::Command ConvertToOperatorsEnum(NumbersAndOperatorsEnum operation); void DisableButtons(CalculationManager::CommandType selectedExpressionCommandType); + Platform::String^ GetLeftParenthesisAutomationName(); Platform::String^ m_feedbackForButtonPress; void OnButtonPressed(Platform::Object^ parameter); diff --git a/src/Calculator/Resources/en-US/Resources.resw b/src/Calculator/Resources/en-US/Resources.resw index 1e77ed55..4ee3d418 100644 --- a/src/Calculator/Resources/en-US/Resources.resw +++ b/src/Calculator/Resources/en-US/Resources.resw @@ -1312,6 +1312,10 @@ Left parenthesis Screen reader prompt for the Calculator "(" button on the scientific operator keypad + + + Left parenthesis, open parenthesis count %1 + {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". Right parenthesis @@ -1319,11 +1323,11 @@ Open parenthesis count %1 - {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". + {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". There are no open parentheses to close. - {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+)". + {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+)". Scientific notation diff --git a/src/Calculator/Views/CalculatorProgrammerRadixOperators.xaml b/src/Calculator/Views/CalculatorProgrammerRadixOperators.xaml index e281f3df..5c84f4f7 100644 --- a/src/Calculator/Views/CalculatorProgrammerRadixOperators.xaml +++ b/src/Calculator/Views/CalculatorProgrammerRadixOperators.xaml @@ -10,6 +10,7 @@ d:DesignHeight="395" d:DesignWidth="315" Loaded="OnLoaded" + Unloaded="OnUnloaded" mc:Ignorable="d"> @@ -408,6 +409,7 @@ Style="{StaticResource ParenthesisCalcButtonStyle}" FontSize="18" AutomationProperties.AutomationId="openParenthesisButton" + AutomationProperties.Name="{Binding LeftParenthesisAutomationName}" ButtonId="OpenParenthesis" Content="(" Tag="{x:Bind Model.OpenParenthesisCount, Mode=OneWay}"/> diff --git a/src/Calculator/Views/CalculatorProgrammerRadixOperators.xaml.cpp b/src/Calculator/Views/CalculatorProgrammerRadixOperators.xaml.cpp index 60a628bf..380a798f 100644 --- a/src/Calculator/Views/CalculatorProgrammerRadixOperators.xaml.cpp +++ b/src/Calculator/Views/CalculatorProgrammerRadixOperators.xaml.cpp @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. // @@ -34,8 +34,12 @@ CalculatorProgrammerRadixOperators::CalculatorProgrammerRadixOperators() : void CalculatorProgrammerRadixOperators::OnLoaded(Object^, RoutedEventArgs^) { - auto viewmodel = safe_cast(this->DataContext); - viewmodel->ProgModeRadixChange += ref new ProgModeRadixChangeHandler(this, &CalculatorProgrammerRadixOperators::ProgModeRadixChange); + Model->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) @@ -94,3 +98,11 @@ void CalculatorProgrammerRadixOperators::IsErrorVisualState::set(bool value) 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(); + } +} diff --git a/src/Calculator/Views/CalculatorProgrammerRadixOperators.xaml.h b/src/Calculator/Views/CalculatorProgrammerRadixOperators.xaml.h index 7aae73f4..7fa64d31 100644 --- a/src/Calculator/Views/CalculatorProgrammerRadixOperators.xaml.h +++ b/src/Calculator/Views/CalculatorProgrammerRadixOperators.xaml.h @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. #pragma once @@ -33,8 +33,11 @@ namespace CalculatorApp 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 OnLoaded(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e); + void OnUnloaded(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e); void ProgModeRadixChange(); + void OnPropertyChanged(Platform::Object^ sender, Windows::UI::Xaml::Data::PropertyChangedEventArgs ^ e); bool m_isErrorVisualState; + Windows::Foundation::EventRegistrationToken m_propertyChangedToken; }; } diff --git a/src/Calculator/Views/CalculatorScientificOperators.xaml b/src/Calculator/Views/CalculatorScientificOperators.xaml index c68b3cfb..3db97aa9 100644 --- a/src/Calculator/Views/CalculatorScientificOperators.xaml +++ b/src/Calculator/Views/CalculatorScientificOperators.xaml @@ -11,6 +11,8 @@ x:Name="ControlRoot" d:DesignHeight="400" d:DesignWidth="315" + Loaded="OnLoaded" + Unloaded="OnUnloaded" mc:Ignorable="d"> @@ -727,6 +729,7 @@ Style="{StaticResource ParenthesisCalcButtonStyle}" FontSize="19" AutomationProperties.AutomationId="openParenthesisButton" + AutomationProperties.Name="{Binding LeftParenthesisAutomationName}" ButtonId="OpenParenthesis" Content="(" Tag="{x:Bind Model.OpenParenthesisCount, Mode=OneWay}"/> diff --git a/src/Calculator/Views/CalculatorScientificOperators.xaml.cpp b/src/Calculator/Views/CalculatorScientificOperators.xaml.cpp index 47998496..470e8512 100644 --- a/src/Calculator/Views/CalculatorScientificOperators.xaml.cpp +++ b/src/Calculator/Views/CalculatorScientificOperators.xaml.cpp @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. // @@ -38,6 +38,15 @@ CalculatorScientificOperators::CalculatorScientificOperators() 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*/) { IsWideLayout = false; @@ -97,3 +106,11 @@ void CalculatorScientificOperators::SetOperatorRowVisibility() InvRow1->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(); + } +} diff --git a/src/Calculator/Views/CalculatorScientificOperators.xaml.h b/src/Calculator/Views/CalculatorScientificOperators.xaml.h index ae35e492..a93e204e 100644 --- a/src/Calculator/Views/CalculatorScientificOperators.xaml.h +++ b/src/Calculator/Views/CalculatorScientificOperators.xaml.h @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. // 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_IsEnabledChanged(_In_ Platform::Object^ sender, _In_ Windows::UI::Xaml::DependencyPropertyChangedEventArgs^ e); 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; }; } diff --git a/src/CalculatorUnitTests/CalculatorManagerTest.cpp b/src/CalculatorUnitTests/CalculatorManagerTest.cpp index f1df0f28..1d42a285 100644 --- a/src/CalculatorUnitTests/CalculatorManagerTest.cpp +++ b/src/CalculatorUnitTests/CalculatorManagerTest.cpp @@ -62,7 +62,7 @@ namespace CalculatorManagerTest 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 }