Select the equation when the EquationTextBox has focus and during analysis (#1067)
* Select equation on focus * PR comment
This commit is contained in:
parent
a2794b3705
commit
102782df47
@ -98,21 +98,28 @@ void EquationInputArea::AddNewEquation()
|
||||
void EquationInputArea::EquationTextBox_GotFocus(Object ^ sender, RoutedEventArgs ^ e)
|
||||
{
|
||||
KeyboardShortcutManager::HonorShortcuts(false);
|
||||
|
||||
auto eq = GetViewModelFromEquationTextBox(sender);
|
||||
if (eq != nullptr)
|
||||
{
|
||||
eq->GraphEquation->IsSelected = true;
|
||||
}
|
||||
}
|
||||
|
||||
void EquationInputArea::EquationTextBox_LostFocus(Object ^ sender, RoutedEventArgs ^ e)
|
||||
{
|
||||
KeyboardShortcutManager::HonorShortcuts(true);
|
||||
|
||||
auto eq = GetViewModelFromEquationTextBox(sender);
|
||||
if (eq != nullptr)
|
||||
{
|
||||
eq->GraphEquation->IsSelected = false;
|
||||
}
|
||||
}
|
||||
|
||||
void EquationInputArea::EquationTextBox_Submitted(Object ^ sender, MathRichEditBoxSubmission ^ submission)
|
||||
{
|
||||
auto tb = static_cast<EquationTextBox ^>(sender);
|
||||
if (tb == nullptr)
|
||||
{
|
||||
return;
|
||||
}
|
||||
auto eq = static_cast<EquationViewModel ^>(tb->DataContext);
|
||||
auto eq = GetViewModelFromEquationTextBox(sender);
|
||||
if (eq == nullptr)
|
||||
{
|
||||
return;
|
||||
@ -176,8 +183,7 @@ void EquationInputArea::FocusEquationTextBox(EquationViewModel ^ equation)
|
||||
|
||||
void EquationInputArea::EquationTextBox_RemoveButtonClicked(Object ^ sender, RoutedEventArgs ^ e)
|
||||
{
|
||||
auto tb = static_cast<EquationTextBox ^>(sender);
|
||||
auto eq = static_cast<EquationViewModel ^>(tb->DataContext);
|
||||
auto eq = GetViewModelFromEquationTextBox(sender);
|
||||
unsigned int index;
|
||||
|
||||
if (Equations->IndexOf(eq, &index))
|
||||
@ -206,15 +212,12 @@ void EquationInputArea::EquationTextBox_RemoveButtonClicked(Object ^ sender, Rou
|
||||
|
||||
void EquationInputArea::EquationTextBox_KeyGraphFeaturesButtonClicked(Object ^ sender, RoutedEventArgs ^ e)
|
||||
{
|
||||
auto tb = static_cast<EquationTextBox ^>(sender);
|
||||
auto eq = static_cast<EquationViewModel ^>(tb->DataContext);
|
||||
KeyGraphFeaturesRequested(this, eq);
|
||||
KeyGraphFeaturesRequested(this, GetViewModelFromEquationTextBox(sender));
|
||||
}
|
||||
|
||||
void EquationInputArea::EquationTextBox_EquationButtonClicked(Object ^ sender, RoutedEventArgs ^ e)
|
||||
{
|
||||
auto tb = static_cast<EquationTextBox ^>(sender);
|
||||
auto eq = static_cast<EquationViewModel ^>(tb->DataContext);
|
||||
auto eq = GetViewModelFromEquationTextBox(sender);
|
||||
eq->IsLineEnabled = !eq->IsLineEnabled;
|
||||
}
|
||||
|
||||
@ -415,3 +418,16 @@ void EquationInputArea::EquationTextBox_EquationFormatRequested(Object ^ sender,
|
||||
{
|
||||
EquationFormatRequested(sender, e);
|
||||
}
|
||||
|
||||
EquationViewModel ^ EquationInputArea::GetViewModelFromEquationTextBox(Object ^ sender)
|
||||
{
|
||||
auto tb = static_cast<EquationTextBox ^>(sender);
|
||||
if (tb == nullptr)
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
auto eq = static_cast<EquationViewModel ^>(tb->DataContext);
|
||||
|
||||
return eq;
|
||||
}
|
||||
|
@ -15,7 +15,8 @@
|
||||
|
||||
namespace CalculatorApp
|
||||
{
|
||||
public ref class EquationInputArea sealed : public Windows::UI::Xaml::Data::INotifyPropertyChanged
|
||||
public
|
||||
ref class EquationInputArea sealed : public Windows::UI::Xaml::Data::INotifyPropertyChanged
|
||||
{
|
||||
public:
|
||||
EquationInputArea();
|
||||
@ -65,6 +66,8 @@ namespace CalculatorApp
|
||||
void VariableAreaTapped(Platform::Object ^ sender, Windows::UI::Xaml::Input::TappedRoutedEventArgs ^ e);
|
||||
void EquationTextBox_EquationFormatRequested(Platform::Object ^ sender, CalculatorApp::Controls::MathRichEditBoxFormatRequest ^ e);
|
||||
|
||||
CalculatorApp::ViewModel::EquationViewModel ^ GetViewModelFromEquationTextBox(Platform::Object ^ sender);
|
||||
|
||||
Windows::UI::ViewManagement::AccessibilitySettings ^ m_accessibilitySettings;
|
||||
int m_lastLineColorIndex;
|
||||
int m_lastFunctionLabelIndex;
|
||||
|
@ -420,12 +420,14 @@ void GraphingCalculator::OnEquationKeyGraphFeaturesRequested(Object ^ sender, Eq
|
||||
auto keyGraphFeatureInfo = GraphingControl->AnalyzeEquation(equationViewModel->GraphEquation);
|
||||
equationViewModel->PopulateKeyGraphFeatures(keyGraphFeatureInfo);
|
||||
IsKeyGraphFeaturesVisible = true;
|
||||
equationViewModel->GraphEquation->IsSelected = true;
|
||||
}
|
||||
}
|
||||
|
||||
void GraphingCalculator::OnKeyGraphFeaturesClosed(Object ^ sender, RoutedEventArgs ^ e)
|
||||
{
|
||||
IsKeyGraphFeaturesVisible = false;
|
||||
ViewModel->SelectedEquation->GraphEquation->IsSelected = false;
|
||||
}
|
||||
|
||||
Visibility GraphingCalculator::ShouldDisplayPanel(bool isSmallState, bool isEquationModeActivated, bool isGraphPanel)
|
||||
|
@ -179,6 +179,7 @@ namespace GraphControl
|
||||
{
|
||||
if (m_graph)
|
||||
{
|
||||
m_graph->TryResetSelection();
|
||||
UpdateGraphOptions(m_graph->GetOptions(), GetGraphableEquations());
|
||||
}
|
||||
|
||||
@ -325,6 +326,13 @@ namespace GraphControl
|
||||
|
||||
if (initResult != nullopt)
|
||||
{
|
||||
auto graphedEquations = initResult.value();
|
||||
|
||||
for (int i = 0; i < validEqs.size(); i++)
|
||||
{
|
||||
validEqs[i]->GraphedEquation = graphedEquations[i];
|
||||
}
|
||||
|
||||
UpdateGraphOptions(m_graph->GetOptions(), validEqs);
|
||||
SetGraphArgs(m_graph);
|
||||
|
||||
@ -498,6 +506,11 @@ namespace GraphControl
|
||||
{
|
||||
auto lineColor = eq->LineColor;
|
||||
graphColors.emplace_back(lineColor.R, lineColor.G, lineColor.B, lineColor.A);
|
||||
|
||||
if (eq->IsSelected)
|
||||
{
|
||||
eq->GraphedEquation->TrySelectEquation();
|
||||
}
|
||||
}
|
||||
options.SetGraphColors(graphColors);
|
||||
}
|
||||
|
@ -30,8 +30,7 @@ namespace GraphControl
|
||||
// Check for unicode characters of less than, less than or equal to, greater than and greater than or equal to.
|
||||
if (expr.find(L">><") != wstring_view::npos || expr.find(L"><<") != wstring_view::npos || expr.find(L">≥<") != wstring_view::npos
|
||||
|| expr.find(L">≤<") != wstring_view::npos || expr.find(8805) != wstring_view::npos || expr.find(8804) != wstring_view::npos
|
||||
|| expr.find(L"><<") != wstring_view::npos
|
||||
|| expr.find(L">><") != wstring_view::npos)
|
||||
|| expr.find(L"><<") != wstring_view::npos || expr.find(L">><") != wstring_view::npos)
|
||||
{
|
||||
request = L"<mrow><mi>plotIneq2D</mi><mfenced separators=\"\">";
|
||||
}
|
||||
|
@ -17,6 +17,7 @@ namespace GraphControl
|
||||
OBSERVABLE_NAMED_PROPERTY_RW(bool, IsLineEnabled);
|
||||
OBSERVABLE_NAMED_PROPERTY_RW(bool, IsValidated);
|
||||
OBSERVABLE_NAMED_PROPERTY_RW(bool, HasGraphError);
|
||||
OBSERVABLE_NAMED_PROPERTY_RW(bool, IsSelected);
|
||||
|
||||
property Windows::UI::Color LineColor
|
||||
{
|
||||
@ -32,10 +33,24 @@ namespace GraphControl
|
||||
|
||||
bool IsGraphableEquation();
|
||||
|
||||
internal:
|
||||
property std::shared_ptr<Graphing::IEquation> GraphedEquation
|
||||
{
|
||||
void set(std::shared_ptr<Graphing::IEquation> graphedEquation)
|
||||
{
|
||||
m_graphedEquation = graphedEquation;
|
||||
}
|
||||
std::shared_ptr<Graphing::IEquation> get()
|
||||
{
|
||||
return m_graphedEquation;
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
std::wstring GetExpression();
|
||||
|
||||
private:
|
||||
Windows::UI::Color m_LineColor;
|
||||
std::shared_ptr<Graphing::IEquation> m_graphedEquation;
|
||||
};
|
||||
}
|
||||
|
@ -158,7 +158,7 @@ public
|
||||
{
|
||||
auto equation = static_cast<Equation ^>(sender);
|
||||
auto propertyName = args->PropertyName;
|
||||
if (propertyName == GraphControl::Equation::LineColorPropertyName)
|
||||
if (propertyName == GraphControl::Equation::LineColorPropertyName || propertyName == GraphControl::Equation::IsSelectedPropertyName)
|
||||
{
|
||||
EquationStyleChanged(equation);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user