[apps/calculation] WIP: display the complex graph when clicking on the

burger menu
This commit is contained in:
Émilie Feral
2019-10-16 10:16:10 +02:00
committed by Léa Saviot
parent b566846c49
commit f0ec2136b7
5 changed files with 28 additions and 11 deletions

View File

@@ -13,6 +13,7 @@ public:
View * view() override {
return &m_graphView;
}
ComplexModel * complexModel() { return &m_complex; }
private:
ComplexModel m_complex;
ComplexGraphView m_graphView;

View File

@@ -213,17 +213,21 @@ Calculation::EqualSign Calculation::exactAndApproximateDisplayedOutputsAreEqual(
}
}
Calculation::AdditionalOutput Calculation::additionalOuput(Context * context) {
Calculation::AdditionalOutput Calculation::additionalOuput(Context * context, std::complex<float> * c) {
ExpressionNode::Type type = exactOutput().type();
if (type == ExpressionNode::Type::Rational) {
return AdditionalOutput::BaseRepresentation;
}
Preferences * preferences = Preferences::sharedPreferences();
Evaluation<float> e = approximateOutput(context).approximateToEvaluation<float>(context, preferences->complexFormat(), preferences->angleUnit());
Evaluation<float> e = approximateOutput(context).approximateToEvaluation<float>(context, Preferences::ComplexFormat::Cartesian, preferences->angleUnit());
if (e.type() == EvaluationNode<float>::Type::MatrixComplex) {
return AdditionalOutput::None;
}
Complex<float> ec = static_cast<Complex<float> &>(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;

View File

@@ -84,7 +84,7 @@ public:
EqualSign exactAndApproximateDisplayedOutputsAreEqual(Poincare::Context * context);
// Additional outputs
AdditionalOutput additionalOuput(Poincare::Context * context);
AdditionalOutput additionalOuput(Poincare::Context * context, std::complex<float> * c = nullptr);
private:
static constexpr KDCoordinate k_heightComputationFailureHeight = 50;
/* Buffers holding text expressions have to be longer than the text written

View File

@@ -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> 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<float> 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;

View File

@@ -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;
};
}