From 9206520121c64d9917e84589bf7a6a35e68b1194 Mon Sep 17 00:00:00 2001 From: Lee Won Jun Date: Fri, 21 Aug 2020 07:30:48 +0900 Subject: [PATCH] Change the initialization time of Radio button's isChecked (#1312) * Change the initialization time of Radio button's isChecked * Rollback checkDefaultBitShift and Use Enum instead of String * Fix Check Default - In previous versions, there was an issue where button availability was reset when opening BitShift Flyout not when the mode is changed * Reset Calculator Type in Calculator ViewModel when mode change to not Calculator mode * Revert "Reset Calculator Type in Calculator ViewModel when mode change to not Calculator mode" This reverts commit a0d2f84513bc2d36fea3d75445782e1c67bc2e8d. * Check deferred load button --- .../CalculatorProgrammerRadixOperators.xaml | 6 +- ...alculatorProgrammerRadixOperators.xaml.cpp | 68 +++++++++++++++++-- .../CalculatorProgrammerRadixOperators.xaml.h | 13 +++- src/Calculator/Views/OperatorsPanel.xaml.cpp | 5 +- 4 files changed, 77 insertions(+), 15 deletions(-) diff --git a/src/Calculator/Views/CalculatorProgrammerRadixOperators.xaml b/src/Calculator/Views/CalculatorProgrammerRadixOperators.xaml index a863a7c..871314c 100644 --- a/src/Calculator/Views/CalculatorProgrammerRadixOperators.xaml +++ b/src/Calculator/Views/CalculatorProgrammerRadixOperators.xaml @@ -346,13 +346,13 @@ + Placement="Bottom" + Opened="BitShiftFlyout_Opened"> + Checked="BitshiftFlyout_Checked"/> ArithmeticShiftButton->IsChecked = true; + LoadDeferredLoadButtons(); + + if (IsButtonLoaded()) + { + return; + } + + CollapseBitshiftButtons(); + + m_selectedShiftButtonMode = BitShiftMode::Arithmetic; + LshButton->Visibility = ::Visibility::Visible; + RshButton->Visibility = ::Visibility::Visible; + LshButton->IsEnabled = true; + RshButton->IsEnabled = true; } -void CalculatorProgrammerRadixOperators::BitshiftFlyout_Checked(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e) +bool CalculatorApp::CalculatorProgrammerRadixOperators::IsButtonLoaded() +{ + // Since arithmeticShiftButton defaults to IsChecked = true, this event an fire before we can load the deferred loaded controls. If that is the case, just + // return and do nothing. + return RolButton == nullptr || RorButton == nullptr || RolCarryButton == nullptr || RorCarryButton == nullptr || LshLogicalButton == nullptr + || RshLogicalButton == nullptr; +} + +void CalculatorApp::CalculatorProgrammerRadixOperators::LoadDeferredLoadButtons() { // Load deferred load buttons if (RolButton == nullptr) @@ -62,11 +83,14 @@ void CalculatorProgrammerRadixOperators::BitshiftFlyout_Checked(Platform::Object FindName("LshLogicalButton"); FindName("RshLogicalButton"); } +} - // Since arithmeticShiftButton defaults to IsChecked = true, this event an fire before we can load the deferred loaded controls. If that is the case, just - // return and do nothing. - if (RolButton == nullptr || RorButton == nullptr || RolCarryButton == nullptr || RorCarryButton == nullptr || LshLogicalButton == nullptr - || RshLogicalButton == nullptr) +void CalculatorProgrammerRadixOperators::BitshiftFlyout_Checked(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e) +{ + // Load deferred load buttons + LoadDeferredLoadButtons(); + + if (IsButtonLoaded()) { return; } @@ -75,6 +99,7 @@ void CalculatorProgrammerRadixOperators::BitshiftFlyout_Checked(Platform::Object auto radioButton = static_cast(sender); Platform::String ^ announcementString = L""; + BitShiftMode selectedButtonMode = m_selectedShiftButtonMode; if (radioButton == ArithmeticShiftButton) { @@ -83,6 +108,7 @@ void CalculatorProgrammerRadixOperators::BitshiftFlyout_Checked(Platform::Object LshButton->IsEnabled = true; RshButton->IsEnabled = true; announcementString = m_arithmeticShiftButtonContent; + selectedButtonMode = BitShiftMode::Arithmetic; } else if (radioButton == LogicalShiftButton) { @@ -91,6 +117,7 @@ void CalculatorProgrammerRadixOperators::BitshiftFlyout_Checked(Platform::Object LshLogicalButton->IsEnabled = true; RshLogicalButton->IsEnabled = true; announcementString = m_logicalShiftButtonContent; + selectedButtonMode = BitShiftMode::LogicalShift; } else if (radioButton == RotateCircularButton) { @@ -99,6 +126,7 @@ void CalculatorProgrammerRadixOperators::BitshiftFlyout_Checked(Platform::Object RolButton->IsEnabled = true; RorButton->IsEnabled = true; announcementString = m_rotateCircularButtonContent; + selectedButtonMode = BitShiftMode::RotateCircular; } else if (radioButton == RotateCarryShiftButton) { @@ -107,9 +135,15 @@ void CalculatorProgrammerRadixOperators::BitshiftFlyout_Checked(Platform::Object RolCarryButton->IsEnabled = true; RorCarryButton->IsEnabled = true; announcementString = m_rotateCarryShiftButtonContent; + selectedButtonMode = BitShiftMode::RotateCarry; + } + + if (selectedButtonMode != m_selectedShiftButtonMode) + { + this->BitShiftFlyout->Hide(); + m_selectedShiftButtonMode = selectedButtonMode; } - this->BitShiftFlyout->Hide(); Model->SetBitshiftRadioButtonCheckedAnnouncement(announcementString); } @@ -176,3 +210,23 @@ void CalculatorProgrammerRadixOperators::ClearButton_LostFocus(Object ^ sender, ClearEntryButton->Focus(::FocusState::Programmatic); } } + +void CalculatorApp::CalculatorProgrammerRadixOperators::BitShiftFlyout_Opened(Platform::Object ^ sender, Platform::Object ^ e) +{ + if (m_selectedShiftButtonMode == BitShiftMode::Arithmetic) + { + ArithmeticShiftButton->IsChecked = true; + } + else if (m_selectedShiftButtonMode == BitShiftMode::LogicalShift) + { + LogicalShiftButton->IsChecked = true; + } + else if (m_selectedShiftButtonMode == BitShiftMode::RotateCircular) + { + RotateCircularButton->IsChecked = true; + } + else if (m_selectedShiftButtonMode == BitShiftMode::RotateCarry) + { + RotateCarryShiftButton->IsChecked = true; + } +} diff --git a/src/Calculator/Views/CalculatorProgrammerRadixOperators.xaml.h b/src/Calculator/Views/CalculatorProgrammerRadixOperators.xaml.h index 2412bfc..c46667a 100644 --- a/src/Calculator/Views/CalculatorProgrammerRadixOperators.xaml.h +++ b/src/Calculator/Views/CalculatorProgrammerRadixOperators.xaml.h @@ -29,19 +29,30 @@ namespace CalculatorApp Platform::String ^ ParenthesisCountToString(unsigned int count); DEPENDENCY_PROPERTY_OWNER(CalculatorProgrammerRadixOperators); - void checkDefaultBitShift(); private: + enum class BitShiftMode + { + Arithmetic, + LogicalShift, + RotateCircular, + RotateCarry + }; + void BitshiftFlyout_Checked(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e); void FlyoutButton_Clicked(_In_ Platform::Object ^ sender, _In_ Windows::UI::Xaml::RoutedEventArgs ^ e); void CollapseBitshiftButtons(); void LoadResourceStrings(); + void LoadDeferredLoadButtons(); + bool IsButtonLoaded(); bool m_isErrorVisualState; void OpenParenthesisButton_GotFocus(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e); void ClearEntryButton_LostFocus(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e); void ClearButton_LostFocus(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e); + void BitShiftFlyout_Opened(Platform::Object ^ sender, Platform::Object ^ e); + BitShiftMode m_selectedShiftButtonMode; Platform::String ^ m_arithmeticShiftButtonContent; Platform::String ^ m_logicalShiftButtonContent; Platform::String ^ m_rotateCircularButtonContent; diff --git a/src/Calculator/Views/OperatorsPanel.xaml.cpp b/src/Calculator/Views/OperatorsPanel.xaml.cpp index 810a8e2..83c16e3 100644 --- a/src/Calculator/Views/OperatorsPanel.xaml.cpp +++ b/src/Calculator/Views/OperatorsPanel.xaml.cpp @@ -72,10 +72,7 @@ void OperatorsPanel::EnsureProgrammerRadixOps() this->FindName(L"ProgrammerRadixOperators"); } - if (ProgrammerRadixOperators) - { - ProgrammerRadixOperators->checkDefaultBitShift(); - } + ProgrammerRadixOperators->checkDefaultBitShift(); } void OperatorsPanel::EnsureProgrammerBitFlipPanel()