mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-03-18 21:30:38 +01:00
[apps] Graph: enable to specialize GraphController in different types
(Default, Tangent ...)
This commit is contained in:
committed by
EmilieNumworks
parent
6d7d957c8f
commit
0dec52a708
@@ -82,4 +82,8 @@ const char * App::XNT() {
|
||||
return "x";
|
||||
}
|
||||
|
||||
Responder * App::graphControllerParent() {
|
||||
return &m_graphAlternateEmptyViewController;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -34,6 +34,7 @@ public:
|
||||
};
|
||||
InputViewController * inputViewController() override;
|
||||
const char * XNT() override;
|
||||
Responder * graphControllerParent();
|
||||
private:
|
||||
App(Container * container, Snapshot * snapshot);
|
||||
ListController m_listController;
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#include "calculation_parameter_controller.h"
|
||||
#include "graph_controller.h"
|
||||
#include <assert.h>
|
||||
#include <cmath>
|
||||
|
||||
@@ -6,11 +7,12 @@ using namespace Shared;
|
||||
|
||||
namespace Graph {
|
||||
|
||||
CalculationParameterController::CalculationParameterController(Responder * parentResponder) :
|
||||
CalculationParameterController::CalculationParameterController(Responder * parentResponder, GraphController * graphController) :
|
||||
ViewController(parentResponder),
|
||||
m_selectableTableView(this, this, 0, 1, Metric::CommonTopMargin, Metric::CommonRightMargin,
|
||||
Metric::CommonBottomMargin, Metric::CommonLeftMargin, this),
|
||||
m_function(nullptr)
|
||||
m_function(nullptr),
|
||||
m_graphController(graphController)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -29,7 +31,19 @@ void CalculationParameterController::didBecomeFirstResponder() {
|
||||
|
||||
bool CalculationParameterController::handleEvent(Ion::Events::Event event) {
|
||||
if (event == Ion::Events::OK || event == Ion::Events::EXE) {
|
||||
return true;
|
||||
switch(selectedRow()) {
|
||||
case 4:
|
||||
{
|
||||
StackViewController * stack = (StackViewController *)parentResponder();
|
||||
stack->pop();
|
||||
stack->pop();
|
||||
m_graphController->setType(GraphController::Type::Tangent);
|
||||
stack->push(m_graphController);
|
||||
return true;
|
||||
}
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -7,9 +7,11 @@
|
||||
|
||||
namespace Graph {
|
||||
|
||||
class GraphController;
|
||||
|
||||
class CalculationParameterController : public ViewController, public SimpleListViewDataSource, public SelectableTableViewDataSource {
|
||||
public:
|
||||
CalculationParameterController(Responder * parentResponder);
|
||||
CalculationParameterController(Responder * parentResponder, GraphController * graphController);
|
||||
View * view() override;
|
||||
const char * title() override;
|
||||
bool handleEvent(Ion::Events::Event event) override;
|
||||
@@ -25,6 +27,7 @@ private:
|
||||
MessageTableCell m_cells[k_totalNumberOfCells];
|
||||
SelectableTableView m_selectableTableView;
|
||||
Shared::Function * m_function;
|
||||
GraphController * m_graphController;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#include "curve_parameter_controller.h"
|
||||
#include "graph_controller.h"
|
||||
#include "../../i18n.h"
|
||||
#include <assert.h>
|
||||
|
||||
@@ -6,13 +7,13 @@ using namespace Shared;
|
||||
|
||||
namespace Graph {
|
||||
|
||||
CurveParameterController::CurveParameterController(InteractiveCurveViewRange * graphRange, BannerView * bannerView, CurveViewCursor * cursor) :
|
||||
CurveParameterController::CurveParameterController(InteractiveCurveViewRange * graphRange, BannerView * bannerView, CurveViewCursor * cursor, GraphController * graphController) :
|
||||
FunctionCurveParameterController(graphRange, cursor),
|
||||
m_goToParameterController(this, graphRange, cursor, I18n::Message::X),
|
||||
m_bannerView(bannerView),
|
||||
m_calculationCell(I18n::Message::Compute),
|
||||
m_derivativeCell(I18n::Message::DerivateNumber),
|
||||
m_calculationParameterController(this)
|
||||
m_calculationParameterController(this, graphController)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -7,9 +7,11 @@
|
||||
|
||||
namespace Graph {
|
||||
|
||||
class GraphController;
|
||||
|
||||
class CurveParameterController : public Shared::FunctionCurveParameterController {
|
||||
public:
|
||||
CurveParameterController(Shared::InteractiveCurveViewRange * graphRange, BannerView * bannerView, Shared::CurveViewCursor * cursor);
|
||||
CurveParameterController(Shared::InteractiveCurveViewRange * graphRange, BannerView * bannerView, Shared::CurveViewCursor * cursor, GraphController * graphController);
|
||||
const char * title() override;
|
||||
bool handleEvent(Ion::Events::Event event) override;
|
||||
int numberOfRows() override;
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#include "graph_controller.h"
|
||||
#include "../app.h"
|
||||
|
||||
using namespace Shared;
|
||||
using namespace Poincare;
|
||||
@@ -10,12 +11,22 @@ GraphController::GraphController(Responder * parentResponder, CartesianFunctionS
|
||||
m_bannerView(),
|
||||
m_view(functionStore, curveViewRange, m_cursor, &m_bannerView, &m_cursorView),
|
||||
m_graphRange(curveViewRange),
|
||||
m_curveParameterController(curveViewRange, &m_bannerView, m_cursor),
|
||||
m_functionStore(functionStore)
|
||||
m_curveParameterController(curveViewRange, &m_bannerView, m_cursor, this),
|
||||
m_functionStore(functionStore),
|
||||
m_type(Type::Default)
|
||||
{
|
||||
m_graphRange->setDelegate(this);
|
||||
}
|
||||
|
||||
const char * GraphController::title() {
|
||||
switch(m_type) {
|
||||
case Type::Tangent:
|
||||
return I18n::translate(I18n::Message::Tangent);
|
||||
default:
|
||||
return I18n::translate(I18n::Message::GraphTab);
|
||||
}
|
||||
}
|
||||
|
||||
I18n::Message GraphController::emptyMessage() {
|
||||
if (m_functionStore->numberOfDefinedFunctions() == 0) {
|
||||
return I18n::Message::NoFunction;
|
||||
@@ -23,11 +34,30 @@ I18n::Message GraphController::emptyMessage() {
|
||||
return I18n::Message::NoActivatedFunction;
|
||||
}
|
||||
|
||||
bool GraphController::handleEvent(Ion::Events::Event event) {
|
||||
if (m_type == Type::Default || event == Ion::Events::Left || event == Ion::Events::Right || event == Ion::Events::Plus || event == Ion::Events::Minus) {
|
||||
return FunctionGraphController::handleEvent(event);
|
||||
}
|
||||
// TODO: handle for type != Type::Default
|
||||
if (m_type != Type::Default && event == Ion::Events::Back) {
|
||||
stackController()->handleEvent(event);
|
||||
setType(Type::Default);
|
||||
setParentResponder(static_cast<App *>(app())->graphControllerParent());
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void GraphController::setType(Type type) {
|
||||
m_type = type;
|
||||
}
|
||||
|
||||
BannerView * GraphController::bannerView() {
|
||||
return &m_bannerView;
|
||||
}
|
||||
|
||||
void GraphController::reloadBannerView() {
|
||||
// TODO: do something else if m_type == Type::tangent
|
||||
FunctionGraphController::reloadBannerView();
|
||||
if (!m_bannerView.displayDerivative()) {
|
||||
return;
|
||||
@@ -90,4 +120,11 @@ CurveParameterController * GraphController::curveParameterController() {
|
||||
return &m_curveParameterController;
|
||||
}
|
||||
|
||||
StackViewController * GraphController::stackController() const{
|
||||
if (m_type != Type::Default) {
|
||||
return (StackViewController *)(parentResponder());
|
||||
}
|
||||
return FunctionGraphController::stackController();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -13,8 +13,16 @@ namespace Graph {
|
||||
|
||||
class GraphController : public Shared::FunctionGraphController {
|
||||
public:
|
||||
enum class Type {
|
||||
Default,
|
||||
Tangent,
|
||||
Integral
|
||||
};
|
||||
GraphController(Responder * parentResponder, CartesianFunctionStore * functionStore, Shared::InteractiveCurveViewRange * curveViewRange, Shared::CurveViewCursor * cursor, uint32_t * modelVersion, uint32_t * rangeVersion, Poincare::Expression::AngleUnit * angleUnitVersion, ButtonRowController * header);
|
||||
const char * title() override;
|
||||
I18n::Message emptyMessage() override;
|
||||
bool handleEvent(Ion::Events::Event event) override;
|
||||
void setType(Type type);
|
||||
private:
|
||||
BannerView * bannerView() override;
|
||||
void reloadBannerView() override;
|
||||
@@ -24,11 +32,13 @@ private:
|
||||
CartesianFunctionStore * functionStore() const override;
|
||||
GraphView * functionGraphView() override;
|
||||
CurveParameterController * curveParameterController() override;
|
||||
StackViewController * stackController() const override;
|
||||
BannerView m_bannerView;
|
||||
GraphView m_view;
|
||||
Shared::InteractiveCurveViewRange * m_graphRange;
|
||||
CurveParameterController m_curveParameterController;
|
||||
CartesianFunctionStore * m_functionStore;
|
||||
Type m_type;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -171,7 +171,7 @@ void InteractiveCurveViewController::willExitResponderChain(Responder * nextFirs
|
||||
}
|
||||
|
||||
Responder * InteractiveCurveViewController::tabController() const{
|
||||
return (parentResponder()->parentResponder()->parentResponder()->parentResponder());
|
||||
return (stackController()->parentResponder());
|
||||
}
|
||||
|
||||
StackViewController * InteractiveCurveViewController::stackController() const{
|
||||
|
||||
@@ -39,7 +39,7 @@ protected:
|
||||
virtual BannerView * bannerView() = 0;
|
||||
virtual bool handleEnter() = 0;
|
||||
Responder * tabController() const;
|
||||
StackViewController * stackController() const;
|
||||
virtual StackViewController * stackController() const;
|
||||
virtual void reloadBannerView() = 0;
|
||||
virtual void initRangeParameters() = 0;
|
||||
virtual void initCursorParameters() = 0;
|
||||
|
||||
Reference in New Issue
Block a user