mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-19 00:37:25 +01:00
[apps/calculation] Improve expressions that are displayed in Complex
pop-up
This commit is contained in:
@@ -1,11 +1,30 @@
|
||||
#include "complex_list_controller.h"
|
||||
#include "../app.h"
|
||||
|
||||
using namespace Poincare;
|
||||
|
||||
namespace Calculation {
|
||||
|
||||
void ComplexListController::fillCalculationStoreFromExpression(Poincare::Expression e) {
|
||||
void ComplexListController::setExpression(Poincare::Expression e) {
|
||||
IllustratedListController::setExpression(e);
|
||||
//TODO
|
||||
m_model.setComplex(std::complex<float>(1.2f,2.3f));
|
||||
IllustratedListController::fillCalculationStoreFromExpression(e);
|
||||
|
||||
Poincare::Preferences * preferences = Poincare::Preferences::sharedPreferences();
|
||||
Poincare::Preferences::ComplexFormat currentComplexFormat = preferences->complexFormat();
|
||||
if (currentComplexFormat == Poincare::Preferences::ComplexFormat::Real) {
|
||||
// Temporary change complex format to avoid all additional expressions to be "unreal"
|
||||
preferences->setComplexFormat(Poincare::Preferences::ComplexFormat::Cartesian);
|
||||
}
|
||||
Poincare::Context * context = App::app()->localContext();
|
||||
// Fill Calculation Store
|
||||
m_calculationStore.push("im(z)", context);
|
||||
m_calculationStore.push("re(z)", context);
|
||||
m_calculationStore.push("arg(z)", context);
|
||||
m_calculationStore.push("abs(z)", context);
|
||||
|
||||
// Reset complex format as before
|
||||
preferences->setComplexFormat(currentComplexFormat);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -12,8 +12,9 @@ public:
|
||||
ComplexListController() :
|
||||
IllustratedListController(nullptr),
|
||||
m_complexGraphCell(&m_model) {}
|
||||
void fillCalculationStoreFromExpression(Poincare::Expression e) override;
|
||||
void setExpression(Poincare::Expression e) override;
|
||||
private:
|
||||
CodePoint expressionSymbol() const override { return 'z'; }
|
||||
HighlightCell * illustrationCell() override { return &m_complexGraphCell; }
|
||||
ComplexGraphCell m_complexGraphCell;
|
||||
ComplexModel m_model;
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#include "illustrated_list_controller.h"
|
||||
#include <poincare/symbol.h>
|
||||
#include "../app.h"
|
||||
|
||||
using namespace Poincare;
|
||||
@@ -41,6 +42,25 @@ void IllustratedListController::didBecomeFirstResponder() {
|
||||
Container::activeApp()->setFirstResponder(&m_listController);
|
||||
}
|
||||
|
||||
void IllustratedListController::viewDidDisappear() {
|
||||
StackViewController::viewDidDisappear();
|
||||
// Reset the context as it was before displaying the IllustratedListController
|
||||
Poincare::Context * context = App::app()->localContext();
|
||||
if (m_savedExpression.isUninitialized()) {
|
||||
/* If no expression was stored in the symbol used by the
|
||||
* IllustratedListController, we delete the record we stored */
|
||||
char symbolName[3];
|
||||
size_t length = UTF8Decoder::CodePointToChars(expressionSymbol(), symbolName, 3);
|
||||
assert(length < 3);
|
||||
symbolName[length] = 0;
|
||||
const char * const extensions[2] = {"exp", "func"};
|
||||
Ion::Storage::sharedStorage()->recordBaseNamedWithExtensions(symbolName, extensions, 2).destroy();
|
||||
} else {
|
||||
Poincare::Symbol s = Poincare::Symbol::Builder(expressionSymbol());
|
||||
context->setExpressionForSymbolAbstract(m_savedExpression, s);
|
||||
}
|
||||
}
|
||||
|
||||
int IllustratedListController::numberOfRows() const {
|
||||
return k_maxNumberOfAdditionalCalculations + 1;
|
||||
}
|
||||
@@ -107,12 +127,11 @@ void IllustratedListController::tableViewDidChangeSelection(SelectableTableView
|
||||
}
|
||||
}
|
||||
|
||||
void IllustratedListController::fillCalculationStoreFromExpression(Expression e) {
|
||||
// TODO
|
||||
void IllustratedListController::setExpression(Poincare::Expression e) {
|
||||
Poincare::Context * context = App::app()->localContext();
|
||||
m_calculationStore.push("1+root(2,3)", context);
|
||||
m_calculationStore.push("2+root(2,3)", context);
|
||||
m_calculationStore.push("3+root(2,3)", context);
|
||||
Poincare::Symbol s = Poincare::Symbol::Builder('z');
|
||||
m_savedExpression = context->expressionForSymbolAbstract(s, false);
|
||||
context->setExpressionForSymbolAbstract(e, s);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@ public:
|
||||
// Responder
|
||||
bool handleEvent(Ion::Events::Event event) override;
|
||||
void didBecomeFirstResponder() override;
|
||||
void viewDidDisappear() override;
|
||||
|
||||
//ListViewDataSource
|
||||
int numberOfRows() const override;
|
||||
@@ -28,9 +29,13 @@ public:
|
||||
void tableViewDidChangeSelection(SelectableTableView * t, int previousSelectedCellX, int previousSelectedCellY, bool withinTemporarySelection) override;
|
||||
|
||||
// IllustratedListController
|
||||
virtual void fillCalculationStoreFromExpression(Poincare::Expression e);
|
||||
virtual void setExpression(Poincare::Expression e);
|
||||
|
||||
protected:
|
||||
Poincare::Expression m_savedExpression;
|
||||
CalculationStore m_calculationStore;
|
||||
private:
|
||||
virtual CodePoint expressionSymbol() const = 0;
|
||||
class ListController : public ViewController {
|
||||
public:
|
||||
ListController(IllustratedListController * dataSource);
|
||||
@@ -41,13 +46,12 @@ private:
|
||||
private:
|
||||
SelectableTableView m_selectableTableView;
|
||||
};
|
||||
constexpr static int k_maxNumberOfAdditionalCalculations = 3;
|
||||
constexpr static int k_maxNumberOfAdditionalCalculations = 4;
|
||||
constexpr static KDCoordinate k_illustrationHeight = 100;
|
||||
ListController m_listController;
|
||||
// Cells
|
||||
virtual HighlightCell * illustrationCell() = 0;
|
||||
ScrollableInputExactApproximateExpressionsCell m_additionalCalculationCells[k_maxNumberOfAdditionalCalculations];
|
||||
CalculationStore m_calculationStore;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -72,9 +72,10 @@ bool HistoryController::handleEvent(Ion::Events::Event event) {
|
||||
Expression::AdditionalInformationType additionalInfoType = selectedCell->additionalInformationType();
|
||||
/* TODO
|
||||
* Controller * c = additionalInformationType ? graphController : listController?
|
||||
* m_controller->setType(additionalInformationType)*/
|
||||
* m_controller->setType(additionalInformationType)
|
||||
* m_controller->setCalculation()...*/
|
||||
if (additionalInfoType == Expression::AdditionalInformationType::Complex) {
|
||||
m_complexController.fillCalculationStoreFromExpression(calculation->exactOutput());
|
||||
m_complexController.setExpression(calculation->exactOutput());
|
||||
Container::activeApp()->displayModalViewController(&m_complexController, 0.f, 0.f, Metric::CommonTopMargin, Metric::PopUpLeftMargin, 0, Metric::PopUpRightMargin);
|
||||
}
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user