mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-03-18 21:30:38 +01:00
[Sequence & Shared] Changed the location of various files
Moved sequences files to shared in order to allow the system to compile without the app sequence. Change-Id: Ia8349814a72776244acc41af964059f24e58cff0
This commit is contained in:
committed by
Émilie Feral
parent
ed358590ce
commit
c006ed7b10
@@ -2,10 +2,7 @@ apps += Sequence::App
|
|||||||
app_headers += apps/sequence/app.h
|
app_headers += apps/sequence/app.h
|
||||||
|
|
||||||
app_sequence_test_src = $(addprefix apps/sequence/,\
|
app_sequence_test_src = $(addprefix apps/sequence/,\
|
||||||
cache_context.cpp \
|
\
|
||||||
sequence.cpp \
|
|
||||||
sequence_context.cpp \
|
|
||||||
sequence_store.cpp \
|
|
||||||
)
|
)
|
||||||
|
|
||||||
app_sequence_src = $(addprefix apps/sequence/,\
|
app_sequence_src = $(addprefix apps/sequence/,\
|
||||||
@@ -22,7 +19,6 @@ app_sequence_src = $(addprefix apps/sequence/,\
|
|||||||
list/type_parameter_controller.cpp \
|
list/type_parameter_controller.cpp \
|
||||||
values/interval_parameter_controller.cpp \
|
values/interval_parameter_controller.cpp \
|
||||||
values/values_controller.cpp \
|
values/values_controller.cpp \
|
||||||
sequence_title_cell.cpp \
|
|
||||||
)
|
)
|
||||||
|
|
||||||
app_sequence_src += $(app_sequence_test_src)
|
app_sequence_src += $(app_sequence_test_src)
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ App::App(Snapshot * snapshot) :
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
SequenceContext * App::localContext() {
|
Shared::SequenceContext * App::localContext() {
|
||||||
return &m_sequenceContext;
|
return &m_sequenceContext;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@
|
|||||||
#define SEQUENCE_APP_H
|
#define SEQUENCE_APP_H
|
||||||
|
|
||||||
#include <escher.h>
|
#include <escher.h>
|
||||||
#include "sequence_context.h"
|
#include "../shared/sequence_context.h"
|
||||||
#include "sequence_store.h"
|
#include "../shared/sequence_store.h"
|
||||||
#include "graph/graph_controller.h"
|
#include "graph/graph_controller.h"
|
||||||
#include "graph/curve_view_range.h"
|
#include "graph/curve_view_range.h"
|
||||||
#include "list/list_controller.h"
|
#include "list/list_controller.h"
|
||||||
@@ -27,12 +27,12 @@ public:
|
|||||||
App * unpack(Container * container) override;
|
App * unpack(Container * container) override;
|
||||||
void reset() override;
|
void reset() override;
|
||||||
Descriptor * descriptor() override;
|
Descriptor * descriptor() override;
|
||||||
SequenceStore * functionStore() override { return &m_sequenceStore; }
|
Shared::SequenceStore * functionStore() override { return &m_sequenceStore; }
|
||||||
CurveViewRange * graphRange() { return &m_graphRange; }
|
CurveViewRange * graphRange() { return &m_graphRange; }
|
||||||
Shared::Interval * interval() { return &m_interval; }
|
Shared::Interval * interval() { return &m_interval; }
|
||||||
private:
|
private:
|
||||||
void tidy() override;
|
void tidy() override;
|
||||||
SequenceStore m_sequenceStore;
|
Shared::SequenceStore m_sequenceStore;
|
||||||
CurveViewRange m_graphRange;
|
CurveViewRange m_graphRange;
|
||||||
Shared::Interval m_interval;
|
Shared::Interval m_interval;
|
||||||
};
|
};
|
||||||
@@ -46,8 +46,8 @@ public:
|
|||||||
// TODO: override variableBoxForInputEventHandler to lock sequence in the variable box once they appear there
|
// TODO: override variableBoxForInputEventHandler to lock sequence in the variable box once they appear there
|
||||||
// NestedMenuController * variableBoxForInputEventHandler(InputEventHandler * textInput) override;
|
// NestedMenuController * variableBoxForInputEventHandler(InputEventHandler * textInput) override;
|
||||||
CodePoint XNT() override { return 'n'; }
|
CodePoint XNT() override { return 'n'; }
|
||||||
SequenceContext * localContext() override;
|
Shared::SequenceContext * localContext() override;
|
||||||
SequenceStore * functionStore() override { return snapshot()->functionStore(); }
|
Shared::SequenceStore * functionStore() override { return snapshot()->functionStore(); }
|
||||||
Shared::Interval * interval() { return snapshot()->interval(); }
|
Shared::Interval * interval() { return snapshot()->interval(); }
|
||||||
ValuesController * valuesController() override {
|
ValuesController * valuesController() override {
|
||||||
return &m_valuesController;
|
return &m_valuesController;
|
||||||
@@ -57,7 +57,7 @@ public:
|
|||||||
}
|
}
|
||||||
private:
|
private:
|
||||||
App(Snapshot * snapshot);
|
App(Snapshot * snapshot);
|
||||||
SequenceContext m_sequenceContext;
|
Shared::SequenceContext m_sequenceContext;
|
||||||
ListController m_listController;
|
ListController m_listController;
|
||||||
ButtonRowController m_listFooter;
|
ButtonRowController m_listFooter;
|
||||||
ButtonRowController m_listHeader;
|
ButtonRowController m_listHeader;
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
#include "curve_parameter_controller.h"
|
#include "curve_parameter_controller.h"
|
||||||
#include "graph_controller.h"
|
#include "graph_controller.h"
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
#include <apps/i18n.h>
|
||||||
|
|
||||||
using namespace Shared;
|
using namespace Shared;
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
#include <float.h>
|
#include <float.h>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
#include <apps/i18n.h>
|
||||||
|
|
||||||
using namespace Shared;
|
using namespace Shared;
|
||||||
using namespace Poincare;
|
using namespace Poincare;
|
||||||
@@ -38,7 +39,7 @@ float GraphController::interestingXMin() const {
|
|||||||
int nmin = INT_MAX;
|
int nmin = INT_MAX;
|
||||||
int nbOfActiveModels = functionStore()->numberOfActiveFunctions();
|
int nbOfActiveModels = functionStore()->numberOfActiveFunctions();
|
||||||
for (int i = 0; i < nbOfActiveModels; i++) {
|
for (int i = 0; i < nbOfActiveModels; i++) {
|
||||||
Sequence * s = functionStore()->modelForRecord(functionStore()->activeRecordAtIndex(i));
|
Shared::Sequence * s = functionStore()->modelForRecord(functionStore()->activeRecordAtIndex(i));
|
||||||
nmin = std::min(nmin, s->initialRank());
|
nmin = std::min(nmin, s->initialRank());
|
||||||
}
|
}
|
||||||
assert(nmin < INT_MAX);
|
assert(nmin < INT_MAX);
|
||||||
@@ -50,7 +51,7 @@ void GraphController::interestingRanges(InteractiveCurveViewRange * range) const
|
|||||||
int nmax = 0;
|
int nmax = 0;
|
||||||
int nbOfActiveModels = functionStore()->numberOfActiveFunctions();
|
int nbOfActiveModels = functionStore()->numberOfActiveFunctions();
|
||||||
for (int i = 0; i < nbOfActiveModels; i++) {
|
for (int i = 0; i < nbOfActiveModels; i++) {
|
||||||
Sequence * s = functionStore()->modelForRecord(functionStore()->activeRecordAtIndex(i));
|
Shared::Sequence * s = functionStore()->modelForRecord(functionStore()->activeRecordAtIndex(i));
|
||||||
int firstInterestingIndex = s->initialRank();
|
int firstInterestingIndex = s->initialRank();
|
||||||
nmin = std::min(nmin, firstInterestingIndex);
|
nmin = std::min(nmin, firstInterestingIndex);
|
||||||
nmax = std::max(nmax, firstInterestingIndex + static_cast<int>(k_defaultXHalfRange));
|
nmax = std::max(nmax, firstInterestingIndex + static_cast<int>(k_defaultXHalfRange));
|
||||||
@@ -95,7 +96,7 @@ bool GraphController::moveCursorHorizontally(int direction, int scrollSpeed) {
|
|||||||
if (x < 0.0) {
|
if (x < 0.0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
Sequence * s = functionStore()->modelForRecord(functionStore()->activeRecordAtIndex(indexFunctionSelectedByCursor()));
|
Shared::Sequence * s = functionStore()->modelForRecord(functionStore()->activeRecordAtIndex(indexFunctionSelectedByCursor()));
|
||||||
double y = s->evaluateXYAtParameter(x, textFieldDelegateApp()->localContext()).x2();
|
double y = s->evaluateXYAtParameter(x, textFieldDelegateApp()->localContext()).x2();
|
||||||
m_cursor->moveTo(x, x, y);
|
m_cursor->moveTo(x, x, y);
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -8,13 +8,13 @@
|
|||||||
#include "term_sum_controller.h"
|
#include "term_sum_controller.h"
|
||||||
#include "../../shared/function_graph_controller.h"
|
#include "../../shared/function_graph_controller.h"
|
||||||
#include "../../shared/cursor_view.h"
|
#include "../../shared/cursor_view.h"
|
||||||
#include "../sequence_store.h"
|
#include "../../shared/sequence_store.h"
|
||||||
|
|
||||||
namespace Sequence {
|
namespace Sequence {
|
||||||
|
|
||||||
class GraphController final : public Shared::FunctionGraphController {
|
class GraphController final : public Shared::FunctionGraphController {
|
||||||
public:
|
public:
|
||||||
GraphController(Responder * parentResponder, ::InputEventHandlerDelegate * inputEventHandlerDelegate, SequenceStore * sequenceStore, CurveViewRange * graphRange, Shared::CurveViewCursor * cursor, int * indexFunctionSelectedByCursor, uint32_t * modelVersion, uint32_t * previousModelsVersions, uint32_t * rangeVersion, Poincare::Preferences::AngleUnit * angleUnitVersion, ButtonRowController * header);
|
GraphController(Responder * parentResponder, ::InputEventHandlerDelegate * inputEventHandlerDelegate, Shared::SequenceStore * sequenceStore, CurveViewRange * graphRange, Shared::CurveViewCursor * cursor, int * indexFunctionSelectedByCursor, uint32_t * modelVersion, uint32_t * previousModelsVersions, uint32_t * rangeVersion, Poincare::Preferences::AngleUnit * angleUnitVersion, ButtonRowController * header);
|
||||||
I18n::Message emptyMessage() override;
|
I18n::Message emptyMessage() override;
|
||||||
void viewWillAppear() override;
|
void viewWillAppear() override;
|
||||||
TermSumController * termSumController() { return &m_termSumController; }
|
TermSumController * termSumController() { return &m_termSumController; }
|
||||||
@@ -28,7 +28,7 @@ private:
|
|||||||
bool moveCursorHorizontally(int direction, int scrollSpeed = 1) override;
|
bool moveCursorHorizontally(int direction, int scrollSpeed = 1) override;
|
||||||
double defaultCursorT(Ion::Storage::Record record) override;
|
double defaultCursorT(Ion::Storage::Record record) override;
|
||||||
CurveViewRange * interactiveCurveViewRange() override { return m_graphRange; }
|
CurveViewRange * interactiveCurveViewRange() override { return m_graphRange; }
|
||||||
SequenceStore * functionStore() const override { return static_cast<SequenceStore *>(Shared::FunctionGraphController::functionStore()); }
|
Shared::SequenceStore * functionStore() const override { return static_cast<Shared::SequenceStore *>(Shared::FunctionGraphController::functionStore()); }
|
||||||
GraphView * functionGraphView() override { return &m_view; }
|
GraphView * functionGraphView() override { return &m_view; }
|
||||||
CurveParameterController * curveParameterController() override { return &m_curveParameterController; }
|
CurveParameterController * curveParameterController() override { return &m_curveParameterController; }
|
||||||
Shared::CursorView m_cursorView;
|
Shared::CursorView m_cursorView;
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ void GraphView::drawRect(KDContext * ctx, KDRect rect) const {
|
|||||||
const int step = std::ceil(pixelWidth());
|
const int step = std::ceil(pixelWidth());
|
||||||
for (int i = 0; i < m_sequenceStore->numberOfActiveFunctions(); i++) {
|
for (int i = 0; i < m_sequenceStore->numberOfActiveFunctions(); i++) {
|
||||||
Ion::Storage::Record record = m_sequenceStore->activeRecordAtIndex(i);
|
Ion::Storage::Record record = m_sequenceStore->activeRecordAtIndex(i);
|
||||||
Sequence * s = m_sequenceStore->modelForRecord(record);;
|
Shared::Sequence * s = m_sequenceStore->modelForRecord(record);;
|
||||||
float rectXMin = pixelToFloat(Axis::Horizontal, rect.left() - k_externRectMargin);
|
float rectXMin = pixelToFloat(Axis::Horizontal, rect.left() - k_externRectMargin);
|
||||||
rectXMin = rectXMin < 0 ? 0 : rectXMin;
|
rectXMin = rectXMin < 0 ? 0 : rectXMin;
|
||||||
float rectXMax = pixelToFloat(Axis::Horizontal, rect.right() + k_externRectMargin);
|
float rectXMax = pixelToFloat(Axis::Horizontal, rect.right() + k_externRectMargin);
|
||||||
|
|||||||
@@ -2,17 +2,17 @@
|
|||||||
#define SEQUENCE_GRAPH_VIEW_H
|
#define SEQUENCE_GRAPH_VIEW_H
|
||||||
|
|
||||||
#include "../../shared/function_graph_view.h"
|
#include "../../shared/function_graph_view.h"
|
||||||
#include "../sequence_store.h"
|
#include "../../shared/sequence_store.h"
|
||||||
|
|
||||||
namespace Sequence {
|
namespace Sequence {
|
||||||
|
|
||||||
class GraphView : public Shared::FunctionGraphView {
|
class GraphView : public Shared::FunctionGraphView {
|
||||||
public:
|
public:
|
||||||
GraphView(SequenceStore * sequenceStore, Shared::InteractiveCurveViewRange * graphRange,
|
GraphView(Shared::SequenceStore * sequenceStore, Shared::InteractiveCurveViewRange * graphRange,
|
||||||
Shared::CurveViewCursor * cursor, Shared::BannerView * bannerView, Shared::CursorView * cursorView);
|
Shared::CurveViewCursor * cursor, Shared::BannerView * bannerView, Shared::CursorView * cursorView);
|
||||||
void drawRect(KDContext * ctx, KDRect rect) const override;
|
void drawRect(KDContext * ctx, KDRect rect) const override;
|
||||||
private:
|
private:
|
||||||
SequenceStore * m_sequenceStore;
|
Shared::SequenceStore * m_sequenceStore;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ double TermSumController::cursorNextStep(double x, int direction) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Layout TermSumController::createFunctionLayout(Shared::ExpiringPointer<Shared::Function> function) {
|
Layout TermSumController::createFunctionLayout(Shared::ExpiringPointer<Shared::Function> function) {
|
||||||
Sequence * sequence = static_cast<Sequence *>(function.pointer());
|
Shared::Sequence * sequence = static_cast<Shared::Sequence *>(function.pointer());
|
||||||
return sequence->nameLayout();
|
return sequence->nameLayout();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
#include "../app.h"
|
#include "../app.h"
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
#include <apps/i18n.h>
|
||||||
|
|
||||||
using namespace Shared;
|
using namespace Shared;
|
||||||
using namespace Poincare;
|
using namespace Poincare;
|
||||||
@@ -31,7 +32,7 @@ int ListController::numberOfExpressionRows() const {
|
|||||||
SequenceStore * store = const_cast<ListController *>(this)->modelStore();
|
SequenceStore * store = const_cast<ListController *>(this)->modelStore();
|
||||||
const int modelsCount = store->numberOfModels();
|
const int modelsCount = store->numberOfModels();
|
||||||
for (int i = 0; i < modelsCount; i++) {
|
for (int i = 0; i < modelsCount; i++) {
|
||||||
Sequence * sequence = store->modelForRecord(store->recordAtIndex(i));
|
Shared::Sequence * sequence = store->modelForRecord(store->recordAtIndex(i));
|
||||||
numberOfRows += sequence->numberOfElements();
|
numberOfRows += sequence->numberOfElements();
|
||||||
}
|
}
|
||||||
return numberOfRows + (modelsCount == store->maxNumberOfModels()? 0 : 1);
|
return numberOfRows + (modelsCount == store->maxNumberOfModels()? 0 : 1);
|
||||||
@@ -42,7 +43,7 @@ KDCoordinate ListController::expressionRowHeight(int j) {
|
|||||||
if (isAddEmptyRow(j)) {
|
if (isAddEmptyRow(j)) {
|
||||||
return defaultHeight;
|
return defaultHeight;
|
||||||
}
|
}
|
||||||
Sequence * sequence = modelStore()->modelForRecord(modelStore()->recordAtIndex(modelIndexForRow(j)));
|
Shared::Sequence * sequence = modelStore()->modelForRecord(modelStore()->recordAtIndex(modelIndexForRow(j)));
|
||||||
Layout layout = sequence->layout();
|
Layout layout = sequence->layout();
|
||||||
if (sequenceDefinitionForRow(j) == 1) {
|
if (sequenceDefinitionForRow(j) == 1) {
|
||||||
layout = sequence->firstInitialConditionLayout();
|
layout = sequence->firstInitialConditionLayout();
|
||||||
@@ -67,7 +68,7 @@ Toolbox * ListController::toolboxForInputEventHandler(InputEventHandler * textIn
|
|||||||
// Set extra cells
|
// Set extra cells
|
||||||
int recurrenceDepth = -1;
|
int recurrenceDepth = -1;
|
||||||
int sequenceDefinition = sequenceDefinitionForRow(selectedRow());
|
int sequenceDefinition = sequenceDefinitionForRow(selectedRow());
|
||||||
Sequence * sequence = modelStore()->modelForRecord(modelStore()->recordAtIndex(modelIndexForRow(selectedRow())));
|
Shared::Sequence * sequence = modelStore()->modelForRecord(modelStore()->recordAtIndex(modelIndexForRow(selectedRow())));
|
||||||
if (sequenceDefinition == 0) {
|
if (sequenceDefinition == 0) {
|
||||||
recurrenceDepth = sequence->numberOfElements()-1;
|
recurrenceDepth = sequence->numberOfElements()-1;
|
||||||
}
|
}
|
||||||
@@ -85,7 +86,7 @@ void ListController::selectPreviousNewSequenceCell() {
|
|||||||
|
|
||||||
void ListController::editExpression(int sequenceDefinition, Ion::Events::Event event) {
|
void ListController::editExpression(int sequenceDefinition, Ion::Events::Event event) {
|
||||||
Ion::Storage::Record record = modelStore()->recordAtIndex(modelIndexForRow(selectedRow()));
|
Ion::Storage::Record record = modelStore()->recordAtIndex(modelIndexForRow(selectedRow()));
|
||||||
Sequence * sequence = modelStore()->modelForRecord(record);
|
Shared::Sequence * sequence = modelStore()->modelForRecord(record);
|
||||||
InputViewController * inputController = Shared::FunctionApp::app()->inputViewController();
|
InputViewController * inputController = Shared::FunctionApp::app()->inputViewController();
|
||||||
if (event == Ion::Events::OK || event == Ion::Events::EXE) {
|
if (event == Ion::Events::OK || event == Ion::Events::EXE) {
|
||||||
char initialTextContent[Constant::MaxSerializedExpressionSize];
|
char initialTextContent[Constant::MaxSerializedExpressionSize];
|
||||||
@@ -147,7 +148,7 @@ bool ListController::editInitialConditionOfSelectedRecordWithText(const char * t
|
|||||||
// Reset memoization of the selected cell which always corresponds to the k_memoizedCellsCount/2 memoized cell
|
// Reset memoization of the selected cell which always corresponds to the k_memoizedCellsCount/2 memoized cell
|
||||||
resetMemoizationForIndex(k_memoizedCellsCount/2);
|
resetMemoizationForIndex(k_memoizedCellsCount/2);
|
||||||
Ion::Storage::Record record = modelStore()->recordAtIndex(modelIndexForRow(selectedRow()));
|
Ion::Storage::Record record = modelStore()->recordAtIndex(modelIndexForRow(selectedRow()));
|
||||||
Sequence * sequence = modelStore()->modelForRecord(record);
|
Shared::Sequence * sequence = modelStore()->modelForRecord(record);
|
||||||
Context * context = App::app()->localContext();
|
Context * context = App::app()->localContext();
|
||||||
Ion::Storage::Record::ErrorStatus error = firstInitialCondition? sequence->setFirstInitialConditionContent(text, context) : sequence->setSecondInitialConditionContent(text, context);
|
Ion::Storage::Record::ErrorStatus error = firstInitialCondition? sequence->setFirstInitialConditionContent(text, context) : sequence->setSecondInitialConditionContent(text, context);
|
||||||
return (error == Ion::Storage::Record::ErrorStatus::None);
|
return (error == Ion::Storage::Record::ErrorStatus::None);
|
||||||
@@ -179,7 +180,7 @@ void ListController::willDisplayTitleCellAtIndex(HighlightCell * cell, int j) {
|
|||||||
myCell->setBaseline(baseline(j));
|
myCell->setBaseline(baseline(j));
|
||||||
// Set the layout
|
// Set the layout
|
||||||
Ion::Storage::Record record = modelStore()->recordAtIndex(modelIndexForRow(j));
|
Ion::Storage::Record record = modelStore()->recordAtIndex(modelIndexForRow(j));
|
||||||
Sequence * sequence = modelStore()->modelForRecord(record);
|
Shared::Sequence * sequence = modelStore()->modelForRecord(record);
|
||||||
if (sequenceDefinitionForRow(j) == 0) {
|
if (sequenceDefinitionForRow(j) == 0) {
|
||||||
myCell->setLayout(sequence->definitionName());
|
myCell->setLayout(sequence->definitionName());
|
||||||
}
|
}
|
||||||
@@ -197,7 +198,7 @@ void ListController::willDisplayTitleCellAtIndex(HighlightCell * cell, int j) {
|
|||||||
void ListController::willDisplayExpressionCellAtIndex(HighlightCell * cell, int j) {
|
void ListController::willDisplayExpressionCellAtIndex(HighlightCell * cell, int j) {
|
||||||
FunctionExpressionCell * myCell = (FunctionExpressionCell *)cell;
|
FunctionExpressionCell * myCell = (FunctionExpressionCell *)cell;
|
||||||
Ion::Storage::Record record = modelStore()->recordAtIndex(modelIndexForRow(j));
|
Ion::Storage::Record record = modelStore()->recordAtIndex(modelIndexForRow(j));
|
||||||
Sequence * sequence = modelStore()->modelForRecord(record);
|
Shared::Sequence * sequence = modelStore()->modelForRecord(record);
|
||||||
if (sequenceDefinitionForRow(j) == 0) {
|
if (sequenceDefinitionForRow(j) == 0) {
|
||||||
myCell->setLayout(sequence->layout());
|
myCell->setLayout(sequence->layout());
|
||||||
}
|
}
|
||||||
@@ -223,7 +224,7 @@ int ListController::modelIndexForRow(int j) {
|
|||||||
int sequenceIndex = -1;
|
int sequenceIndex = -1;
|
||||||
do {
|
do {
|
||||||
sequenceIndex++;
|
sequenceIndex++;
|
||||||
Sequence * sequence = modelStore()->modelForRecord(modelStore()->recordAtIndex(sequenceIndex));
|
Shared::Sequence * sequence = modelStore()->modelForRecord(modelStore()->recordAtIndex(sequenceIndex));
|
||||||
rowIndex += sequence->numberOfElements();
|
rowIndex += sequence->numberOfElements();
|
||||||
} while (rowIndex <= j);
|
} while (rowIndex <= j);
|
||||||
return sequenceIndex;
|
return sequenceIndex;
|
||||||
@@ -238,7 +239,7 @@ int ListController::sequenceDefinitionForRow(int j) {
|
|||||||
}
|
}
|
||||||
int rowIndex = 0;
|
int rowIndex = 0;
|
||||||
int sequenceIndex = -1;
|
int sequenceIndex = -1;
|
||||||
Sequence * sequence;
|
Shared::Sequence * sequence;
|
||||||
do {
|
do {
|
||||||
sequenceIndex++;
|
sequenceIndex++;
|
||||||
sequence = modelStore()->modelForRecord(modelStore()->recordAtIndex(sequenceIndex));
|
sequence = modelStore()->modelForRecord(modelStore()->recordAtIndex(sequenceIndex));
|
||||||
@@ -259,7 +260,7 @@ void ListController::editExpression(Ion::Events::Event event) {
|
|||||||
void ListController::reinitSelectedExpression(ExpiringPointer<ExpressionModelHandle> model) {
|
void ListController::reinitSelectedExpression(ExpiringPointer<ExpressionModelHandle> model) {
|
||||||
// Invalidate the sequences context cache
|
// Invalidate the sequences context cache
|
||||||
App::app()->localContext()->resetCache();
|
App::app()->localContext()->resetCache();
|
||||||
Sequence * sequence = static_cast<Sequence *>(model.pointer());
|
Shared::Sequence * sequence = static_cast<Shared::Sequence *>(model.pointer());
|
||||||
switch (sequenceDefinitionForRow(selectedRow())) {
|
switch (sequenceDefinitionForRow(selectedRow())) {
|
||||||
case 1:
|
case 1:
|
||||||
if (sequence->firstInitialConditionExpressionClone().isUninitialized()) {
|
if (sequence->firstInitialConditionExpressionClone().isUninitialized()) {
|
||||||
|
|||||||
@@ -2,8 +2,8 @@
|
|||||||
#define SEQUENCE_LIST_CONTROLLER_H
|
#define SEQUENCE_LIST_CONTROLLER_H
|
||||||
|
|
||||||
#include <escher.h>
|
#include <escher.h>
|
||||||
#include "../sequence_title_cell.h"
|
#include "../../shared/sequence_title_cell.h"
|
||||||
#include "../sequence_store.h"
|
#include "../../shared/sequence_store.h"
|
||||||
#include "../../shared/function_expression_cell.h"
|
#include "../../shared/function_expression_cell.h"
|
||||||
#include "../../shared/function_list_controller.h"
|
#include "../../shared/function_list_controller.h"
|
||||||
#include "../../shared/input_event_handler_delegate.h"
|
#include "../../shared/input_event_handler_delegate.h"
|
||||||
@@ -40,9 +40,9 @@ private:
|
|||||||
void reinitSelectedExpression(Shared::ExpiringPointer<Shared::ExpressionModelHandle> model) override;
|
void reinitSelectedExpression(Shared::ExpiringPointer<Shared::ExpressionModelHandle> model) override;
|
||||||
void editExpression(Ion::Events::Event event) override;
|
void editExpression(Ion::Events::Event event) override;
|
||||||
bool removeModelRow(Ion::Storage::Record record) override;
|
bool removeModelRow(Ion::Storage::Record record) override;
|
||||||
SequenceStore * modelStore() override;
|
Shared::SequenceStore * modelStore() override;
|
||||||
constexpr static int k_maxNumberOfRows = 3*MaxNumberOfSequences;
|
constexpr static int k_maxNumberOfRows = 3*Shared::MaxNumberOfSequences;
|
||||||
SequenceTitleCell m_sequenceTitleCells[k_maxNumberOfRows];
|
Shared::SequenceTitleCell m_sequenceTitleCells[k_maxNumberOfRows];
|
||||||
Shared::FunctionExpressionCell m_expressionCells[k_maxNumberOfRows];
|
Shared::FunctionExpressionCell m_expressionCells[k_maxNumberOfRows];
|
||||||
ListParameterController m_parameterController;
|
ListParameterController m_parameterController;
|
||||||
TypeParameterController m_typeParameterController;
|
TypeParameterController m_typeParameterController;
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
#include "list_controller.h"
|
#include "list_controller.h"
|
||||||
#include "../app.h"
|
#include "../app.h"
|
||||||
#include "../../shared/poincare_helpers.h"
|
#include "../../shared/poincare_helpers.h"
|
||||||
|
#include <apps/i18n.h>
|
||||||
|
|
||||||
using namespace Poincare;
|
using namespace Poincare;
|
||||||
using namespace Shared;
|
using namespace Shared;
|
||||||
@@ -67,7 +68,7 @@ bool ListParameterController::textFieldShouldFinishEditing(TextField * textField
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool ListParameterController::textFieldDidFinishEditing(TextField * textField, const char * text, Ion::Events::Event event) {
|
bool ListParameterController::textFieldDidFinishEditing(TextField * textField, const char * text, Ion::Events::Event event) {
|
||||||
static float maxFirstIndex = std::pow(10.0f, Sequence::k_initialRankNumberOfDigits) - 1.0f;
|
static float maxFirstIndex = std::pow(10.0f, Shared::Sequence::k_initialRankNumberOfDigits) - 1.0f;
|
||||||
/* -1 to take into account a double recursive sequence, which has
|
/* -1 to take into account a double recursive sequence, which has
|
||||||
* SecondIndex = FirstIndex + 1 */
|
* SecondIndex = FirstIndex + 1 */
|
||||||
double floatBody;
|
double floatBody;
|
||||||
@@ -141,8 +142,8 @@ void ListParameterController::willDisplayCellForIndex(HighlightCell * cell, int
|
|||||||
if (myCell->isEditing()) {
|
if (myCell->isEditing()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
char buffer[Sequence::k_initialRankNumberOfDigits+1];
|
char buffer[Shared::Sequence::k_initialRankNumberOfDigits+1];
|
||||||
Poincare::Integer(sequence()->initialRank()).serialize(buffer, Sequence::k_initialRankNumberOfDigits+1);
|
Poincare::Integer(sequence()->initialRank()).serialize(buffer, Shared::Sequence::k_initialRankNumberOfDigits+1);
|
||||||
myCell->setAccessoryText(buffer);
|
myCell->setAccessoryText(buffer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -155,7 +156,7 @@ int ListParameterController::totalNumberOfCells() const {
|
|||||||
};
|
};
|
||||||
|
|
||||||
bool ListParameterController::hasInitialRankRow() const {
|
bool ListParameterController::hasInitialRankRow() const {
|
||||||
return !m_record.isNull() && const_cast<ListParameterController *>(this)->sequence()->type() != Sequence::Type::Explicit;
|
return !m_record.isNull() && const_cast<ListParameterController *>(this)->sequence()->type() != Shared::Sequence::Type::Explicit;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,8 +3,8 @@
|
|||||||
|
|
||||||
#include "../../shared/list_parameter_controller.h"
|
#include "../../shared/list_parameter_controller.h"
|
||||||
#include "../../shared/parameter_text_field_delegate.h"
|
#include "../../shared/parameter_text_field_delegate.h"
|
||||||
#include "../sequence.h"
|
#include "../../shared/sequence.h"
|
||||||
#include "../sequence_store.h"
|
#include "../../shared/sequence_store.h"
|
||||||
#include "type_parameter_controller.h"
|
#include "type_parameter_controller.h"
|
||||||
|
|
||||||
namespace Sequence {
|
namespace Sequence {
|
||||||
@@ -31,7 +31,7 @@ private:
|
|||||||
constexpr static int k_totalNumberOfCell = 4;
|
constexpr static int k_totalNumberOfCell = 4;
|
||||||
#endif
|
#endif
|
||||||
int totalNumberOfCells() const override;
|
int totalNumberOfCells() const override;
|
||||||
Sequence * sequence() { return static_cast<Sequence *>(function().pointer()); }
|
Shared::Sequence * sequence() { return static_cast<Shared::Sequence *>(function().pointer()); }
|
||||||
bool hasInitialRankRow() const;
|
bool hasInitialRankRow() const;
|
||||||
MessageTableCellWithChevronAndExpression m_typeCell;
|
MessageTableCellWithChevronAndExpression m_typeCell;
|
||||||
MessageTableCellWithEditableText m_initialRankCell;
|
MessageTableCellWithEditableText m_initialRankCell;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#include "sequence_toolbox.h"
|
#include "sequence_toolbox.h"
|
||||||
#include "../sequence_store.h"
|
#include "../../shared/sequence_store.h"
|
||||||
#include <poincare/layout_helper.h>
|
#include <poincare/layout_helper.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <poincare/code_point_layout.h>
|
#include <poincare/code_point_layout.h>
|
||||||
@@ -75,8 +75,8 @@ void SequenceToolbox::buildExtraCellsLayouts(const char * sequenceName, int recu
|
|||||||
* There is a special case for double recurrent sequences because we do not
|
* There is a special case for double recurrent sequences because we do not
|
||||||
* want to parse symbols u(n+2), v(n+2) or w(n+2). */
|
* want to parse symbols u(n+2), v(n+2) or w(n+2). */
|
||||||
m_numberOfAddedCells = 0;
|
m_numberOfAddedCells = 0;
|
||||||
int sequenceIndex = SequenceStore::sequenceIndexForName(sequenceName[0]);
|
int sequenceIndex = Shared::SequenceStore::sequenceIndexForName(sequenceName[0]);
|
||||||
for (int i = 0; i < MaxNumberOfSequences; i++) {
|
for (int i = 0; i < Shared::MaxNumberOfSequences; i++) {
|
||||||
for (int j = 0; j < recurrenceDepth+1; j++) {
|
for (int j = 0; j < recurrenceDepth+1; j++) {
|
||||||
// When defining u(n+1) for ex, don't add [u|v|w](n+2) or u(n+1)
|
// When defining u(n+1) for ex, don't add [u|v|w](n+2) or u(n+1)
|
||||||
if (j == 2 || (j == recurrenceDepth && sequenceIndex == i)) {
|
if (j == 2 || (j == recurrenceDepth && sequenceIndex == i)) {
|
||||||
@@ -84,7 +84,7 @@ void SequenceToolbox::buildExtraCellsLayouts(const char * sequenceName, int recu
|
|||||||
}
|
}
|
||||||
const char * indice = j == 0 ? "n" : "n+1";
|
const char * indice = j == 0 ? "n" : "n+1";
|
||||||
m_addedCellLayout[m_numberOfAddedCells++] = HorizontalLayout::Builder(
|
m_addedCellLayout[m_numberOfAddedCells++] = HorizontalLayout::Builder(
|
||||||
CodePointLayout::Builder(SequenceStore::k_sequenceNames[i][0], KDFont::LargeFont),
|
CodePointLayout::Builder(Shared::SequenceStore::k_sequenceNames[i][0], KDFont::LargeFont),
|
||||||
VerticalOffsetLayout::Builder(LayoutHelper::String(indice, strlen(indice), KDFont::LargeFont), VerticalOffsetLayoutNode::Position::Subscript)
|
VerticalOffsetLayout::Builder(LayoutHelper::String(indice, strlen(indice), KDFont::LargeFont), VerticalOffsetLayoutNode::Position::Subscript)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
#include <poincare/layout_helper.h>
|
#include <poincare/layout_helper.h>
|
||||||
#include <poincare/code_point_layout.h>
|
#include <poincare/code_point_layout.h>
|
||||||
#include <poincare/vertical_offset_layout.h>
|
#include <poincare/vertical_offset_layout.h>
|
||||||
|
#include <apps/i18n.h>
|
||||||
|
|
||||||
using namespace Poincare;
|
using namespace Poincare;
|
||||||
using namespace Shared;
|
using namespace Shared;
|
||||||
@@ -55,14 +56,14 @@ void TypeParameterController::didBecomeFirstResponder() {
|
|||||||
bool TypeParameterController::handleEvent(Ion::Events::Event event) {
|
bool TypeParameterController::handleEvent(Ion::Events::Event event) {
|
||||||
if (event == Ion::Events::OK || event == Ion::Events::EXE) {
|
if (event == Ion::Events::OK || event == Ion::Events::EXE) {
|
||||||
if (!m_record.isNull()) {
|
if (!m_record.isNull()) {
|
||||||
Sequence::Type sequenceType = (Sequence::Type)selectedRow();
|
Shared::Sequence::Type sequenceType = (Shared::Sequence::Type)selectedRow();
|
||||||
if (sequence()->type() != sequenceType) {
|
if (sequence()->type() != sequenceType) {
|
||||||
m_listController->selectPreviousNewSequenceCell();
|
m_listController->selectPreviousNewSequenceCell();
|
||||||
sequence()->setType(sequenceType);
|
sequence()->setType(sequenceType);
|
||||||
// Invalidate sequence context cache when changing sequence type
|
// Invalidate sequence context cache when changing sequence type
|
||||||
App::app()->localContext()->resetCache();
|
App::app()->localContext()->resetCache();
|
||||||
// Reset the first index if the new type is "Explicit"
|
// Reset the first index if the new type is "Explicit"
|
||||||
if (sequenceType == Sequence::Type::Explicit) {
|
if (sequenceType == Shared::Sequence::Type::Explicit) {
|
||||||
sequence()->setInitialRank(0);
|
sequence()->setInitialRank(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -79,8 +80,8 @@ bool TypeParameterController::handleEvent(Ion::Events::Event event) {
|
|||||||
}
|
}
|
||||||
assert(error == Ion::Storage::Record::ErrorStatus::None);
|
assert(error == Ion::Storage::Record::ErrorStatus::None);
|
||||||
Ion::Storage::Record record = sequenceStore()->recordAtIndex(sequenceStore()->numberOfModels()-1);
|
Ion::Storage::Record record = sequenceStore()->recordAtIndex(sequenceStore()->numberOfModels()-1);
|
||||||
Sequence * newSequence = sequenceStore()->modelForRecord(record);
|
Shared::Sequence * newSequence = sequenceStore()->modelForRecord(record);
|
||||||
newSequence->setType((Sequence::Type)selectedRow());
|
newSequence->setType((Shared::Sequence::Type)selectedRow());
|
||||||
Container::activeApp()->dismissModalViewController();
|
Container::activeApp()->dismissModalViewController();
|
||||||
m_listController->editExpression(0, Ion::Events::OK);
|
m_listController->editExpression(0, Ion::Events::OK);
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
#include <escher.h>
|
#include <escher.h>
|
||||||
#include <poincare/layout.h>
|
#include <poincare/layout.h>
|
||||||
#include "../sequence_store.h"
|
#include "../../shared/sequence_store.h"
|
||||||
|
|
||||||
namespace Sequence {
|
namespace Sequence {
|
||||||
|
|
||||||
@@ -28,11 +28,11 @@ public:
|
|||||||
void setRecord(Ion::Storage::Record record);
|
void setRecord(Ion::Storage::Record record);
|
||||||
private:
|
private:
|
||||||
StackViewController * stackController() const;
|
StackViewController * stackController() const;
|
||||||
Sequence * sequence() {
|
Shared::Sequence * sequence() {
|
||||||
assert(!m_record.isNull());
|
assert(!m_record.isNull());
|
||||||
return sequenceStore()->modelForRecord(m_record);
|
return sequenceStore()->modelForRecord(m_record);
|
||||||
}
|
}
|
||||||
SequenceStore * sequenceStore();
|
Shared::SequenceStore * sequenceStore();
|
||||||
constexpr static int k_totalNumberOfCell = 3;
|
constexpr static int k_totalNumberOfCell = 3;
|
||||||
ExpressionTableCellWithPointer m_explicitCell;
|
ExpressionTableCellWithPointer m_explicitCell;
|
||||||
ExpressionTableCellWithPointer m_singleRecurrenceCell;
|
ExpressionTableCellWithPointer m_singleRecurrenceCell;
|
||||||
|
|||||||
@@ -3,14 +3,13 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include "../sequence_store.h"
|
#include "../../shared/sequence_store.h"
|
||||||
#include "../sequence_context.h"
|
#include "../../shared/sequence_context.h"
|
||||||
#include "../../shared/poincare_helpers.h"
|
#include "../../shared/poincare_helpers.h"
|
||||||
|
|
||||||
using namespace Poincare;
|
using namespace Poincare;
|
||||||
using namespace Shared;
|
|
||||||
|
|
||||||
namespace Sequence {
|
namespace Shared {
|
||||||
|
|
||||||
Sequence * addSequence(SequenceStore * store, Sequence::Type type, const char * definition, const char * condition1, const char * condition2, Context * context) {
|
Sequence * addSequence(SequenceStore * store, Sequence::Type type, const char * definition, const char * condition1, const char * condition2, Context * context) {
|
||||||
Ion::Storage::Record::ErrorStatus err = store->addEmptyModel();
|
Ion::Storage::Record::ErrorStatus err = store->addEmptyModel();
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include "../../shared/poincare_helpers.h"
|
#include "../../shared/poincare_helpers.h"
|
||||||
#include "../app.h"
|
#include "../app.h"
|
||||||
|
#include <apps/i18n.h>
|
||||||
|
|
||||||
using namespace Poincare;
|
using namespace Poincare;
|
||||||
|
|
||||||
@@ -51,8 +52,8 @@ void ValuesController::willDisplayCellAtLocation(HighlightCell * cell, int i, in
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (typeAtLocation(i,j) == k_functionTitleCellType) {
|
if (typeAtLocation(i,j) == k_functionTitleCellType) {
|
||||||
SequenceTitleCell * myCell = (SequenceTitleCell *)cell;
|
Shared::SequenceTitleCell * myCell = (Shared::SequenceTitleCell *)cell;
|
||||||
Sequence * sequence = functionStore()->modelForRecord(recordAtColumn(i));
|
Shared::Sequence * sequence = functionStore()->modelForRecord(recordAtColumn(i));
|
||||||
myCell->setLayout(sequence->nameLayout());
|
myCell->setLayout(sequence->nameLayout());
|
||||||
myCell->setColor(sequence->color());
|
myCell->setColor(sequence->color());
|
||||||
}
|
}
|
||||||
@@ -95,7 +96,7 @@ Shared::Interval * ValuesController::intervalAtColumn(int columnIndex) {
|
|||||||
void ValuesController::fillMemoizedBuffer(int column, int row, int index) {
|
void ValuesController::fillMemoizedBuffer(int column, int row, int index) {
|
||||||
char * buffer = memoizedBufferAtIndex(index);
|
char * buffer = memoizedBufferAtIndex(index);
|
||||||
double abscissa = intervalAtColumn(column)->element(row-1); // Subtract the title row from row to get the element index
|
double abscissa = intervalAtColumn(column)->element(row-1); // Subtract the title row from row to get the element index
|
||||||
Shared::ExpiringPointer<Sequence> sequence = functionStore()->modelForRecord(recordAtColumn(column));
|
Shared::ExpiringPointer<Shared::Sequence> sequence = functionStore()->modelForRecord(recordAtColumn(column));
|
||||||
Coordinate2D<double> xy = sequence->evaluateXYAtParameter(abscissa, textFieldDelegateApp()->localContext());
|
Coordinate2D<double> xy = sequence->evaluateXYAtParameter(abscissa, textFieldDelegateApp()->localContext());
|
||||||
Shared::PoincareHelpers::ConvertFloatToText<double>(xy.x2(), buffer, k_valuesCellBufferSize, Preferences::LargeNumberOfSignificantDigits);
|
Shared::PoincareHelpers::ConvertFloatToText<double>(xy.x2(), buffer, k_valuesCellBufferSize, Preferences::LargeNumberOfSignificantDigits);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
#ifndef SEQUENCE_VALUES_CONTROLLER_H
|
#ifndef SEQUENCE_VALUES_CONTROLLER_H
|
||||||
#define SEQUENCE_VALUES_CONTROLLER_H
|
#define SEQUENCE_VALUES_CONTROLLER_H
|
||||||
|
|
||||||
#include "../sequence_store.h"
|
#include "../../shared/sequence_store.h"
|
||||||
#include "../sequence_title_cell.h"
|
#include "../../shared/sequence_title_cell.h"
|
||||||
#include "../../shared/values_controller.h"
|
#include "../../shared/values_controller.h"
|
||||||
#include "interval_parameter_controller.h"
|
#include "interval_parameter_controller.h"
|
||||||
|
|
||||||
@@ -46,7 +46,7 @@ private:
|
|||||||
bool setDataAtLocation(double floatBody, int columnIndex, int rowIndex) override;
|
bool setDataAtLocation(double floatBody, int columnIndex, int rowIndex) override;
|
||||||
|
|
||||||
// Model getters
|
// Model getters
|
||||||
SequenceStore * functionStore() const override { return static_cast<SequenceStore *>(Shared::ValuesController::functionStore()); }
|
Shared::SequenceStore * functionStore() const override { return static_cast<Shared::SequenceStore *>(Shared::ValuesController::functionStore()); }
|
||||||
Shared::Interval * intervalAtColumn(int columnIndex) override;
|
Shared::Interval * intervalAtColumn(int columnIndex) override;
|
||||||
|
|
||||||
// Function evaluation memoization
|
// Function evaluation memoization
|
||||||
@@ -75,7 +75,7 @@ private:
|
|||||||
assert (j >= 0 && j < abscissaTitleCellsCount());
|
assert (j >= 0 && j < abscissaTitleCellsCount());
|
||||||
return &m_abscissaTitleCell;
|
return &m_abscissaTitleCell;
|
||||||
}
|
}
|
||||||
SequenceTitleCell * functionTitleCells(int j) override {
|
Shared::SequenceTitleCell * functionTitleCells(int j) override {
|
||||||
assert(j >= 0 && j < k_maxNumberOfDisplayableSequences);
|
assert(j >= 0 && j < k_maxNumberOfDisplayableSequences);
|
||||||
return &m_sequenceTitleCells[j];
|
return &m_sequenceTitleCells[j];
|
||||||
}
|
}
|
||||||
@@ -85,7 +85,7 @@ private:
|
|||||||
}
|
}
|
||||||
|
|
||||||
SelectableTableView m_selectableTableView;
|
SelectableTableView m_selectableTableView;
|
||||||
SequenceTitleCell m_sequenceTitleCells[k_maxNumberOfDisplayableSequences];
|
Shared::SequenceTitleCell m_sequenceTitleCells[k_maxNumberOfDisplayableSequences];
|
||||||
EvenOddBufferTextCell m_floatCells[k_maxNumberOfDisplayableCells];
|
EvenOddBufferTextCell m_floatCells[k_maxNumberOfDisplayableCells];
|
||||||
EvenOddMessageTextCell m_abscissaTitleCell;
|
EvenOddMessageTextCell m_abscissaTitleCell;
|
||||||
EvenOddEditableTextCell m_abscissaCells[k_maxNumberOfDisplayableRows];
|
EvenOddEditableTextCell m_abscissaCells[k_maxNumberOfDisplayableRows];
|
||||||
|
|||||||
@@ -16,6 +16,9 @@ app_shared_test_src = $(addprefix apps/shared/,\
|
|||||||
labeled_curve_view.cpp \
|
labeled_curve_view.cpp \
|
||||||
memoized_curve_view_range.cpp \
|
memoized_curve_view_range.cpp \
|
||||||
range_1D.cpp \
|
range_1D.cpp \
|
||||||
|
sequence.cpp\
|
||||||
|
sequence_context.cpp\
|
||||||
|
sequence_store.cpp\
|
||||||
toolbox_helpers.cpp \
|
toolbox_helpers.cpp \
|
||||||
zoom_and_pan_curve_view_controller.cpp \
|
zoom_and_pan_curve_view_controller.cpp \
|
||||||
zoom_curve_view_controller.cpp \
|
zoom_curve_view_controller.cpp \
|
||||||
@@ -26,6 +29,7 @@ app_shared_src = $(addprefix apps/shared/,\
|
|||||||
buffer_function_title_cell.cpp \
|
buffer_function_title_cell.cpp \
|
||||||
buffer_text_view_with_text_field.cpp \
|
buffer_text_view_with_text_field.cpp \
|
||||||
button_with_separator.cpp \
|
button_with_separator.cpp \
|
||||||
|
cache_context.cpp \
|
||||||
cursor_view.cpp \
|
cursor_view.cpp \
|
||||||
editable_cell_table_view_controller.cpp \
|
editable_cell_table_view_controller.cpp \
|
||||||
expression_field_delegate_app.cpp \
|
expression_field_delegate_app.cpp \
|
||||||
@@ -60,6 +64,10 @@ app_shared_src = $(addprefix apps/shared/,\
|
|||||||
range_parameter_controller.cpp \
|
range_parameter_controller.cpp \
|
||||||
regular_table_view_data_source.cpp \
|
regular_table_view_data_source.cpp \
|
||||||
round_cursor_view.cpp \
|
round_cursor_view.cpp \
|
||||||
|
sequence.cpp\
|
||||||
|
sequence_context.cpp\
|
||||||
|
sequence_store.cpp\
|
||||||
|
sequence_title_cell.cpp \
|
||||||
scrollable_multiple_expressions_view.cpp \
|
scrollable_multiple_expressions_view.cpp \
|
||||||
scrollable_two_expressions_cell.cpp \
|
scrollable_two_expressions_cell.cpp \
|
||||||
separable.cpp \
|
separable.cpp \
|
||||||
@@ -93,9 +101,11 @@ app_shared_test_src += $(addprefix apps/graph/,\
|
|||||||
continuous_function_store.cpp\
|
continuous_function_store.cpp\
|
||||||
)
|
)
|
||||||
|
|
||||||
app_shared_test_src += $(addprefix apps/sequence/,\
|
app_shared_test_src += $(addprefix apps/shared/,\
|
||||||
sequence.cpp\
|
cache_context.cpp \
|
||||||
sequence_store.cpp\
|
sequence.cpp \
|
||||||
|
sequence_context.cpp \
|
||||||
|
sequence_store.cpp \
|
||||||
)
|
)
|
||||||
|
|
||||||
tests_src += $(addprefix apps/shared/test/,\
|
tests_src += $(addprefix apps/shared/test/,\
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
using namespace Poincare;
|
using namespace Poincare;
|
||||||
|
|
||||||
namespace Sequence {
|
namespace Shared {
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
CacheContext<T>::CacheContext(Context * parentContext) :
|
CacheContext<T>::CacheContext(Context * parentContext) :
|
||||||
@@ -6,7 +6,7 @@
|
|||||||
#include <poincare/symbol.h>
|
#include <poincare/symbol.h>
|
||||||
#include "sequence_context.h"
|
#include "sequence_context.h"
|
||||||
|
|
||||||
namespace Sequence {
|
namespace Shared {
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
class CacheContext : public Poincare::ContextWithParent {
|
class CacheContext : public Poincare::ContextWithParent {
|
||||||
@@ -41,6 +41,8 @@ private:
|
|||||||
static Ion::Storage::Record::ErrorStatus SetExpressionForFunction(const Poincare::Expression & expression, const Poincare::SymbolAbstract & symbol, Ion::Storage::Record previousRecord);
|
static Ion::Storage::Record::ErrorStatus SetExpressionForFunction(const Poincare::Expression & expression, const Poincare::SymbolAbstract & symbol, Ion::Storage::Record previousRecord);
|
||||||
// Record getter
|
// Record getter
|
||||||
static Ion::Storage::Record SymbolAbstractRecordWithBaseName(const char * name);
|
static Ion::Storage::Record SymbolAbstractRecordWithBaseName(const char * name);
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,10 +12,9 @@
|
|||||||
#include <apps/i18n.h>
|
#include <apps/i18n.h>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
|
||||||
using namespace Shared;
|
|
||||||
using namespace Poincare;
|
using namespace Poincare;
|
||||||
|
|
||||||
namespace Sequence {
|
namespace Shared {
|
||||||
|
|
||||||
I18n::Message Sequence::parameterMessageName() const {
|
I18n::Message Sequence::parameterMessageName() const {
|
||||||
return I18n::Message::N;
|
return I18n::Message::N;
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
#include <emscripten.h>
|
#include <emscripten.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
namespace Sequence {
|
namespace Shared {
|
||||||
|
|
||||||
/* WARNING: after calling setType, setInitialRank, setContent, setFirstInitialConditionContent
|
/* WARNING: after calling setType, setInitialRank, setContent, setFirstInitialConditionContent
|
||||||
* or setSecondInitialConditionContent, the sequence context needs to
|
* or setSecondInitialConditionContent, the sequence context needs to
|
||||||
@@ -5,9 +5,8 @@
|
|||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
|
||||||
using namespace Poincare;
|
using namespace Poincare;
|
||||||
using namespace Shared;
|
|
||||||
|
|
||||||
namespace Sequence {
|
namespace Shared {
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
TemplatedSequenceContext<T>::TemplatedSequenceContext() :
|
TemplatedSequenceContext<T>::TemplatedSequenceContext() :
|
||||||
@@ -5,7 +5,7 @@
|
|||||||
#include <poincare/expression.h>
|
#include <poincare/expression.h>
|
||||||
#include <poincare/symbol.h>
|
#include <poincare/symbol.h>
|
||||||
|
|
||||||
namespace Sequence {
|
namespace Shared {
|
||||||
|
|
||||||
constexpr static int MaxRecurrenceDepth = 2;
|
constexpr static int MaxRecurrenceDepth = 2;
|
||||||
static constexpr int MaxNumberOfSequences = 3;
|
static constexpr int MaxNumberOfSequences = 3;
|
||||||
@@ -5,7 +5,7 @@ extern "C" {
|
|||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace Sequence {
|
namespace Shared {
|
||||||
|
|
||||||
constexpr const char * SequenceStore::k_sequenceNames[MaxNumberOfSequences];
|
constexpr const char * SequenceStore::k_sequenceNames[MaxNumberOfSequences];
|
||||||
|
|
||||||
@@ -7,7 +7,7 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <escher.h>
|
#include <escher.h>
|
||||||
|
|
||||||
namespace Sequence {
|
namespace Shared {
|
||||||
|
|
||||||
class SequenceStore : public Shared::FunctionStore {
|
class SequenceStore : public Shared::FunctionStore {
|
||||||
public:
|
public:
|
||||||
@@ -1,10 +1,9 @@
|
|||||||
#include "sequence_title_cell.h"
|
#include "sequence_title_cell.h"
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
using namespace Shared;
|
|
||||||
using namespace Poincare;
|
using namespace Poincare;
|
||||||
|
|
||||||
namespace Sequence {
|
namespace Shared {
|
||||||
|
|
||||||
SequenceTitleCell::SequenceTitleCell() :
|
SequenceTitleCell::SequenceTitleCell() :
|
||||||
Shared::FunctionTitleCell(Orientation::VerticalIndicator),
|
Shared::FunctionTitleCell(Orientation::VerticalIndicator),
|
||||||
@@ -4,7 +4,7 @@
|
|||||||
#include "../shared/function_title_cell.h"
|
#include "../shared/function_title_cell.h"
|
||||||
#include <poincare_layouts.h>
|
#include <poincare_layouts.h>
|
||||||
|
|
||||||
namespace Sequence {
|
namespace Shared {
|
||||||
|
|
||||||
class SequenceTitleCell : public Shared::FunctionTitleCell {
|
class SequenceTitleCell : public Shared::FunctionTitleCell {
|
||||||
public:
|
public:
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
#include <quiz.h>
|
#include <quiz.h>
|
||||||
#include "../continuous_function.h"
|
#include "../continuous_function.h"
|
||||||
#include "../../graph/continuous_function_store.h"
|
#include "../../graph/continuous_function_store.h"
|
||||||
#include "../../sequence/sequence.h"
|
#include "../sequence.h"
|
||||||
#include "../../sequence/sequence_store.h"
|
#include "../sequence_store.h"
|
||||||
|
|
||||||
namespace Shared {
|
namespace Shared {
|
||||||
|
|
||||||
@@ -14,12 +14,12 @@ void interactWithBaseRecordMember(F * fct) {
|
|||||||
(void) color; // Silence compilation warning about unused variable.
|
(void) color; // Silence compilation warning about unused variable.
|
||||||
}
|
}
|
||||||
|
|
||||||
void interactWithRecordMember(Sequence::SequenceStore * store, Ion::Storage::Record rec) {
|
void interactWithRecordMember(SequenceStore * store, Ion::Storage::Record rec) {
|
||||||
Sequence::Sequence * seq = store->modelForRecord(rec);
|
Sequence * seq = store->modelForRecord(rec);
|
||||||
/* Setting Sequence type will write record member m_initialConditionSizes,
|
/* Setting Sequence type will write record member m_initialConditionSizes,
|
||||||
* which has a 2-byte alignment */
|
* which has a 2-byte alignment */
|
||||||
seq->setType(Sequence::Sequence::Type::SingleRecurrence);
|
seq->setType(Sequence::Type::SingleRecurrence);
|
||||||
interactWithBaseRecordMember<Sequence::Sequence>(seq);
|
interactWithBaseRecordMember<Sequence>(seq);
|
||||||
}
|
}
|
||||||
|
|
||||||
void interactWithRecordMember(Graph::ContinuousFunctionStore * store, Ion::Storage::Record rec) {
|
void interactWithRecordMember(Graph::ContinuousFunctionStore * store, Ion::Storage::Record rec) {
|
||||||
@@ -73,7 +73,7 @@ QUIZ_CASE(alignment_handling) {
|
|||||||
* properly. It also ensures that the right test - load and store of
|
* properly. It also ensures that the right test - load and store of
|
||||||
* differently-aligned objects - is performed (if storage/record
|
* differently-aligned objects - is performed (if storage/record
|
||||||
* implementations change for instance). */
|
* implementations change for instance). */
|
||||||
testAlignmentHandlingFor<Sequence::SequenceStore>();
|
testAlignmentHandlingFor<SequenceStore>();
|
||||||
testAlignmentHandlingFor<Graph::ContinuousFunctionStore>();
|
testAlignmentHandlingFor<Graph::ContinuousFunctionStore>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
#include <poincare/serialization_helper.h>
|
#include <poincare/serialization_helper.h>
|
||||||
#include <poincare/parenthesis.h>
|
#include <poincare/parenthesis.h>
|
||||||
#include <poincare/complex.h>
|
#include <poincare/complex.h>
|
||||||
#include <apps/sequence/sequence.h>
|
#include <apps/shared/sequence.h>
|
||||||
|
|
||||||
namespace Poincare {
|
namespace Poincare {
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user