mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-19 00:37:25 +01:00
[apps/shared] Make the float parameter controllers a dynamic controller
view Change-Id: I216b7f6df15e5a406624ce3c1b0e892d0f871a6b
This commit is contained in:
@@ -68,19 +68,12 @@ void ParametersController::ContentView::layoutSubviews() {
|
||||
/* Parameters Controller */
|
||||
|
||||
ParametersController::ParametersController(Responder * parentResponder) :
|
||||
FloatParameterController(parentResponder, I18n::Message::Next),
|
||||
m_menuListCell{MessageTableCellWithEditableText(&m_selectableTableView, this, m_draftTextBuffer),
|
||||
MessageTableCellWithEditableText(&m_selectableTableView, this, m_draftTextBuffer)},
|
||||
m_contentView(ContentView(this, &m_selectableTableView)),
|
||||
FloatParameterController(parentResponder),
|
||||
m_law(nullptr),
|
||||
m_calculationController(CalculationController(nullptr))
|
||||
{
|
||||
}
|
||||
|
||||
View * ParametersController::view() {
|
||||
return &m_contentView;
|
||||
}
|
||||
|
||||
const char * ParametersController::title() {
|
||||
if (m_law != nullptr) {
|
||||
return I18n::translate(m_law->title());
|
||||
@@ -90,18 +83,15 @@ const char * ParametersController::title() {
|
||||
|
||||
void ParametersController::setLaw(Law * law) {
|
||||
m_law = law;
|
||||
if (m_law != nullptr) {
|
||||
m_contentView.setNumberOfParameters(m_law->numberOfParameter());
|
||||
}
|
||||
m_calculationController.setLaw(law);
|
||||
}
|
||||
|
||||
void ParametersController::viewWillAppear() {
|
||||
for (int i = 0; i < m_law->numberOfParameter(); i++) {
|
||||
m_previousParameters[i] = parameterAtIndex(i);
|
||||
m_contentView.parameterDefinitionAtIndex(i)->setMessage(m_law->parameterDefinitionAtIndex(i));
|
||||
contentView()->parameterDefinitionAtIndex(i)->setMessage(m_law->parameterDefinitionAtIndex(i));
|
||||
}
|
||||
m_contentView.layoutSubviews();
|
||||
contentView()->layoutSubviews();
|
||||
FloatParameterController::viewWillAppear();
|
||||
}
|
||||
|
||||
@@ -111,7 +101,7 @@ int ParametersController::numberOfRows() {
|
||||
|
||||
void ParametersController::willDisplayCellForIndex(HighlightCell * cell, int index) {
|
||||
if (index == numberOfRows()-1) {
|
||||
if (m_selectableTableView.selectedRow() != numberOfRows()-1) {
|
||||
if (m_selectableTableView->selectedRow() != numberOfRows()-1) {
|
||||
cell->setHighlighted(false);
|
||||
}
|
||||
return;
|
||||
@@ -124,13 +114,25 @@ void ParametersController::willDisplayCellForIndex(HighlightCell * cell, int ind
|
||||
HighlightCell * ParametersController::reusableParameterCell(int index, int type) {
|
||||
assert(index >= 0);
|
||||
assert(index < 2);
|
||||
return &m_menuListCell[index];
|
||||
return m_menuListCell[index];
|
||||
}
|
||||
|
||||
int ParametersController::reusableParameterCellCount(int type) {
|
||||
return m_law->numberOfParameter();
|
||||
}
|
||||
|
||||
void ParametersController::unloadView() {
|
||||
assert(m_selectableTableView != nullptr);
|
||||
delete m_selectableTableView;
|
||||
m_selectableTableView = nullptr;
|
||||
for (int i = 0; i < k_maxNumberOfCells; i++) {
|
||||
assert(m_menuListCell[i] != nullptr);
|
||||
delete m_menuListCell[i];
|
||||
m_menuListCell[i] = nullptr;
|
||||
}
|
||||
FloatParameterController::unloadView();
|
||||
}
|
||||
|
||||
float ParametersController::previousParameterAtIndex(int index) {
|
||||
assert(index >= 0);
|
||||
assert(index < 2);
|
||||
@@ -152,7 +154,7 @@ bool ParametersController::setParameterAtIndex(int parameterIndex, float f) {
|
||||
|
||||
bool ParametersController::textFieldDidFinishEditing(TextField * textField, const char * text) {
|
||||
if (FloatParameterController::textFieldDidFinishEditing(textField, text)) {
|
||||
m_selectableTableView.reloadData();
|
||||
m_selectableTableView->reloadData();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@@ -166,5 +168,31 @@ void ParametersController::buttonAction() {
|
||||
stack->push(&m_calculationController, KDColorWhite, Palette::SubTab, Palette::SubTab);
|
||||
}
|
||||
|
||||
I18n::Message ParametersController::okButtonText() {
|
||||
return I18n::Message::Next;
|
||||
}
|
||||
|
||||
View * ParametersController::createView() {
|
||||
assert(m_selectableTableView == nullptr);
|
||||
m_selectableTableView = (SelectableTableView *)FloatParameterController::createView();
|
||||
for (int i = 0; i < k_maxNumberOfCells; i++) {
|
||||
assert(m_menuListCell[i] == nullptr);
|
||||
m_menuListCell[i] = new MessageTableCellWithEditableText(m_selectableTableView, this, m_draftTextBuffer);
|
||||
}
|
||||
ContentView * contentView = (ContentView *)new ContentView(this, m_selectableTableView);
|
||||
if (m_law != nullptr) {
|
||||
contentView->setNumberOfParameters(m_law->numberOfParameter());
|
||||
}
|
||||
return contentView;
|
||||
}
|
||||
|
||||
SelectableTableView * ParametersController::selectableTableView() {
|
||||
return m_selectableTableView;
|
||||
}
|
||||
|
||||
ParametersController::ContentView * ParametersController::contentView() {
|
||||
return (ContentView *)view();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -11,12 +11,12 @@ namespace Probability {
|
||||
class ParametersController : public Shared::FloatParameterController {
|
||||
public:
|
||||
ParametersController(Responder * parentResponder);
|
||||
View * view() override;
|
||||
const char * title() override;
|
||||
void setLaw(Law * law);
|
||||
void viewWillAppear() override;
|
||||
int numberOfRows() override;
|
||||
void willDisplayCellForIndex(HighlightCell * cell, int index) override;
|
||||
void unloadView() override;
|
||||
private:
|
||||
HighlightCell * reusableParameterCell(int index, int type) override;
|
||||
int reusableParameterCellCount(int type) override;
|
||||
@@ -25,6 +25,8 @@ private:
|
||||
float parameterAtIndex(int index) override;
|
||||
bool setParameterAtIndex(int parameterIndex, float f) override;
|
||||
bool textFieldDidFinishEditing(TextField * textField, const char * text) override;
|
||||
I18n::Message okButtonText() override;
|
||||
View * createView() override;
|
||||
class ContentView : public View {
|
||||
public:
|
||||
ContentView(Responder * parentResponder, SelectableTableView * selectableTableView);
|
||||
@@ -43,11 +45,13 @@ private:
|
||||
MessageTextView m_secondParameterDefinition;
|
||||
SelectableTableView * m_selectableTableView;
|
||||
};
|
||||
SelectableTableView * selectableTableView() override;
|
||||
ContentView * contentView();
|
||||
SelectableTableView * m_selectableTableView;
|
||||
constexpr static int k_maxNumberOfCells = 2;
|
||||
char m_draftTextBuffer[MessageTableCellWithEditableText::k_bufferLength];
|
||||
MessageTableCellWithEditableText m_menuListCell[k_maxNumberOfCells];
|
||||
MessageTableCellWithEditableText * m_menuListCell[k_maxNumberOfCells];
|
||||
float m_previousParameters[k_maxNumberOfCells];
|
||||
ContentView m_contentView;
|
||||
Law * m_law;
|
||||
CalculationController m_calculationController;
|
||||
};
|
||||
|
||||
@@ -8,49 +8,39 @@ using namespace Poincare;
|
||||
|
||||
namespace Shared {
|
||||
|
||||
FloatParameterController::FloatParameterController(Responder * parentResponder, I18n::Message okButtonText) :
|
||||
ViewController(parentResponder),
|
||||
m_selectableTableView(SelectableTableView(this, this, 0, 1, Metric::CommonTopMargin, Metric::CommonRightMargin,
|
||||
Metric::CommonBottomMargin, Metric::CommonLeftMargin, this)),
|
||||
m_okButton(ButtonWithSeparator(&m_selectableTableView, okButtonText, Invocation([](void * context, void * sender) {
|
||||
FloatParameterController * parameterController = (FloatParameterController *) context;
|
||||
parameterController->buttonAction();
|
||||
}, this)))
|
||||
FloatParameterController::FloatParameterController(Responder * parentResponder) :
|
||||
DynamicViewController(parentResponder)
|
||||
{
|
||||
}
|
||||
|
||||
View * FloatParameterController::view() {
|
||||
return &m_selectableTableView;
|
||||
}
|
||||
|
||||
void FloatParameterController::didBecomeFirstResponder() {
|
||||
if (m_selectableTableView.selectedRow() >= 0) {
|
||||
int selectedRow = m_selectableTableView.selectedRow();
|
||||
if (selectableTableView()->selectedRow() >= 0) {
|
||||
int selectedRow = selectableTableView()->selectedRow();
|
||||
selectedRow = selectedRow >= numberOfRows() ? numberOfRows()-1 : selectedRow;
|
||||
int selectedColumn = m_selectableTableView.selectedColumn();
|
||||
int selectedColumn = selectableTableView()->selectedColumn();
|
||||
selectedColumn = selectedColumn >= numberOfColumns() ? numberOfColumns() - 1 : selectedColumn;
|
||||
m_selectableTableView.selectCellAtLocation(selectedColumn, selectedRow);
|
||||
selectableTableView()->selectCellAtLocation(selectedColumn, selectedRow);
|
||||
}
|
||||
app()->setFirstResponder(&m_selectableTableView);
|
||||
app()->setFirstResponder(selectableTableView());
|
||||
}
|
||||
|
||||
void FloatParameterController::viewWillAppear() {
|
||||
m_selectableTableView.reloadData();
|
||||
if (m_selectableTableView.selectedRow() == -1) {
|
||||
m_selectableTableView.selectCellAtLocation(0, 0);
|
||||
selectableTableView()->reloadData();
|
||||
if (selectableTableView()->selectedRow() == -1) {
|
||||
selectableTableView()->selectCellAtLocation(0, 0);
|
||||
} else {
|
||||
int selectedRow = m_selectableTableView.selectedRow();
|
||||
int selectedRow = selectableTableView()->selectedRow();
|
||||
selectedRow = selectedRow >= numberOfRows() ? numberOfRows()-1 : selectedRow;
|
||||
int selectedColumn = m_selectableTableView.selectedColumn();
|
||||
int selectedColumn = selectableTableView()->selectedColumn();
|
||||
selectedColumn = selectedColumn >= numberOfColumns() ? numberOfColumns() - 1 : selectedColumn;
|
||||
m_selectableTableView.selectCellAtLocation(selectedColumn, selectedRow);
|
||||
selectableTableView()->selectCellAtLocation(selectedColumn, selectedRow);
|
||||
}
|
||||
}
|
||||
|
||||
void FloatParameterController::willExitResponderChain(Responder * nextFirstResponder) {
|
||||
if (parentResponder() == nullptr) {
|
||||
m_selectableTableView.deselectTable();
|
||||
m_selectableTableView.scrollToCell(0,0);
|
||||
selectableTableView()->deselectTable();
|
||||
selectableTableView()->scrollToCell(0,0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -83,7 +73,7 @@ int FloatParameterController::reusableCellCount(int type) {
|
||||
|
||||
HighlightCell * FloatParameterController::reusableCell(int index, int type) {
|
||||
if (type == 0) {
|
||||
return &m_okButton;
|
||||
return m_okButton;
|
||||
}
|
||||
return reusableParameterCell(index, type);
|
||||
}
|
||||
@@ -130,13 +120,13 @@ bool FloatParameterController::textFieldDidFinishEditing(TextField * textField,
|
||||
app()->displayWarning(I18n::Message::UndefinedValue);
|
||||
return false;
|
||||
}
|
||||
if (!setParameterAtIndex(m_selectableTableView.selectedRow(), floatBody)) {
|
||||
if (!setParameterAtIndex(selectableTableView()->selectedRow(), floatBody)) {
|
||||
return false;
|
||||
}
|
||||
willDisplayCellForIndex(m_selectableTableView.cellAtLocation(m_selectableTableView.selectedColumn(),
|
||||
m_selectableTableView.selectedRow()), activeCell());
|
||||
m_selectableTableView.reloadData();
|
||||
m_selectableTableView.selectCellAtLocation(m_selectableTableView.selectedColumn(), m_selectableTableView.selectedRow()+1);
|
||||
willDisplayCellForIndex(selectableTableView()->cellAtLocation(selectableTableView()->selectedColumn(),
|
||||
selectableTableView()->selectedRow()), activeCell());
|
||||
selectableTableView()->reloadData();
|
||||
selectableTableView()->selectCellAtLocation(selectableTableView()->selectedColumn(), selectableTableView()->selectedRow()+1);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -164,16 +154,41 @@ TextFieldDelegateApp * FloatParameterController::textFieldDelegateApp() {
|
||||
}
|
||||
|
||||
int FloatParameterController::activeCell() {
|
||||
return m_selectableTableView.selectedRow();
|
||||
return selectableTableView()->selectedRow();
|
||||
}
|
||||
|
||||
void FloatParameterController::unloadView() {
|
||||
assert(m_okButton != nullptr);
|
||||
delete m_okButton;
|
||||
m_okButton = nullptr;
|
||||
DynamicViewController::unloadView();
|
||||
}
|
||||
|
||||
StackViewController * FloatParameterController::stackController() {
|
||||
return (StackViewController *)parentResponder();
|
||||
}
|
||||
|
||||
SelectableTableView * FloatParameterController::selectableTableView() {
|
||||
return (SelectableTableView *)view();
|
||||
}
|
||||
|
||||
View * FloatParameterController::createView() {
|
||||
SelectableTableView * tableView = new SelectableTableView(this, this, 0, 1, Metric::CommonTopMargin, Metric::CommonRightMargin, Metric::CommonBottomMargin, Metric::CommonLeftMargin, this);
|
||||
assert(m_okButton == nullptr);
|
||||
m_okButton = new ButtonWithSeparator(tableView, okButtonText(), Invocation([](void * context, void * sender) {
|
||||
FloatParameterController * parameterController = (FloatParameterController *) context;
|
||||
parameterController->buttonAction();
|
||||
}, this));
|
||||
return tableView;
|
||||
}
|
||||
|
||||
void FloatParameterController::buttonAction() {
|
||||
StackViewController * stack = stackController();
|
||||
stack->pop();
|
||||
}
|
||||
|
||||
I18n::Message FloatParameterController::okButtonText() {
|
||||
return I18n::Message::Ok;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -10,10 +10,9 @@ namespace Shared {
|
||||
/* This controller edits float parameter of any model (given through
|
||||
* parameterAtIndex and setParameterAtIndex). */
|
||||
|
||||
class FloatParameterController : public ViewController, public ListViewDataSource, public SelectableTableViewDelegate, public TextFieldDelegate {
|
||||
class FloatParameterController : public DynamicViewController, public ListViewDataSource, public SelectableTableViewDelegate, public TextFieldDelegate {
|
||||
public:
|
||||
FloatParameterController(Responder * parentResponder, I18n::Message okButtonText = I18n::Message::Ok);
|
||||
View * view() override;
|
||||
FloatParameterController(Responder * parentResponder);
|
||||
void didBecomeFirstResponder() override;
|
||||
void viewWillAppear() override;
|
||||
void willExitResponderChain(Responder * nextFirstResponder) override;
|
||||
@@ -29,20 +28,23 @@ public:
|
||||
|
||||
bool textFieldDidFinishEditing(TextField * textField, const char * text) override;
|
||||
void tableViewDidChangeSelection(SelectableTableView * t, int previousSelectedCellX, int previousSelectedCellY) override;
|
||||
void unloadView() override;
|
||||
protected:
|
||||
int activeCell();
|
||||
StackViewController * stackController();
|
||||
virtual float parameterAtIndex(int index) = 0;
|
||||
SelectableTableView m_selectableTableView;
|
||||
virtual SelectableTableView * selectableTableView();
|
||||
View * createView() override;
|
||||
private:
|
||||
constexpr static int k_buttonMargin = 6;
|
||||
virtual void buttonAction();
|
||||
virtual I18n::Message okButtonText();
|
||||
virtual int reusableParameterCellCount(int type) = 0;
|
||||
virtual HighlightCell * reusableParameterCell(int index, int type) = 0;
|
||||
TextFieldDelegateApp * textFieldDelegateApp() override;
|
||||
virtual float previousParameterAtIndex(int index) = 0;
|
||||
virtual bool setParameterAtIndex(int parameterIndex, float f) = 0;
|
||||
ButtonWithSeparator m_okButton;
|
||||
ButtonWithSeparator * m_okButton;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -7,8 +7,8 @@ namespace Shared {
|
||||
GoToParameterController::GoToParameterController(Responder * parentResponder, InteractiveCurveViewRange * graphRange, CurveViewCursor * cursor, I18n::Message symbol) :
|
||||
FloatParameterController(parentResponder),
|
||||
m_cursor(cursor),
|
||||
m_abscisseCell(MessageTableCellWithEditableText(&m_selectableTableView, this, m_draftTextBuffer, symbol)),
|
||||
m_graphRange(graphRange)
|
||||
m_graphRange(graphRange),
|
||||
m_abscissaSymbol(symbol)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -21,6 +21,13 @@ int GoToParameterController::numberOfRows() {
|
||||
return 2;
|
||||
}
|
||||
|
||||
void GoToParameterController::unloadView() {
|
||||
assert(m_abscisseCell != nullptr);
|
||||
delete m_abscisseCell;
|
||||
m_abscisseCell = nullptr;
|
||||
FloatParameterController::unloadView();
|
||||
}
|
||||
|
||||
float GoToParameterController::previousParameterAtIndex(int index) {
|
||||
assert(index == 0);
|
||||
return m_previousParameter;
|
||||
@@ -28,7 +35,7 @@ float GoToParameterController::previousParameterAtIndex(int index) {
|
||||
|
||||
HighlightCell * GoToParameterController::reusableParameterCell(int index, int type) {
|
||||
assert(index == 0);
|
||||
return &m_abscisseCell;
|
||||
return m_abscisseCell;
|
||||
}
|
||||
|
||||
int GoToParameterController::reusableParameterCellCount(int type) {
|
||||
@@ -43,4 +50,11 @@ void GoToParameterController::buttonAction() {
|
||||
stack->pop();
|
||||
}
|
||||
|
||||
View * GoToParameterController::createView() {
|
||||
SelectableTableView * tableView = (SelectableTableView *)FloatParameterController::createView();
|
||||
assert(m_abscisseCell == nullptr);
|
||||
m_abscisseCell = new MessageTableCellWithEditableText(tableView, this, m_draftTextBuffer, m_abscissaSymbol);
|
||||
return tableView;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@ public:
|
||||
GoToParameterController(Responder * parentResponder, InteractiveCurveViewRange * graphRange, CurveViewCursor * cursor, I18n::Message symbol);
|
||||
void viewWillAppear() override;
|
||||
int numberOfRows() override;
|
||||
void unloadView() override;
|
||||
protected:
|
||||
constexpr static float k_maxDisplayableFloat = 1E8f;
|
||||
CurveViewCursor * m_cursor;
|
||||
@@ -21,10 +22,12 @@ private:
|
||||
HighlightCell * reusableParameterCell(int index, int type) override;
|
||||
int reusableParameterCellCount(int type) override;
|
||||
float previousParameterAtIndex(int index) override;
|
||||
View * createView() override;
|
||||
char m_draftTextBuffer[MessageTableCellWithEditableText::k_bufferLength];
|
||||
MessageTableCellWithEditableText m_abscisseCell;
|
||||
MessageTableCellWithEditableText * m_abscisseCell;
|
||||
float m_previousParameter;
|
||||
InteractiveCurveViewRange * m_graphRange;
|
||||
I18n::Message m_abscissaSymbol;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -5,8 +5,7 @@ namespace Shared {
|
||||
|
||||
IntervalParameterController::IntervalParameterController(Responder * parentResponder, Interval * interval) :
|
||||
FloatParameterController(parentResponder),
|
||||
m_interval(interval),
|
||||
m_intervalCells{MessageTableCellWithEditableText(&m_selectableTableView, this, m_draftTextBuffer, I18n::Message::Default), MessageTableCellWithEditableText(&m_selectableTableView, this, m_draftTextBuffer, I18n::Message::Default), MessageTableCellWithEditableText(&m_selectableTableView, this, m_draftTextBuffer, I18n::Message::Default)}
|
||||
m_interval(interval)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -39,6 +38,15 @@ Interval * IntervalParameterController::interval() {
|
||||
return m_interval;
|
||||
}
|
||||
|
||||
void IntervalParameterController::unloadView() {
|
||||
for (int i = 0; i < k_totalNumberOfCell; i++) {
|
||||
assert(m_intervalCells[i] != nullptr);
|
||||
delete m_intervalCells[i];
|
||||
m_intervalCells[i] = nullptr;
|
||||
}
|
||||
FloatParameterController::unloadView();
|
||||
}
|
||||
|
||||
float IntervalParameterController::previousParameterAtIndex(int index) {
|
||||
assert(index >= 0 && index < k_totalNumberOfCell);
|
||||
return m_previousParameters[index];
|
||||
@@ -72,11 +80,20 @@ bool IntervalParameterController::setParameterAtIndex(int parameterIndex, float
|
||||
HighlightCell * IntervalParameterController::reusableParameterCell(int index, int type) {
|
||||
assert(index >= 0);
|
||||
assert(index < k_totalNumberOfCell);
|
||||
return &m_intervalCells[index];
|
||||
return m_intervalCells[index];
|
||||
}
|
||||
|
||||
int IntervalParameterController::reusableParameterCellCount(int type) {
|
||||
return k_totalNumberOfCell;
|
||||
}
|
||||
|
||||
View * IntervalParameterController::createView() {
|
||||
SelectableTableView * tableView = (SelectableTableView *)FloatParameterController::createView();
|
||||
for (int i = 0; i < k_totalNumberOfCell; i++) {
|
||||
assert(m_intervalCells[i] == nullptr);
|
||||
m_intervalCells[i] = new MessageTableCellWithEditableText(tableView, this, m_draftTextBuffer, I18n::Message::Default);
|
||||
}
|
||||
return tableView;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@ public:
|
||||
void viewWillAppear() override;
|
||||
void willDisplayCellForIndex(HighlightCell * cell, int index) override;
|
||||
int numberOfRows() override;
|
||||
void unloadView() override;
|
||||
protected:
|
||||
constexpr static int k_totalNumberOfCell = 3;
|
||||
bool setParameterAtIndex(int parameterIndex, float f) override;
|
||||
@@ -24,8 +25,9 @@ private:
|
||||
int reusableParameterCellCount(int type) override;
|
||||
float previousParameterAtIndex(int index) override;
|
||||
float parameterAtIndex(int index) override;
|
||||
View * createView() override;
|
||||
char m_draftTextBuffer[MessageTableCellWithEditableText::k_bufferLength];
|
||||
MessageTableCellWithEditableText m_intervalCells[k_totalNumberOfCell];
|
||||
MessageTableCellWithEditableText * m_intervalCells[k_totalNumberOfCell];
|
||||
float m_previousParameters[k_totalNumberOfCell];
|
||||
};
|
||||
|
||||
|
||||
@@ -9,10 +9,7 @@ namespace Shared {
|
||||
|
||||
RangeParameterController::RangeParameterController(Responder * parentResponder, InteractiveCurveViewRange * interactiveRange) :
|
||||
FloatParameterController(parentResponder),
|
||||
m_interactiveRange(interactiveRange),
|
||||
m_rangeCells{MessageTableCellWithEditableText(&m_selectableTableView, this, m_draftTextBuffer, I18n::Message::Default), MessageTableCellWithEditableText(&m_selectableTableView, this, m_draftTextBuffer, I18n::Message::Default),
|
||||
MessageTableCellWithEditableText(&m_selectableTableView, this, m_draftTextBuffer, I18n::Message::Default), MessageTableCellWithEditableText(&m_selectableTableView, this, m_draftTextBuffer, I18n::Message::Default)},
|
||||
m_yAutoCell(MessageTableCellWithSwitch(I18n::Message::YAuto))
|
||||
m_interactiveRange(interactiveRange)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -48,7 +45,7 @@ void RangeParameterController::willDisplayCellForIndex(HighlightCell * cell, int
|
||||
return;
|
||||
}
|
||||
if (index == 2) {
|
||||
SwitchView * switchView = (SwitchView *)m_yAutoCell.accessoryView();
|
||||
SwitchView * switchView = (SwitchView *)m_yAutoCell->accessoryView();
|
||||
switchView->setState(m_interactiveRange->yAuto());
|
||||
return;
|
||||
}
|
||||
@@ -63,7 +60,7 @@ void RangeParameterController::willDisplayCellForIndex(HighlightCell * cell, int
|
||||
|
||||
bool RangeParameterController::textFieldDidFinishEditing(TextField * textField, const char * text) {
|
||||
if (FloatParameterController::textFieldDidFinishEditing(textField, text)) {
|
||||
m_selectableTableView.reloadData();
|
||||
selectableTableView()->reloadData();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@@ -96,7 +93,7 @@ void RangeParameterController::tableViewDidChangeSelection(SelectableTableView *
|
||||
bool RangeParameterController::handleEvent(Ion::Events::Event event) {
|
||||
if (activeCell() == 2 && event == Ion::Events::OK) {
|
||||
m_interactiveRange->setYAuto(!m_interactiveRange->yAuto());
|
||||
m_selectableTableView.reloadData();
|
||||
selectableTableView()->reloadData();
|
||||
return true;
|
||||
}
|
||||
if (event == Ion::Events::Back) {
|
||||
@@ -127,11 +124,11 @@ bool RangeParameterController::setParameterAtIndex(int parameterIndex, float f)
|
||||
|
||||
HighlightCell * RangeParameterController::reusableParameterCell(int index, int type) {
|
||||
if (type == 2) {
|
||||
return &m_yAutoCell;
|
||||
return m_yAutoCell;
|
||||
}
|
||||
assert(index >= 0);
|
||||
assert(index < k_numberOfTextCell);
|
||||
return &m_rangeCells[index];
|
||||
return m_rangeCells[index];
|
||||
}
|
||||
|
||||
int RangeParameterController::reusableParameterCellCount(int type) {
|
||||
@@ -141,4 +138,28 @@ int RangeParameterController::reusableParameterCellCount(int type) {
|
||||
return k_numberOfTextCell;
|
||||
}
|
||||
|
||||
void RangeParameterController::unloadView() {
|
||||
assert(m_yAutoCell != nullptr);
|
||||
delete m_yAutoCell;
|
||||
m_yAutoCell = nullptr;
|
||||
for (int i = 0; i < k_numberOfTextCell; i++) {
|
||||
assert(m_rangeCells[i] != nullptr);
|
||||
delete m_rangeCells[i];
|
||||
m_rangeCells[i] = nullptr;
|
||||
}
|
||||
FloatParameterController::unloadView();
|
||||
}
|
||||
|
||||
View * RangeParameterController::createView() {
|
||||
SelectableTableView * tableView = (SelectableTableView *)FloatParameterController::createView();
|
||||
assert(m_yAutoCell == nullptr);
|
||||
m_yAutoCell = new MessageTableCellWithSwitch(I18n::Message::YAuto);
|
||||
for (int i = 0; i < k_numberOfTextCell; i++) {
|
||||
assert(m_rangeCells[i] == nullptr);
|
||||
m_rangeCells[i] = new MessageTableCellWithEditableText(tableView, this, m_draftTextBuffer, I18n::Message::Default);
|
||||
}
|
||||
return tableView;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -18,17 +18,19 @@ public:
|
||||
bool textFieldDidFinishEditing(TextField * textField, const char * text) override;
|
||||
void tableViewDidChangeSelection(SelectableTableView * t, int previousSelectedCellX, int previousSelectedCellY) override;
|
||||
bool handleEvent(Ion::Events::Event event) override;
|
||||
void unloadView() override;
|
||||
private:
|
||||
HighlightCell * reusableParameterCell(int index, int type) override;
|
||||
int reusableParameterCellCount(int type) override;
|
||||
float previousParameterAtIndex(int index) override;
|
||||
float parameterAtIndex(int index) override;
|
||||
bool setParameterAtIndex(int parameterIndex, float f) override;
|
||||
View * createView() override;
|
||||
constexpr static int k_numberOfTextCell = 4;
|
||||
InteractiveCurveViewRange * m_interactiveRange;
|
||||
char m_draftTextBuffer[MessageTableCellWithEditableText::k_bufferLength];
|
||||
MessageTableCellWithEditableText m_rangeCells[k_numberOfTextCell];
|
||||
MessageTableCellWithSwitch m_yAutoCell;
|
||||
MessageTableCellWithEditableText * m_rangeCells[k_numberOfTextCell];
|
||||
MessageTableCellWithSwitch * m_yAutoCell;
|
||||
float m_previousParameters[k_numberOfTextCell];
|
||||
bool m_previousSwitchState;
|
||||
};
|
||||
|
||||
@@ -8,7 +8,6 @@ namespace Statistics {
|
||||
|
||||
HistogramParameterController::HistogramParameterController(Responder * parentResponder, Store * store) :
|
||||
FloatParameterController(parentResponder),
|
||||
m_cells{MessageTableCellWithEditableText(&m_selectableTableView, this, m_draftTextBuffer, I18n::Message::Default), MessageTableCellWithEditableText(&m_selectableTableView, this, m_draftTextBuffer, I18n::Message::Default)},
|
||||
m_store(store)
|
||||
{
|
||||
}
|
||||
@@ -18,14 +17,14 @@ const char * HistogramParameterController::title() {
|
||||
}
|
||||
|
||||
void HistogramParameterController::viewWillAppear() {
|
||||
for (int i = 0; i < 2; i++) {
|
||||
for (int i = 0; i < k_numberOfCells; i++) {
|
||||
m_previousParameters[i] = parameterAtIndex(i);
|
||||
}
|
||||
FloatParameterController::viewWillAppear();
|
||||
}
|
||||
|
||||
int HistogramParameterController::numberOfRows() {
|
||||
return 1+2;
|
||||
return 1+k_numberOfCells;
|
||||
}
|
||||
|
||||
void HistogramParameterController::willDisplayCellForIndex(HighlightCell * cell, int index) {
|
||||
@@ -33,13 +32,22 @@ void HistogramParameterController::willDisplayCellForIndex(HighlightCell * cell,
|
||||
return;
|
||||
}
|
||||
MessageTableCellWithEditableText * myCell = (MessageTableCellWithEditableText *)cell;
|
||||
I18n::Message labels[2] = {I18n::Message::RectangleWidth, I18n::Message::BarStart};
|
||||
I18n::Message labels[k_numberOfCells] = {I18n::Message::RectangleWidth, I18n::Message::BarStart};
|
||||
myCell->setMessage(labels[index]);
|
||||
FloatParameterController::willDisplayCellForIndex(cell, index);
|
||||
}
|
||||
|
||||
void HistogramParameterController::unloadView() {
|
||||
for (int i = 0; i < k_numberOfCells; i++) {
|
||||
assert(m_cells[i] != nullptr);
|
||||
delete m_cells[i];
|
||||
m_cells[i] = nullptr;
|
||||
}
|
||||
FloatParameterController::unloadView();
|
||||
}
|
||||
|
||||
float HistogramParameterController::parameterAtIndex(int index) {
|
||||
assert(index >= 0 && index < 2);
|
||||
assert(index >= 0 && index < k_numberOfCells);
|
||||
if (index == 0) {
|
||||
return m_store->barWidth();
|
||||
}
|
||||
@@ -51,7 +59,7 @@ float HistogramParameterController::previousParameterAtIndex(int index) {
|
||||
}
|
||||
|
||||
bool HistogramParameterController::setParameterAtIndex(int parameterIndex, float f) {
|
||||
assert(parameterIndex >= 0 && parameterIndex < 2);
|
||||
assert(parameterIndex >= 0 && parameterIndex < k_numberOfCells);
|
||||
if (parameterIndex == 0) {
|
||||
if (f <= 0.0f) {
|
||||
app()->displayWarning(I18n::Message::ForbiddenValue);
|
||||
@@ -65,12 +73,22 @@ bool HistogramParameterController::setParameterAtIndex(int parameterIndex, float
|
||||
}
|
||||
|
||||
HighlightCell * HistogramParameterController::reusableParameterCell(int index, int type) {
|
||||
assert(index >= 0 && index < 2);
|
||||
return &m_cells[index];
|
||||
assert(index >= 0 && index < k_numberOfCells);
|
||||
return m_cells[index];
|
||||
}
|
||||
|
||||
int HistogramParameterController::reusableParameterCellCount(int type) {
|
||||
return 2;
|
||||
return k_numberOfCells;
|
||||
}
|
||||
|
||||
View * HistogramParameterController::createView() {
|
||||
SelectableTableView * tableView = (SelectableTableView *)FloatParameterController::createView();
|
||||
for (int i = 0; i < k_numberOfCells; i++) {
|
||||
assert(m_cells[i] == nullptr);
|
||||
m_cells[i] = new MessageTableCellWithEditableText(tableView, this, m_draftTextBuffer, I18n::Message::Default);
|
||||
}
|
||||
return tableView;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -14,15 +14,18 @@ public:
|
||||
void viewWillAppear() override;
|
||||
int numberOfRows() override;
|
||||
void willDisplayCellForIndex(HighlightCell * cell, int index) override;
|
||||
void unloadView() override;
|
||||
private:
|
||||
HighlightCell * reusableParameterCell(int index, int type) override;
|
||||
int reusableParameterCellCount(int type) override;
|
||||
float parameterAtIndex(int index) override;
|
||||
float previousParameterAtIndex(int index) override;
|
||||
bool setParameterAtIndex(int parameterIndex, float f) override;
|
||||
View * createView() override;
|
||||
char m_draftTextBuffer[MessageTableCellWithEditableText::k_bufferLength];
|
||||
MessageTableCellWithEditableText m_cells[2];
|
||||
float m_previousParameters[2];
|
||||
constexpr static int k_numberOfCells = 2;
|
||||
MessageTableCellWithEditableText * m_cells[k_numberOfCells];
|
||||
float m_previousParameters[k_numberOfCells];
|
||||
Store * m_store;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user