[apps] Get rid of DynamicViewController in FloatParameterController

This commit is contained in:
Émilie Feral
2018-09-11 10:16:36 +02:00
parent 5cb4258af6
commit 6d9f0c0f0b
15 changed files with 89 additions and 227 deletions

View File

@@ -69,12 +69,18 @@ void ParametersController::ContentView::layoutSubviews() {
ParametersController::ParametersController(Responder * parentResponder, Law * law, CalculationController * calculationController) :
FloatParameterController(parentResponder),
m_selectableTableView(nullptr),
m_contentView(this, &m_selectableTableView),
m_menuListCell{},
m_law(law),
m_calculationController(calculationController)
{
assert(m_law != nullptr);
m_okButton.setMessage(I18n::Message::Next);
for (int i = 0; i < k_maxNumberOfCells; i++) {
m_menuListCell[i].setParentResponder(&m_selectableTableView);
m_menuListCell[i].textField()->setDelegate(this);
m_menuListCell[i].textField()->setDraftTextBuffer(m_draftTextBuffer);
}
}
const char * ParametersController::title() {
@@ -99,11 +105,12 @@ void ParametersController::didBecomeFirstResponder() {
}
void ParametersController::viewWillAppear() {
FloatParameterController::viewWillAppear();
m_contentView.setNumberOfParameters(m_law->numberOfParameter());
for (int i = 0; i < m_law->numberOfParameter(); i++) {
contentView()->parameterDefinitionAtIndex(i)->setMessage(m_law->parameterDefinitionAtIndex(i));
m_contentView.parameterDefinitionAtIndex(i)->setMessage(m_law->parameterDefinitionAtIndex(i));
}
contentView()->layoutSubviews();
m_contentView.layoutSubviews();
FloatParameterController::viewWillAppear();
}
int ParametersController::numberOfRows() {
@@ -125,7 +132,7 @@ 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) {
@@ -148,7 +155,7 @@ bool ParametersController::setParameterAtIndex(int parameterIndex, double f) {
bool ParametersController::textFieldDidFinishEditing(TextField * textField, const char * text, Ion::Events::Event event) {
if (FloatParameterController::textFieldDidFinishEditing(textField, text, event)) {
m_selectableTableView->reloadData();
m_selectableTableView.reloadData();
return true;
}
return false;
@@ -159,37 +166,4 @@ void ParametersController::buttonAction() {
stack->push(m_calculationController, KDColorWhite, Palette::SubTab, Palette::SubTab);
}
I18n::Message ParametersController::okButtonText() {
return I18n::Message::Next;
}
View * ParametersController::loadView() {
m_selectableTableView = (SelectableTableView *)FloatParameterController::loadView();
for (int i = 0; i < k_maxNumberOfCells; i++) {
m_menuListCell[i] = new MessageTableCellWithEditableText(m_selectableTableView, this, m_draftTextBuffer);
}
ContentView * contentView = (ContentView *)new ContentView(this, m_selectableTableView);
contentView->setNumberOfParameters(m_law->numberOfParameter());
return contentView;
}
void ParametersController::unloadView(View * view) {
delete m_selectableTableView;
m_selectableTableView = nullptr;
for (int i = 0; i < k_maxNumberOfCells; i++) {
delete m_menuListCell[i];
m_menuListCell[i] = nullptr;
}
FloatParameterController::unloadView(view);
}
SelectableTableView * ParametersController::selectableTableView() {
return m_selectableTableView;
}
ParametersController::ContentView * ParametersController::contentView() {
return (ContentView *)view();
}
}

View File

@@ -12,6 +12,7 @@ class ParametersController : public Shared::FloatParameterController {
public:
ParametersController(Responder * parentResponder, Law * m_law, CalculationController * calculationController);
const char * title() override;
View * view() override { return &m_contentView; }
bool handleEvent(Ion::Events::Event event) override;
void reinitCalculation();
void didBecomeFirstResponder() override;
@@ -25,9 +26,6 @@ private:
double parameterAtIndex(int index) override;
bool setParameterAtIndex(int parameterIndex, double f) override;
bool textFieldDidFinishEditing(TextField * textField, const char * text, Ion::Events::Event event) override;
I18n::Message okButtonText() override;
View * loadView() override;
void unloadView(View * view) override;
class ContentView : public View {
public:
ContentView(Responder * parentResponder, SelectableTableView * selectableTableView);
@@ -46,12 +44,10 @@ 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];
ContentView m_contentView;
MessageTableCellWithEditableText m_menuListCell[k_maxNumberOfCells];
Law * m_law;
CalculationController * m_calculationController;
};

View File

@@ -11,8 +11,12 @@ using namespace Poincare;
namespace Shared {
FloatParameterController::FloatParameterController(Responder * parentResponder) :
DynamicViewController(parentResponder),
m_okButton(nullptr)
ViewController(parentResponder),
m_selectableTableView(this, this, this),
m_okButton(&m_selectableTableView, I18n::Message::Ok, Invocation([](void * context, void * sender) {
FloatParameterController * parameterController = (FloatParameterController *) context;
parameterController->buttonAction();
}, this))
{
}
@@ -24,11 +28,10 @@ void FloatParameterController::didBecomeFirstResponder() {
selColumn = selColumn >= numberOfColumns() ? numberOfColumns() - 1 : selColumn;
selectCellAtLocation(selColumn, selRow);
}
app()->setFirstResponder(selectableTableView());
app()->setFirstResponder(&m_selectableTableView);
}
void FloatParameterController::viewWillAppear() {
DynamicViewController::viewWillAppear();
if (selectedRow() == -1 || selectedRow() == numberOfRows()-1) {
selectCellAtLocation(0, 0);
} else {
@@ -38,13 +41,13 @@ void FloatParameterController::viewWillAppear() {
selColumn = selColumn >= numberOfColumns() ? numberOfColumns() - 1 : selColumn;
selectCellAtLocation(selColumn, selRow);
}
selectableTableView()->reloadData();
m_selectableTableView.reloadData();
}
void FloatParameterController::willExitResponderChain(Responder * nextFirstResponder) {
if (parentResponder() == nullptr) {
selectableTableView()->deselectTable();
selectableTableView()->scrollToCell(0,0);
m_selectableTableView.deselectTable();
m_selectableTableView.scrollToCell(0,0);
}
}
@@ -72,7 +75,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);
}
@@ -128,12 +131,12 @@ bool FloatParameterController::textFieldDidFinishEditing(TextField * textField,
if (!setParameterAtIndex(selectedRow(), floatBody)) {
return false;
}
selectableTableView()->reloadCellAtLocation(0, activeCell());
selectableTableView()->reloadData();
m_selectableTableView.reloadCellAtLocation(0, activeCell());
m_selectableTableView.reloadData();
if (event == Ion::Events::EXE || event == Ion::Events::OK) {
selectableTableView()->selectCellAtLocation(selectedColumn(), selectedRow()+1);
m_selectableTableView.selectCellAtLocation(selectedColumn(), selectedRow()+1);
} else {
selectableTableView()->handleEvent(event);
m_selectableTableView.handleEvent(event);
}
return true;
}
@@ -150,32 +153,9 @@ StackViewController * FloatParameterController::stackController() {
return (StackViewController *)parentResponder();
}
SelectableTableView * FloatParameterController::selectableTableView() {
return (SelectableTableView *)view();
}
void FloatParameterController::buttonAction() {
StackViewController * stack = stackController();
stack->pop();
}
I18n::Message FloatParameterController::okButtonText() {
return I18n::Message::Ok;
}
View * FloatParameterController::loadView() {
SelectableTableView * tableView = new SelectableTableView(this, this, this);
m_okButton = new ButtonWithSeparator(tableView, okButtonText(), Invocation([](void * context, void * sender) {
FloatParameterController * parameterController = (FloatParameterController *) context;
parameterController->buttonAction();
}, this));
return tableView;
}
void FloatParameterController::unloadView(View * view) {
delete m_okButton;
m_okButton = nullptr;
delete view;
}
}

View File

@@ -10,9 +10,10 @@ namespace Shared {
/* This controller edits float parameter of any model (given through
* parameterAtIndex and setParameterAtIndex). */
class FloatParameterController : public DynamicViewController, public ListViewDataSource, public SelectableTableViewDataSource, public ParameterTextFieldDelegate {
class FloatParameterController : public ViewController, public ListViewDataSource, public SelectableTableViewDataSource, public ParameterTextFieldDelegate {
public:
FloatParameterController(Responder * parentResponder);
View * view() override { return &m_selectableTableView; }
void didBecomeFirstResponder() override;
void viewWillAppear() override;
void willExitResponderChain(Responder * nextFirstResponder) override;
@@ -31,18 +32,15 @@ protected:
int activeCell();
StackViewController * stackController();
virtual double parameterAtIndex(int index) = 0;
virtual SelectableTableView * selectableTableView();
View * loadView() override;
void unloadView(View * view) override;
SelectableTableView m_selectableTableView;
ButtonWithSeparator m_okButton;
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 bool setParameterAtIndex(int parameterIndex, double f) = 0;
ButtonWithSeparator * m_okButton;
};
}

View File

@@ -8,8 +8,7 @@ GoToParameterController::GoToParameterController(Responder * parentResponder, In
FloatParameterController(parentResponder),
m_cursor(cursor),
m_graphRange(graphRange),
m_abscisseCell(nullptr),
m_abscissaSymbol(symbol)
m_abscisseCell(&m_selectableTableView, this, m_draftTextBuffer, symbol)
{
}
@@ -19,7 +18,7 @@ int GoToParameterController::numberOfRows() {
HighlightCell * GoToParameterController::reusableParameterCell(int index, int type) {
assert(index == 0);
return m_abscisseCell;
return &m_abscisseCell;
}
int GoToParameterController::reusableParameterCellCount(int type) {
@@ -40,16 +39,4 @@ void GoToParameterController::buttonAction() {
stack->pop();
}
View * GoToParameterController::loadView() {
SelectableTableView * tableView = (SelectableTableView *)FloatParameterController::loadView();
m_abscisseCell = new MessageTableCellWithEditableText(tableView, this, m_draftTextBuffer, m_abscissaSymbol);
return tableView;
}
void GoToParameterController::unloadView(View * view) {
delete m_abscisseCell;
m_abscisseCell = nullptr;
FloatParameterController::unloadView(view);
}
}

View File

@@ -21,11 +21,8 @@ private:
void buttonAction() override;
HighlightCell * reusableParameterCell(int index, int type) override;
int reusableParameterCellCount(int type) override;
View * loadView() override;
void unloadView(View * view) override;
char m_draftTextBuffer[MessageTableCellWithEditableText::k_bufferLength];
MessageTableCellWithEditableText * m_abscisseCell;
I18n::Message m_abscissaSymbol;
MessageTableCellWithEditableText m_abscisseCell;
};
}

View File

@@ -8,6 +8,11 @@ IntervalParameterController::IntervalParameterController(Responder * parentRespo
m_interval(interval),
m_intervalCells{}
{
for (int i = 0; i < k_totalNumberOfCell; i++) {
m_intervalCells[i].setParentResponder(&m_selectableTableView);
m_intervalCells[i].textField()->setDelegate(this);
m_intervalCells[i].textField()->setDraftTextBuffer(m_draftTextBuffer);
}
}
const char * IntervalParameterController::title() {
@@ -60,7 +65,7 @@ bool IntervalParameterController::setParameterAtIndex(int parameterIndex, double
HighlightCell * IntervalParameterController::reusableParameterCell(int index, int type) {
assert(index >= 0);
assert(index < k_totalNumberOfCell);
return m_intervalCells[index];
return &m_intervalCells[index];
}
bool IntervalParameterController::handleEvent(Ion::Events::Event event) {
@@ -83,20 +88,4 @@ void IntervalParameterController::buttonAction() {
}
}
View * IntervalParameterController::loadView() {
SelectableTableView * tableView = (SelectableTableView *)FloatParameterController::loadView();
for (int i = 0; i < k_totalNumberOfCell; i++) {
m_intervalCells[i] = new MessageTableCellWithEditableText(tableView, this, m_draftTextBuffer, I18n::Message::Default);
}
return tableView;
}
void IntervalParameterController::unloadView(View * view) {
for (int i = 0; i < k_totalNumberOfCell; i++) {
delete m_intervalCells[i];
m_intervalCells[i] = nullptr;
}
FloatParameterController::unloadView(view);
}
}

View File

@@ -24,10 +24,8 @@ private:
int reusableParameterCellCount(int type) override;
double parameterAtIndex(int index) override;
void buttonAction() override;
View * loadView() override;
void unloadView(View * view) override;
char m_draftTextBuffer[MessageTableCellWithEditableText::k_bufferLength];
MessageTableCellWithEditableText * m_intervalCells[k_totalNumberOfCell];
MessageTableCellWithEditableText m_intervalCells[k_totalNumberOfCell];
};
}

View File

@@ -12,8 +12,19 @@ RangeParameterController::RangeParameterController(Responder * parentResponder,
m_interactiveRange(interactiveRange),
m_xRangeCells{},
m_yRangeCells{},
m_yAutoCell(nullptr)
m_yAutoCell(I18n::Message::YAuto)
{
for (int i = 0; i < k_numberOfEditableTextCell; i++) {
m_xRangeCells[i].setParentResponder(&m_selectableTableView);
m_xRangeCells[i].textField()->setDelegate(this);
m_xRangeCells[i].textField()->setDraftTextBuffer(m_draftTextBuffer);
}
for (int i = 0; i < k_numberOfConvertibleTextCell; i++) {
m_yRangeCells[i].setParentResponder(&m_selectableTableView);
m_yRangeCells[i].setInteractiveCurveViewRange(m_interactiveRange);
m_yRangeCells[i].textField()->setDelegate(this);
m_yRangeCells[i].textField()->setDraftTextBuffer(m_draftTextBuffer);
}
}
const char * RangeParameterController::title() {
@@ -42,7 +53,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;
}
@@ -57,7 +68,7 @@ void RangeParameterController::willDisplayCellForIndex(HighlightCell * cell, int
bool RangeParameterController::textFieldDidFinishEditing(TextField * textField, const char * text, Ion::Events::Event event) {
if (FloatParameterController::textFieldDidFinishEditing(textField, text, event)) {
selectableTableView()->reloadData();
m_selectableTableView.reloadData();
return true;
}
return false;
@@ -66,7 +77,7 @@ bool RangeParameterController::textFieldDidFinishEditing(TextField * textField,
bool RangeParameterController::handleEvent(Ion::Events::Event event) {
if (activeCell() == 2 && (event == Ion::Events::OK || event == Ion::Events::EXE)) {
m_interactiveRange->setYAuto(!m_interactiveRange->yAuto());
selectableTableView()->reloadData();
m_selectableTableView.reloadData();
return true;
}
return FloatParameterController::handleEvent(event);
@@ -90,16 +101,16 @@ bool RangeParameterController::setParameterAtIndex(int parameterIndex, double f)
HighlightCell * RangeParameterController::reusableParameterCell(int index, int type) {
if (type == 2) {
assert(index == 0);
return m_yAutoCell;
return &m_yAutoCell;
}
if (type == 1) {
assert(index >= 0);
assert(index < k_numberOfEditableTextCell);
return m_xRangeCells[index];
return &m_xRangeCells[index];
}
assert(index >= 0);
assert(index < k_numberOfConvertibleTextCell);
return m_yRangeCells[index];
return &m_yRangeCells[index];
}
int RangeParameterController::reusableParameterCellCount(int type) {
@@ -112,31 +123,5 @@ int RangeParameterController::reusableParameterCellCount(int type) {
return k_numberOfConvertibleTextCell;
}
View * RangeParameterController::loadView() {
SelectableTableView * tableView = (SelectableTableView *)FloatParameterController::loadView();
m_yAutoCell = new MessageTableCellWithSwitch(I18n::Message::YAuto);
for (int i = 0; i < k_numberOfEditableTextCell; i++) {
m_xRangeCells[i] = new MessageTableCellWithEditableText(tableView, this, m_draftTextBuffer, I18n::Message::Default);
}
for (int i = 0; i < k_numberOfConvertibleTextCell; i++) {
m_yRangeCells[i] = new MessageTableCellWithConvertibleEditableText(tableView, this, m_draftTextBuffer, I18n::Message::Default, m_interactiveRange);
}
return tableView;
}
void RangeParameterController::unloadView(View * view) {
delete m_yAutoCell;
m_yAutoCell = nullptr;
for (int i = 0; i < k_numberOfEditableTextCell; i++) {
delete m_xRangeCells[i];
m_xRangeCells[i] = nullptr;
}
for (int i = 0; i < k_numberOfConvertibleTextCell; i++) {
delete m_yRangeCells[i];
m_yRangeCells[i] = nullptr;
}
FloatParameterController::unloadView(view);
}
}

View File

@@ -19,9 +19,6 @@ public:
private:
class MessageTableCellWithConvertibleEditableText : public MessageTableCellWithEditableText {
public:
MessageTableCellWithConvertibleEditableText(Responder * parentResponder, TextFieldDelegate * textFieldDelegate, char * draftTextBuffer, I18n::Message message, InteractiveCurveViewRange * interactiveCurveViewRange) :
MessageTableCellWithEditableText(parentResponder, textFieldDelegate, draftTextBuffer, message),
m_interactiveRange(interactiveCurveViewRange) {}
Responder * responder() override {
if (m_interactiveRange->yAuto()) {
return nullptr;
@@ -29,6 +26,7 @@ private:
return this;
}
}
void setInteractiveCurveViewRange(InteractiveCurveViewRange * interactiveCurveViewRange) { m_interactiveRange = interactiveCurveViewRange; }
private:
InteractiveCurveViewRange * m_interactiveRange;
};
@@ -36,16 +34,14 @@ private:
int reusableParameterCellCount(int type) override;
double parameterAtIndex(int index) override;
bool setParameterAtIndex(int parameterIndex, double f) override;
View * loadView() override;
void unloadView(View * view) override;
constexpr static int k_numberOfEditableTextCell = 2;
constexpr static int k_numberOfConvertibleTextCell = 2;
constexpr static int k_numberOfTextCell = k_numberOfEditableTextCell+k_numberOfConvertibleTextCell;
InteractiveCurveViewRange * m_interactiveRange;
char m_draftTextBuffer[MessageTableCellWithEditableText::k_bufferLength];
MessageTableCellWithEditableText * m_xRangeCells[k_numberOfEditableTextCell];
MessageTableCellWithConvertibleEditableText * m_yRangeCells[k_numberOfConvertibleTextCell];
MessageTableCellWithSwitch * m_yAutoCell;
MessageTableCellWithEditableText m_xRangeCells[k_numberOfEditableTextCell];
MessageTableCellWithConvertibleEditableText m_yRangeCells[k_numberOfConvertibleTextCell];
MessageTableCellWithSwitch m_yAutoCell;
};
}

View File

@@ -43,10 +43,17 @@ void IntervalController::ContentView::layoutSubviews() {
IntervalController::IntervalController(Responder * parentResponder, EquationStore * equationStore) :
FloatParameterController(parentResponder),
m_selectableTableView(nullptr),
m_contentView(&m_selectableTableView),
m_intervalCell{},
m_equationStore(equationStore)
{
m_selectableTableView.setTopMargin(0);
m_okButton.setMessage(I18n::Message::ResolveEquation);
for (int i = 0; i < k_maxNumberOfCells; i++) {
m_intervalCell[i].setParentResponder(&m_selectableTableView);
m_intervalCell[i].textField()->setDelegate(this);
m_intervalCell[i].textField()->setDraftTextBuffer(m_draftTextBuffer);
}
}
const char * IntervalController::title() {
@@ -70,7 +77,7 @@ void IntervalController::willDisplayCellForIndex(HighlightCell * cell, int index
HighlightCell * IntervalController::reusableParameterCell(int index, int type) {
assert(index >= 0);
assert(index < 2);
return m_intervalCell[index];
return &m_intervalCell[index];
}
int IntervalController::reusableParameterCellCount(int type) {
@@ -88,7 +95,7 @@ bool IntervalController::setParameterAtIndex(int parameterIndex, double f) {
bool IntervalController::textFieldDidFinishEditing(TextField * textField, const char * text, Ion::Events::Event event) {
if (FloatParameterController::textFieldDidFinishEditing(textField, text, event)) {
m_selectableTableView->reloadData();
m_selectableTableView.reloadData();
return true;
}
return false;
@@ -101,34 +108,4 @@ void IntervalController::buttonAction() {
stack->push(solverApp->solutionsControllerStack(), KDColorWhite, Palette::SubTab, Palette::SubTab);
}
I18n::Message IntervalController::okButtonText() {
return I18n::Message::ResolveEquation;
}
View * IntervalController::loadView() {
m_selectableTableView = (SelectableTableView *)FloatParameterController::loadView();
m_selectableTableView->setTopMargin(0);
for (int i = 0; i < k_maxNumberOfCells; i++) {
m_intervalCell[i] = new MessageTableCellWithEditableText(m_selectableTableView, this, m_draftTextBuffer);
}
ContentView * contentView = (ContentView *)new ContentView(m_selectableTableView);
return contentView;
}
void IntervalController::unloadView(View * view) {
delete m_selectableTableView;
m_selectableTableView = nullptr;
for (int i = 0; i < k_maxNumberOfCells; i++) {
delete m_intervalCell[i];
m_intervalCell[i] = nullptr;
}
FloatParameterController::unloadView(view);
}
SelectableTableView * IntervalController::selectableTableView() {
return m_selectableTableView;
}
}

View File

@@ -11,6 +11,7 @@ class IntervalController : public Shared::FloatParameterController {
public:
IntervalController(Responder * parentResponder, EquationStore * equationStore);
const char * title() override;
View * view() override { return &m_contentView; }
int numberOfRows() override;
void willDisplayCellForIndex(HighlightCell * cell, int index) override;
private:
@@ -20,9 +21,6 @@ private:
double parameterAtIndex(int index) override;
bool setParameterAtIndex(int parameterIndex, double f) override;
bool textFieldDidFinishEditing(TextField * textField, const char * text, Ion::Events::Event event) override;
I18n::Message okButtonText() override;
View * loadView() override;
void unloadView(View * view) override;
class ContentView : public View {
public:
ContentView(SelectableTableView * selectableTableView);
@@ -36,11 +34,10 @@ private:
MessageTextView m_instructions1;
SelectableTableView * m_selectableTableView;
};
SelectableTableView * selectableTableView() override;
SelectableTableView * m_selectableTableView;
ContentView m_contentView;
constexpr static int k_maxNumberOfCells = 2;
char m_draftTextBuffer[MessageTableCellWithEditableText::k_bufferLength];
MessageTableCellWithEditableText * m_intervalCell[k_maxNumberOfCells];
MessageTableCellWithEditableText m_intervalCell[k_maxNumberOfCells];
EquationStore * m_equationStore;
};

View File

@@ -12,6 +12,11 @@ HistogramParameterController::HistogramParameterController(Responder * parentRes
m_cells{},
m_store(store)
{
for (int i = 0; i < k_numberOfCells; i++) {
m_cells[i].setParentResponder(&m_selectableTableView);
m_cells[i].textField()->setDelegate(this);
m_cells[i].textField()->setDraftTextBuffer(m_draftTextBuffer);
}
}
const char * HistogramParameterController::title() {
@@ -99,23 +104,7 @@ bool HistogramParameterController::setParameterAtIndex(int parameterIndex, doubl
HighlightCell * HistogramParameterController::reusableParameterCell(int index, int type) {
assert(index >= 0 && index < k_numberOfCells);
return m_cells[index];
}
View * HistogramParameterController::loadView() {
SelectableTableView * tableView = (SelectableTableView *)FloatParameterController::loadView();
for (int i = 0; i < k_numberOfCells; i++) {
m_cells[i] = new MessageTableCellWithEditableText(tableView, this, m_draftTextBuffer, I18n::Message::Default);
}
return tableView;
}
void HistogramParameterController::unloadView(View * view) {
for (int i = 0; i < k_numberOfCells; i++) {
delete m_cells[i];
m_cells[i] = nullptr;
}
FloatParameterController::unloadView(view);
return &m_cells[index];
}
}

View File

@@ -19,10 +19,8 @@ private:
int reusableParameterCellCount(int type) override { return k_numberOfCells; }
double parameterAtIndex(int index) override;
bool setParameterAtIndex(int parameterIndex, double f) override;
View * loadView() override;
void unloadView(View * view) override;
char m_draftTextBuffer[MessageTableCellWithEditableText::k_bufferLength];
MessageTableCellWithEditableText * m_cells[k_numberOfCells];
MessageTableCellWithEditableText m_cells[k_numberOfCells];
Store * m_store;
};

View File

@@ -7,8 +7,9 @@
class MessageTableCellWithEditableText : public Responder, public MessageTableCell {
public:
MessageTableCellWithEditableText(Responder * parentResponder, TextFieldDelegate * textFieldDelegate, char * draftTextBuffer, I18n::Message message = (I18n::Message)0);
MessageTableCellWithEditableText(Responder * parentResponder = nullptr, TextFieldDelegate * textFieldDelegate = nullptr, char * draftTextBuffer = nullptr, I18n::Message message = (I18n::Message)0);
View * accessoryView() const override;
TextField * textField() { return &m_textField; }
const char * editedText() const;
void didBecomeFirstResponder() override;
bool isEditing();