diff --git a/apps/calculation/additional_outputs/complex_graph_controller.h b/apps/calculation/additional_outputs/complex_graph_controller.h index 0d07c2811..3ef28c3da 100644 --- a/apps/calculation/additional_outputs/complex_graph_controller.h +++ b/apps/calculation/additional_outputs/complex_graph_controller.h @@ -13,6 +13,7 @@ public: View * view() override { return &m_graphView; } + ComplexModel * complexModel() { return &m_complex; } private: ComplexModel m_complex; ComplexGraphView m_graphView; diff --git a/apps/calculation/calculation.cpp b/apps/calculation/calculation.cpp index 5590a6b56..c04607823 100644 --- a/apps/calculation/calculation.cpp +++ b/apps/calculation/calculation.cpp @@ -213,17 +213,21 @@ Calculation::EqualSign Calculation::exactAndApproximateDisplayedOutputsAreEqual( } } -Calculation::AdditionalOutput Calculation::additionalOuput(Context * context) { +Calculation::AdditionalOutput Calculation::additionalOuput(Context * context, std::complex * c) { ExpressionNode::Type type = exactOutput().type(); if (type == ExpressionNode::Type::Rational) { return AdditionalOutput::BaseRepresentation; } Preferences * preferences = Preferences::sharedPreferences(); - Evaluation e = approximateOutput(context).approximateToEvaluation(context, preferences->complexFormat(), preferences->angleUnit()); + Evaluation e = approximateOutput(context).approximateToEvaluation(context, Preferences::ComplexFormat::Cartesian, preferences->angleUnit()); if (e.type() == EvaluationNode::Type::MatrixComplex) { return AdditionalOutput::None; } Complex ec = static_cast &>(e); + if (c) { + c->real(ec.real()); + c->imag(ec.imag()); + } // return AdditionalOutput::Matrix if ((type == ExpressionNode::Type::Cosine || type == ExpressionNode::Type::Sine) && ec.imag() == 0.0f) { return AdditionalOutput::TrigonometryCircle; diff --git a/apps/calculation/calculation.h b/apps/calculation/calculation.h index e01aab748..f50f9e2c9 100644 --- a/apps/calculation/calculation.h +++ b/apps/calculation/calculation.h @@ -84,7 +84,7 @@ public: EqualSign exactAndApproximateDisplayedOutputsAreEqual(Poincare::Context * context); // Additional outputs - AdditionalOutput additionalOuput(Poincare::Context * context); + AdditionalOutput additionalOuput(Poincare::Context * context, std::complex * c = nullptr); private: static constexpr KDCoordinate k_heightComputationFailureHeight = 50; /* Buffers holding text expressions have to be longer than the text written diff --git a/apps/calculation/history_controller.cpp b/apps/calculation/history_controller.cpp index b3fb5b2ce..28965bbcc 100644 --- a/apps/calculation/history_controller.cpp +++ b/apps/calculation/history_controller.cpp @@ -53,20 +53,30 @@ bool HistoryController::handleEvent(Ion::Events::Event event) { int focusRow = selectedRow(); HistoryViewCell * selectedCell = (HistoryViewCell *)m_selectableTableView.selectedCell(); SubviewType subviewType = selectedSubviewType(); - EditExpressionController * editController = (EditExpressionController *)parentResponder(); - m_selectableTableView.deselectTable(); - Container::activeApp()->setFirstResponder(editController); Shared::ExpiringPointer calculation = calculationAtIndex(focusRow); + EditExpressionController * editController = (EditExpressionController *)parentResponder(); if (subviewType == SubviewType::Input) { + m_selectableTableView.deselectTable(); + Container::activeApp()->setFirstResponder(editController); editController->insertTextBody(calculation->inputText()); } else { ScrollableExactApproximateExpressionsView::SubviewPosition outputSubviewPosition = selectedCell->outputView()->selectedSubviewPosition(); - if (outputSubviewPosition == ScrollableExactApproximateExpressionsView::SubviewPosition::Right - && !calculation->shouldOnlyDisplayExactOutput()) - { - editController->insertTextBody(calculation->approximateOutputText()); + if (outputSubviewPosition == ScrollableExactApproximateExpressionsView::SubviewPosition::Burger) { + std::complex c; + if (calculation->additionalOuput(App::app()->localContext(), &c) == Calculation::AdditionalOutput::ComplexPlan) { + m_complexController.complexModel()->setComplex(c); + Container::activeApp()->displayModalViewController(&m_complexController, 0.f, 0.f, Metric::PopUpTopMargin, Metric::PopUpLeftMargin, Metric::PopUpTopMargin, Metric::PopUpRightMargin); + } } else { - editController->insertTextBody(calculation->exactOutputText()); + m_selectableTableView.deselectTable(); + Container::activeApp()->setFirstResponder(editController); + if (outputSubviewPosition == ScrollableExactApproximateExpressionsView::SubviewPosition::Right + && !calculation->shouldOnlyDisplayExactOutput()) + { + editController->insertTextBody(calculation->approximateOutputText()); + } else { + editController->insertTextBody(calculation->exactOutputText()); + } } } return true; diff --git a/apps/calculation/history_controller.h b/apps/calculation/history_controller.h index f75c20015..913b10899 100644 --- a/apps/calculation/history_controller.h +++ b/apps/calculation/history_controller.h @@ -5,6 +5,7 @@ #include "history_view_cell.h" #include "calculation_store.h" #include "selectable_table_view.h" +#include "additional_outputs/complex_graph_controller.h" namespace Calculation { @@ -35,6 +36,7 @@ private: CalculationSelectableTableView m_selectableTableView; HistoryViewCell m_calculationHistory[k_maxNumberOfDisplayedRows]; CalculationStore * m_calculationStore; + ComplexGraphController m_complexController; }; }