From a2794b370517d28d8e09a47a04ae4388dfc1190f Mon Sep 17 00:00:00 2001 From: Pepe Rivera Date: Wed, 11 Mar 2020 18:38:12 -0700 Subject: [PATCH] Support regular textbox context menu functions in the EquationTextBox (#1065) * Add context menu items back * Disable if no selection --- src/Calculator/Controls/EquationTextBox.cpp | 96 ++++++++++++++++++- src/Calculator/Controls/EquationTextBox.h | 11 +++ src/Calculator/Resources/en-US/Resources.resw | 20 ++++ .../GraphingCalculator/EquationInputArea.xaml | 14 +++ 4 files changed, 139 insertions(+), 2 deletions(-) diff --git a/src/Calculator/Controls/EquationTextBox.cpp b/src/Calculator/Controls/EquationTextBox.cpp index 4509ecf..48f84ec 100644 --- a/src/Calculator/Controls/EquationTextBox.cpp +++ b/src/Calculator/Controls/EquationTextBox.cpp @@ -44,6 +44,11 @@ void EquationTextBox::OnApplyTemplate() m_kgfEquationMenuItem = dynamic_cast(GetTemplateChild("FunctionAnalysisMenuItem")); m_removeMenuItem = dynamic_cast(GetTemplateChild("RemoveFunctionMenuItem")); m_colorChooserMenuItem = dynamic_cast(GetTemplateChild("ChangeFunctionStyleMenuItem")); + m_cutMenuItem = dynamic_cast(GetTemplateChild("CutMenuItem")); + m_copyMenuItem = dynamic_cast(GetTemplateChild("CopyMenuItem")); + m_pasteMenuItem = dynamic_cast(GetTemplateChild("PasteMenuItem")); + m_undoMenuItem = dynamic_cast(GetTemplateChild("UndoMenuItem")); + m_selectAllMenuItem = dynamic_cast(GetTemplateChild("SelectAllMenuItem")); auto resProvider = AppResourceProvider::GetInstance(); @@ -65,7 +70,8 @@ void EquationTextBox::OnApplyTemplate() auto equationButtonMessage = LocalizationStringUtil::GetLocalizedString( m_equationButton->IsChecked->Value ? resProvider->GetResourceString(L"showEquationButtonToolTip") - : resProvider->GetResourceString(L"hideEquationButtonToolTip"), EquationButtonContentIndex); + : resProvider->GetResourceString(L"hideEquationButtonToolTip"), + EquationButtonContentIndex); toolTip->Content = equationButtonMessage; ToolTipService::SetToolTip(m_equationButton, toolTip); @@ -122,6 +128,31 @@ void EquationTextBox::OnApplyTemplate() ColorChooserFlyout->Closed += ref new EventHandler(this, &EquationTextBox::OnColorFlyoutClosed); } + if (m_cutMenuItem != nullptr) + { + m_cutMenuItem->Click += ref new RoutedEventHandler(this, &EquationTextBox::OnCutClicked); + } + + if (m_copyMenuItem != nullptr) + { + m_copyMenuItem->Click += ref new RoutedEventHandler(this, &EquationTextBox::OnCopyClicked); + } + + if (m_pasteMenuItem != nullptr) + { + m_pasteMenuItem->Click += ref new RoutedEventHandler(this, &EquationTextBox::OnPasteClicked); + } + + if (m_undoMenuItem != nullptr) + { + m_undoMenuItem->Click += ref new RoutedEventHandler(this, &EquationTextBox::OnUndoClicked); + } + + if (m_selectAllMenuItem != nullptr) + { + m_selectAllMenuItem->Click += ref new RoutedEventHandler(this, &EquationTextBox::OnSelectAllClicked); + } + UpdateCommonVisualState(); UpdateButtonsVisualState(); } @@ -208,7 +239,8 @@ void EquationTextBox::OnEquationButtonClicked(Object ^ sender, RoutedEventArgs ^ auto equationButtonMessage = LocalizationStringUtil::GetLocalizedString( m_equationButton->IsChecked->Value ? resProvider->GetResourceString(L"showEquationButtonToolTip") - : resProvider->GetResourceString(L"hideEquationButtonToolTip"), EquationButtonContentIndex); + : resProvider->GetResourceString(L"hideEquationButtonToolTip"), + EquationButtonContentIndex); toolTip->Content = equationButtonMessage; ToolTipService::SetToolTip(m_equationButton, toolTip); @@ -256,6 +288,46 @@ void EquationTextBox::OnFunctionButtonClicked(Object ^ sender, RoutedEventArgs ^ KeyGraphFeaturesButtonClicked(this, ref new RoutedEventArgs()); } +void EquationTextBox::OnCutClicked(Object ^ sender, RoutedEventArgs ^ e) +{ + if (m_richEditBox != nullptr) + { + m_richEditBox->TextDocument->Selection->Cut(); + } +} + +void EquationTextBox::OnCopyClicked(Object ^ sender, RoutedEventArgs ^ e) +{ + if (m_richEditBox != nullptr) + { + m_richEditBox->TextDocument->Selection->Copy(); + } +} + +void EquationTextBox::OnPasteClicked(Object ^ sender, RoutedEventArgs ^ e) +{ + if (m_richEditBox != nullptr) + { + m_richEditBox->TextDocument->Selection->Paste(0); + } +} + +void EquationTextBox::OnSelectAllClicked(Object ^ sender, RoutedEventArgs ^ e) +{ + if (m_richEditBox != nullptr) + { + m_richEditBox->TextDocument->Selection->SetRange(0, m_richEditBox->TextDocument->Selection->EndPosition); + } +} + +void EquationTextBox::OnUndoClicked(Object ^ sender, RoutedEventArgs ^ e) +{ + if (m_richEditBox != nullptr) + { + m_richEditBox->TextDocument->Undo(); + } +} + void EquationTextBox::UpdateButtonsVisualState() { String ^ state; @@ -355,6 +427,26 @@ void EquationTextBox::OnRichEditMenuOpened(Object ^ /*sender*/, Object ^ /*args* { m_colorChooserMenuItem->IsEnabled = !HasError && !IsAddEquationMode; } + + if (m_richEditBox != nullptr && m_cutMenuItem != nullptr) + { + m_cutMenuItem->IsEnabled = m_richEditBox->TextDocument->CanCopy() && m_richEditBox->TextDocument->Selection->Length > 0; + } + + if (m_richEditBox != nullptr && m_copyMenuItem != nullptr) + { + m_copyMenuItem->IsEnabled = m_richEditBox->TextDocument->CanCopy() && m_richEditBox->TextDocument->Selection->Length > 0; + } + + if (m_richEditBox != nullptr && m_pasteMenuItem != nullptr) + { + m_pasteMenuItem->IsEnabled = m_richEditBox->TextDocument->CanPaste(); + } + + if (m_richEditBox != nullptr && m_undoMenuItem != nullptr) + { + m_undoMenuItem->IsEnabled = m_richEditBox->TextDocument->CanUndo(); + } } void EquationTextBox::OnIsAddEquationModePropertyChanged(bool /*oldValue*/, bool /*newValue*/) diff --git a/src/Calculator/Controls/EquationTextBox.h b/src/Calculator/Controls/EquationTextBox.h index 8362116..1a5e881 100644 --- a/src/Calculator/Controls/EquationTextBox.h +++ b/src/Calculator/Controls/EquationTextBox.h @@ -60,6 +60,12 @@ namespace CalculatorApp void OnFunctionButtonClicked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e); void OnRichEditMenuOpened(Platform::Object ^ sender, Platform::Object ^ args); + void OnCutClicked(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e); + void OnCopyClicked(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e); + void OnPasteClicked(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e); + void OnUndoClicked(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e); + void OnSelectAllClicked(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e); + void OnColorFlyoutOpened(Platform::Object ^ sender, Platform::Object ^ e); void OnColorFlyoutClosed(Platform::Object ^ sender, Platform::Object ^ e); @@ -73,6 +79,11 @@ namespace CalculatorApp Windows::UI::Xaml::Controls::Primitives::ToggleButton ^ m_colorChooserButton; Windows::UI::Xaml::Controls::MenuFlyout^ m_richEditContextMenu; + Windows::UI::Xaml::Controls::MenuFlyoutItem ^ m_cutMenuItem; + Windows::UI::Xaml::Controls::MenuFlyoutItem ^ m_copyMenuItem; + Windows::UI::Xaml::Controls::MenuFlyoutItem ^ m_pasteMenuItem; + Windows::UI::Xaml::Controls::MenuFlyoutItem ^ m_undoMenuItem; + Windows::UI::Xaml::Controls::MenuFlyoutItem ^ m_selectAllMenuItem; Windows::UI::Xaml::Controls::MenuFlyoutItem^ m_kgfEquationMenuItem; Windows::UI::Xaml::Controls::MenuFlyoutItem^ m_removeMenuItem; Windows::UI::Xaml::Controls::MenuFlyoutItem^ m_colorChooserMenuItem; diff --git a/src/Calculator/Resources/en-US/Resources.resw b/src/Calculator/Resources/en-US/Resources.resw index 6e232db..3bbd502 100644 --- a/src/Calculator/Resources/en-US/Resources.resw +++ b/src/Calculator/Resources/en-US/Resources.resw @@ -4266,4 +4266,24 @@ Copy Copy menu item for the graph context menu + + Cut + Cut menu item from the Equation TextBox + + + Copy + Copy menu item from the Equation TextBox + + + Paste + Paste menu item from the Equation TextBox + + + Undo + Undo menu item from the Equation TextBox + + + Select All + Select all menu item from the Equation TextBox + diff --git a/src/Calculator/Views/GraphingCalculator/EquationInputArea.xaml b/src/Calculator/Views/GraphingCalculator/EquationInputArea.xaml index 5ec0fc6..6820754 100644 --- a/src/Calculator/Views/GraphingCalculator/EquationInputArea.xaml +++ b/src/Calculator/Views/GraphingCalculator/EquationInputArea.xaml @@ -582,6 +582,20 @@ TextWrapping="NoWrap"> + + + + + +