mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-03-19 05:40:38 +01:00
[apps/graph][apps/regression][app/sequence] Move model and range
versions to the snapshot Change-Id: I6ec56ab59d734c0c43a5df32462173c611cc68b3
This commit is contained in:
@@ -21,9 +21,9 @@ const Image * App::Descriptor::icon() {
|
||||
}
|
||||
|
||||
App::Snapshot::Snapshot() :
|
||||
Shared::FunctionApp::Snapshot::Snapshot(),
|
||||
m_functionStore(),
|
||||
m_graphRange(&m_cursor),
|
||||
m_cursor()
|
||||
m_graphRange(&m_cursor)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -48,10 +48,6 @@ InteractiveCurveViewRange * App::Snapshot::graphRange() {
|
||||
return &m_graphRange;
|
||||
}
|
||||
|
||||
CurveViewCursor * App::Snapshot::cursor() {
|
||||
return &m_cursor;
|
||||
}
|
||||
|
||||
void App::Snapshot::tidy() {
|
||||
m_functionStore.tidy();
|
||||
}
|
||||
@@ -63,7 +59,7 @@ App::App(Container * container, Snapshot * snapshot) :
|
||||
m_listFooter(&m_listHeader, &m_listController, &m_listController, ButtonRowController::Position::Bottom, ButtonRowController::Style::EmbossedGrey),
|
||||
m_listHeader(&m_listStackViewController, &m_listFooter, &m_listController),
|
||||
m_listStackViewController(&m_tabViewController, &m_listHeader),
|
||||
m_graphController(&m_graphAlternateEmptyViewController, snapshot->functionStore(), snapshot->graphRange(), snapshot->cursor(), &m_graphHeader),
|
||||
m_graphController(&m_graphAlternateEmptyViewController, snapshot->functionStore(), snapshot->graphRange(), snapshot->cursor(), snapshot->modelVersion(), snapshot->rangeVersion(), &m_graphHeader),
|
||||
m_graphAlternateEmptyViewController(&m_graphHeader, &m_graphController, &m_graphController),
|
||||
m_graphHeader(&m_graphStackViewController, &m_graphAlternateEmptyViewController, &m_graphController),
|
||||
m_graphStackViewController(&m_tabViewController, &m_graphHeader),
|
||||
|
||||
@@ -19,7 +19,7 @@ public:
|
||||
I18n::Message upperName() override;
|
||||
const Image * icon() override;
|
||||
};
|
||||
class Snapshot : public ::App::Snapshot {
|
||||
class Snapshot : public Shared::FunctionApp::Snapshot {
|
||||
public:
|
||||
Snapshot();
|
||||
App * unpack(Container * container) override;
|
||||
@@ -27,12 +27,10 @@ public:
|
||||
Descriptor * descriptor() override;
|
||||
CartesianFunctionStore * functionStore();
|
||||
Shared::InteractiveCurveViewRange * graphRange();
|
||||
Shared::CurveViewCursor * cursor();
|
||||
private:
|
||||
void tidy() override;
|
||||
CartesianFunctionStore m_functionStore;
|
||||
Shared::InteractiveCurveViewRange m_graphRange;
|
||||
Shared::CurveViewCursor m_cursor;
|
||||
};
|
||||
InputViewController * inputViewController() override;
|
||||
/* This local context can parse x. However, it always stores NAN
|
||||
|
||||
@@ -5,8 +5,8 @@ using namespace Poincare;
|
||||
|
||||
namespace Graph {
|
||||
|
||||
GraphController::GraphController(Responder * parentResponder, CartesianFunctionStore * functionStore, Shared::InteractiveCurveViewRange * curveViewRange, CurveViewCursor * cursor, ButtonRowController * header) :
|
||||
FunctionGraphController(parentResponder, header, curveViewRange, &m_view, cursor),
|
||||
GraphController::GraphController(Responder * parentResponder, CartesianFunctionStore * functionStore, Shared::InteractiveCurveViewRange * curveViewRange, CurveViewCursor * cursor, uint32_t * modelVersion, uint32_t * rangeVersion, ButtonRowController * header) :
|
||||
FunctionGraphController(parentResponder, header, curveViewRange, &m_view, cursor, modelVersion, rangeVersion),
|
||||
m_bannerView(),
|
||||
m_view(functionStore, curveViewRange, m_cursor, &m_bannerView, &m_cursorView),
|
||||
m_graphRange(curveViewRange),
|
||||
|
||||
@@ -13,7 +13,7 @@ namespace Graph {
|
||||
|
||||
class GraphController : public Shared::FunctionGraphController {
|
||||
public:
|
||||
GraphController(Responder * parentResponder, CartesianFunctionStore * functionStore, Shared::InteractiveCurveViewRange * curveViewRange, Shared::CurveViewCursor * cursor, ButtonRowController * header);
|
||||
GraphController(Responder * parentResponder, CartesianFunctionStore * functionStore, Shared::InteractiveCurveViewRange * curveViewRange, Shared::CurveViewCursor * cursor, uint32_t * modelVersion, uint32_t * rangeVersion, ButtonRowController * header);
|
||||
I18n::Message emptyMessage() override;
|
||||
private:
|
||||
BannerView * bannerView() override;
|
||||
|
||||
@@ -18,6 +18,14 @@ const Image * App::Descriptor::icon() {
|
||||
return ImageStore::RegressionIcon;
|
||||
}
|
||||
|
||||
App::Snapshot::Snapshot() :
|
||||
m_store(),
|
||||
m_cursor(),
|
||||
m_modelVersion(0),
|
||||
m_rangeVersion(0)
|
||||
{
|
||||
}
|
||||
|
||||
App * App::Snapshot::unpack(Container * container) {
|
||||
return new App(container, this);
|
||||
}
|
||||
@@ -39,12 +47,20 @@ CurveViewCursor * App::Snapshot::cursor() {
|
||||
return &m_cursor;
|
||||
}
|
||||
|
||||
uint32_t * App::Snapshot::modelVersion() {
|
||||
return &m_modelVersion;
|
||||
}
|
||||
|
||||
uint32_t * App::Snapshot::rangeVersion() {
|
||||
return &m_rangeVersion;
|
||||
}
|
||||
|
||||
App::App(Container * container, Snapshot * snapshot) :
|
||||
TextFieldDelegateApp(container, snapshot, &m_tabViewController),
|
||||
m_calculationController(&m_calculationAlternateEmptyViewController, &m_calculationHeader, snapshot->store()),
|
||||
m_calculationAlternateEmptyViewController(&m_calculationHeader, &m_calculationController, &m_calculationController),
|
||||
m_calculationHeader(&m_tabViewController, &m_calculationAlternateEmptyViewController, &m_calculationController),
|
||||
m_graphController(&m_graphAlternateEmptyViewController, &m_graphHeader, snapshot->store(), snapshot->cursor()),
|
||||
m_graphController(&m_graphAlternateEmptyViewController, &m_graphHeader, snapshot->store(), snapshot->cursor(), snapshot->modelVersion(), snapshot->rangeVersion()),
|
||||
m_graphAlternateEmptyViewController(&m_graphHeader, &m_graphController, &m_graphController),
|
||||
m_graphHeader(&m_graphStackViewController, &m_graphAlternateEmptyViewController, &m_graphController),
|
||||
m_graphStackViewController(&m_tabViewController, &m_graphHeader),
|
||||
|
||||
@@ -20,14 +20,19 @@ public:
|
||||
};
|
||||
class Snapshot : public ::App::Snapshot {
|
||||
public:
|
||||
Snapshot();
|
||||
App * unpack(Container * container) override;
|
||||
void reset() override;
|
||||
Descriptor * descriptor() override;
|
||||
Store * store();
|
||||
Shared::CurveViewCursor * cursor();
|
||||
uint32_t * modelVersion();
|
||||
uint32_t * rangeVersion();
|
||||
private:
|
||||
Store m_store;
|
||||
Shared::CurveViewCursor m_cursor;
|
||||
uint32_t m_modelVersion;
|
||||
uint32_t m_rangeVersion;
|
||||
};
|
||||
private:
|
||||
App(Container * container, Snapshot * snapshot);
|
||||
|
||||
@@ -6,8 +6,8 @@ using namespace Shared;
|
||||
|
||||
namespace Regression {
|
||||
|
||||
GraphController::GraphController(Responder * parentResponder, ButtonRowController * header, Store * store, CurveViewCursor * cursor) :
|
||||
InteractiveCurveViewController(parentResponder, header, store, &m_view, cursor),
|
||||
GraphController::GraphController(Responder * parentResponder, ButtonRowController * header, Store * store, CurveViewCursor * cursor, uint32_t * modelVersion, uint32_t * rangeVersion) :
|
||||
InteractiveCurveViewController(parentResponder, header, store, &m_view, cursor, modelVersion, rangeVersion),
|
||||
m_bannerView(),
|
||||
m_view(store, m_cursor, &m_bannerView, &m_cursorView),
|
||||
m_store(store),
|
||||
|
||||
@@ -15,7 +15,7 @@ namespace Regression {
|
||||
class GraphController : public Shared::InteractiveCurveViewController {
|
||||
|
||||
public:
|
||||
GraphController(Responder * parentResponder, ButtonRowController * header, Store * store, Shared::CurveViewCursor * cursor);
|
||||
GraphController(Responder * parentResponder, ButtonRowController * header, Store * store, Shared::CurveViewCursor * cursor, uint32_t * modelVersion, uint32_t * rangeVersion);
|
||||
ViewController * initialisationParameterController() override;
|
||||
bool isEmpty() const override;
|
||||
I18n::Message emptyMessage() override;
|
||||
|
||||
@@ -19,9 +19,9 @@ const Image * App::Descriptor::icon() {
|
||||
}
|
||||
|
||||
App::Snapshot::Snapshot() :
|
||||
Shared::FunctionApp::Snapshot::Snapshot(),
|
||||
m_sequenceStore(),
|
||||
m_graphRange(&m_cursor),
|
||||
m_cursor()
|
||||
m_graphRange(&m_cursor)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -46,10 +46,6 @@ CurveViewRange * App::Snapshot::graphRange() {
|
||||
return &m_graphRange;
|
||||
}
|
||||
|
||||
Shared::CurveViewCursor * App::Snapshot::cursor() {
|
||||
return &m_cursor;
|
||||
}
|
||||
|
||||
void App::Snapshot::tidy() {
|
||||
m_sequenceStore.tidy();
|
||||
}
|
||||
@@ -61,7 +57,7 @@ App::App(Container * container, Snapshot * snapshot) :
|
||||
m_listFooter(&m_listHeader, &m_listController, &m_listController, ButtonRowController::Position::Bottom, ButtonRowController::Style::EmbossedGrey),
|
||||
m_listHeader(nullptr, &m_listFooter, &m_listController),
|
||||
m_listStackViewController(&m_tabViewController, &m_listHeader),
|
||||
m_graphController(&m_graphAlternateEmptyViewController, snapshot->sequenceStore(), snapshot->graphRange(), snapshot->cursor(), &m_graphHeader),
|
||||
m_graphController(&m_graphAlternateEmptyViewController, snapshot->sequenceStore(), snapshot->graphRange(), snapshot->cursor(), snapshot->modelVersion(), snapshot->rangeVersion(), &m_graphHeader),
|
||||
m_graphAlternateEmptyViewController(&m_graphHeader, &m_graphController, &m_graphController),
|
||||
m_graphHeader(&m_graphStackViewController, &m_graphAlternateEmptyViewController, &m_graphController),
|
||||
m_graphStackViewController(&m_tabViewController, &m_graphHeader),
|
||||
|
||||
@@ -21,7 +21,7 @@ public:
|
||||
I18n::Message upperName() override;
|
||||
const Image * icon() override;
|
||||
};
|
||||
class Snapshot : public ::App::Snapshot {
|
||||
class Snapshot : public Shared::FunctionApp::Snapshot {
|
||||
public:
|
||||
Snapshot();
|
||||
App * unpack(Container * container) override;
|
||||
@@ -29,12 +29,10 @@ public:
|
||||
Descriptor * descriptor() override;
|
||||
SequenceStore * sequenceStore();
|
||||
CurveViewRange * graphRange();
|
||||
Shared::CurveViewCursor * cursor();
|
||||
private:
|
||||
void tidy() override;
|
||||
SequenceStore m_sequenceStore;
|
||||
CurveViewRange m_graphRange;
|
||||
Shared::CurveViewCursor m_cursor;
|
||||
};
|
||||
InputViewController * inputViewController() override;
|
||||
Poincare::Context * localContext() override;
|
||||
|
||||
@@ -4,8 +4,8 @@ using namespace Shared;
|
||||
|
||||
namespace Sequence {
|
||||
|
||||
GraphController::GraphController(Responder * parentResponder, SequenceStore * sequenceStore, CurveViewRange * graphRange, CurveViewCursor * cursor, ButtonRowController * header) :
|
||||
FunctionGraphController(parentResponder, header, graphRange, &m_view, cursor),
|
||||
GraphController::GraphController(Responder * parentResponder, SequenceStore * sequenceStore, CurveViewRange * graphRange, CurveViewCursor * cursor, uint32_t * modelVersion, uint32_t * rangeVersion, ButtonRowController * header) :
|
||||
FunctionGraphController(parentResponder, header, graphRange, &m_view, cursor, modelVersion, rangeVersion),
|
||||
m_bannerView(),
|
||||
m_view(sequenceStore, graphRange, m_cursor, &m_bannerView, &m_cursorView),
|
||||
m_graphRange(graphRange),
|
||||
|
||||
@@ -13,7 +13,7 @@ namespace Sequence {
|
||||
|
||||
class GraphController : public Shared::FunctionGraphController {
|
||||
public:
|
||||
GraphController(Responder * parentResponder, SequenceStore * sequenceStore, CurveViewRange * graphRange, Shared::CurveViewCursor * cursor, ButtonRowController * header);
|
||||
GraphController(Responder * parentResponder, SequenceStore * sequenceStore, CurveViewRange * graphRange, Shared::CurveViewCursor * cursor, uint32_t * modelVersion, uint32_t * rangeVersion, ButtonRowController * header);
|
||||
void viewWillAppear() override;
|
||||
I18n::Message emptyMessage() override;
|
||||
TermSumController * termSumController();
|
||||
|
||||
@@ -5,6 +5,25 @@ using namespace Poincare;
|
||||
|
||||
namespace Shared {
|
||||
|
||||
FunctionApp::Snapshot::Snapshot() :
|
||||
m_cursor(),
|
||||
m_modelVersion(0),
|
||||
m_rangeVersion(0)
|
||||
{
|
||||
}
|
||||
|
||||
CurveViewCursor * FunctionApp::Snapshot::cursor() {
|
||||
return &m_cursor;
|
||||
}
|
||||
|
||||
uint32_t * FunctionApp::Snapshot::modelVersion() {
|
||||
return &m_modelVersion;
|
||||
}
|
||||
|
||||
uint32_t * FunctionApp::Snapshot::rangeVersion() {
|
||||
return &m_rangeVersion;
|
||||
}
|
||||
|
||||
FunctionApp::FunctionApp(Container * container, Snapshot * snapshot, ViewController * rootViewController) :
|
||||
TextFieldDelegateApp(container, snapshot, rootViewController)
|
||||
{
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
|
||||
#include <poincare.h>
|
||||
#include "text_field_delegate_app.h"
|
||||
#include "curve_view_cursor.h"
|
||||
|
||||
class AppsContainer;
|
||||
|
||||
@@ -10,10 +11,23 @@ namespace Shared {
|
||||
|
||||
class FunctionApp : public TextFieldDelegateApp {
|
||||
public:
|
||||
FunctionApp(Container * container, Snapshot * snapshot, ViewController * rootViewController);
|
||||
class Snapshot : public ::App::Snapshot {
|
||||
public:
|
||||
Snapshot();
|
||||
CurveViewCursor * cursor();
|
||||
uint32_t * modelVersion();
|
||||
uint32_t * rangeVersion();
|
||||
protected:
|
||||
CurveViewCursor m_cursor;
|
||||
private:
|
||||
uint32_t m_modelVersion;
|
||||
uint32_t m_rangeVersion;
|
||||
};
|
||||
virtual ~FunctionApp() = default;
|
||||
virtual InputViewController * inputViewController() = 0;
|
||||
void willBecomeInactive() override;
|
||||
protected:
|
||||
FunctionApp(Container * container, Snapshot * snapshot, ViewController * rootViewController);
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -8,8 +8,8 @@ using namespace Poincare;
|
||||
|
||||
namespace Shared {
|
||||
|
||||
FunctionGraphController::FunctionGraphController(Responder * parentResponder, ButtonRowController * header, InteractiveCurveViewRange * interactiveRange, CurveView * curveView, CurveViewCursor * cursor) :
|
||||
InteractiveCurveViewController(parentResponder, header, interactiveRange, curveView, cursor),
|
||||
FunctionGraphController::FunctionGraphController(Responder * parentResponder, ButtonRowController * header, InteractiveCurveViewRange * interactiveRange, CurveView * curveView, CurveViewCursor * cursor, uint32_t * modelVersion, uint32_t * rangeVersion) :
|
||||
InteractiveCurveViewController(parentResponder, header, interactiveRange, curveView, cursor, modelVersion, rangeVersion),
|
||||
m_indexFunctionSelectedByCursor(0),
|
||||
m_initialisationParameterController(InitialisationParameterController(this, interactiveRange))
|
||||
{
|
||||
|
||||
@@ -12,7 +12,7 @@ namespace Shared {
|
||||
|
||||
class FunctionGraphController : public InteractiveCurveViewController, public InteractiveCurveViewRangeDelegate {
|
||||
public:
|
||||
FunctionGraphController(Responder * parentResponder, ButtonRowController * header, InteractiveCurveViewRange * interactiveRange, CurveView * curveView, CurveViewCursor * cursor);
|
||||
FunctionGraphController(Responder * parentResponder, ButtonRowController * header, InteractiveCurveViewRange * interactiveRange, CurveView * curveView, CurveViewCursor * cursor, uint32_t * modelVersion, uint32_t * rangeVersion);
|
||||
bool isEmpty() const override;
|
||||
ViewController * initialisationParameterController() override;
|
||||
void viewWillAppear() override;
|
||||
|
||||
@@ -7,13 +7,13 @@ using namespace Poincare;
|
||||
|
||||
namespace Shared {
|
||||
|
||||
InteractiveCurveViewController::InteractiveCurveViewController(Responder * parentResponder, ButtonRowController * header, InteractiveCurveViewRange * interactiveRange, CurveView * curveView, CurveViewCursor * cursor) :
|
||||
InteractiveCurveViewController::InteractiveCurveViewController(Responder * parentResponder, ButtonRowController * header, InteractiveCurveViewRange * interactiveRange, CurveView * curveView, CurveViewCursor * cursor, uint32_t * modelVersion, uint32_t * rangeVersion) :
|
||||
ViewController(parentResponder),
|
||||
ButtonRowDelegate(header, nullptr),
|
||||
m_cursor(cursor),
|
||||
m_cursorView(CursorView()),
|
||||
m_modelVersion(0),
|
||||
m_rangeVersion(0),
|
||||
m_modelVersion(modelVersion),
|
||||
m_rangeVersion(rangeVersion),
|
||||
m_rangeParameterController(this, interactiveRange),
|
||||
m_zoomParameterController(this, interactiveRange, curveView),
|
||||
m_rangeButton(this, I18n::Message::Axis, Invocation([](void * context, void * sender) {
|
||||
@@ -132,8 +132,8 @@ Responder * InteractiveCurveViewController::defaultController() {
|
||||
|
||||
void InteractiveCurveViewController::viewWillAppear() {
|
||||
uint32_t newModelVersion = modelVersion();
|
||||
if (m_modelVersion != newModelVersion) {
|
||||
m_modelVersion = newModelVersion;
|
||||
if (*m_modelVersion != newModelVersion) {
|
||||
*m_modelVersion = newModelVersion;
|
||||
initRangeParameters();
|
||||
/* Warning: init cursor parameter before reloading banner view. Indeed,
|
||||
* reloading banner view needs an updated cursor to load the right data. */
|
||||
@@ -141,8 +141,8 @@ void InteractiveCurveViewController::viewWillAppear() {
|
||||
centerCursorVertically();
|
||||
}
|
||||
uint32_t newRangeVersion = rangeVersion();
|
||||
if (m_rangeVersion != newRangeVersion) {
|
||||
m_rangeVersion = newRangeVersion;
|
||||
if (*m_rangeVersion != newRangeVersion) {
|
||||
*m_rangeVersion = newRangeVersion;
|
||||
if (!interactiveCurveViewRange()->isCursorVisible()) {
|
||||
initCursorParameters();
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ namespace Shared {
|
||||
|
||||
class InteractiveCurveViewController : public ViewController, public ButtonRowDelegate, public AlternateEmptyViewDelegate {
|
||||
public:
|
||||
InteractiveCurveViewController(Responder * parentResponder, ButtonRowController * header, InteractiveCurveViewRange * interactiveRange, CurveView * curveView, CurveViewCursor * cursor);
|
||||
InteractiveCurveViewController(Responder * parentResponder, ButtonRowController * header, InteractiveCurveViewRange * interactiveRange, CurveView * curveView, CurveViewCursor * cursor, uint32_t * modelVersion, uint32_t * rangeVersion);
|
||||
View * view() override;
|
||||
const char * title() override;
|
||||
bool handleEvent(Ion::Events::Event event) override;
|
||||
@@ -56,8 +56,8 @@ protected:
|
||||
CursorView m_cursorView;
|
||||
OkView m_okView;
|
||||
private:
|
||||
uint32_t m_modelVersion;
|
||||
uint32_t m_rangeVersion;
|
||||
uint32_t * m_modelVersion;
|
||||
uint32_t * m_rangeVersion;
|
||||
RangeParameterController m_rangeParameterController;
|
||||
ZoomParameterController m_zoomParameterController;
|
||||
Button m_rangeButton;
|
||||
|
||||
@@ -11,7 +11,6 @@ namespace Shared {
|
||||
|
||||
class TextFieldDelegateApp : public ::App, public TextFieldDelegate {
|
||||
public:
|
||||
TextFieldDelegateApp(Container * container, Snapshot * snapshot, ViewController * rootViewController);
|
||||
virtual ~TextFieldDelegateApp() = default;
|
||||
virtual Poincare::Context * localContext();
|
||||
AppsContainer * container();
|
||||
@@ -19,6 +18,8 @@ public:
|
||||
bool textFieldShouldFinishEditing(TextField * textField, Ion::Events::Event event) override;
|
||||
bool textFieldDidReceiveEvent(TextField * textField, Ion::Events::Event event) override;
|
||||
Toolbox * toolboxForTextField(TextField * textField) override;
|
||||
protected:
|
||||
TextFieldDelegateApp(Container * container, Snapshot * snapshot, ViewController * rootViewController);
|
||||
private:
|
||||
bool cursorInToken(TextField * textField, const char * token);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user