[apps/shared] Make the float parameter controllers a dynamic controller

view

Change-Id: I216b7f6df15e5a406624ce3c1b0e892d0f871a6b
This commit is contained in:
Émilie Feral
2017-04-20 13:16:58 +02:00
parent 78317dc06c
commit 54c5f4dcda
12 changed files with 215 additions and 86 deletions

View File

@@ -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();
}
}

View File

@@ -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;
};

View File

@@ -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;
}
}

View File

@@ -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;
};
}

View File

@@ -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;
}
}

View File

@@ -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;
};
}

View File

@@ -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;
}
}

View File

@@ -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];
};

View File

@@ -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;
}
}

View File

@@ -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;
};

View File

@@ -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;
}
}

View File

@@ -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;
};