diff --git a/apps/probability/parameters_controller.cpp b/apps/probability/parameters_controller.cpp index 184f547df..f8a306ecb 100644 --- a/apps/probability/parameters_controller.cpp +++ b/apps/probability/parameters_controller.cpp @@ -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(); -} - -} - diff --git a/apps/probability/parameters_controller.h b/apps/probability/parameters_controller.h index 67c843523..26ecf6500 100644 --- a/apps/probability/parameters_controller.h +++ b/apps/probability/parameters_controller.h @@ -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; }; diff --git a/apps/shared/float_parameter_controller.cpp b/apps/shared/float_parameter_controller.cpp index a0717a326..dfc33a6f4 100644 --- a/apps/shared/float_parameter_controller.cpp +++ b/apps/shared/float_parameter_controller.cpp @@ -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; -} - } diff --git a/apps/shared/float_parameter_controller.h b/apps/shared/float_parameter_controller.h index b16b838d8..4a8060ae6 100644 --- a/apps/shared/float_parameter_controller.h +++ b/apps/shared/float_parameter_controller.h @@ -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; }; } diff --git a/apps/shared/go_to_parameter_controller.cpp b/apps/shared/go_to_parameter_controller.cpp index dcb43f8ea..43dc97f1d 100644 --- a/apps/shared/go_to_parameter_controller.cpp +++ b/apps/shared/go_to_parameter_controller.cpp @@ -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); -} - } diff --git a/apps/shared/go_to_parameter_controller.h b/apps/shared/go_to_parameter_controller.h index 07e278d4d..4b4f3986d 100644 --- a/apps/shared/go_to_parameter_controller.h +++ b/apps/shared/go_to_parameter_controller.h @@ -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; }; } diff --git a/apps/shared/interval_parameter_controller.cpp b/apps/shared/interval_parameter_controller.cpp index 2a5e8fb98..075b14eff 100644 --- a/apps/shared/interval_parameter_controller.cpp +++ b/apps/shared/interval_parameter_controller.cpp @@ -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); -} - } diff --git a/apps/shared/interval_parameter_controller.h b/apps/shared/interval_parameter_controller.h index 5adb90772..831273299 100644 --- a/apps/shared/interval_parameter_controller.h +++ b/apps/shared/interval_parameter_controller.h @@ -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]; }; } diff --git a/apps/shared/range_parameter_controller.cpp b/apps/shared/range_parameter_controller.cpp index 6bb97f66a..d2cf2a466 100644 --- a/apps/shared/range_parameter_controller.cpp +++ b/apps/shared/range_parameter_controller.cpp @@ -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); -} - } diff --git a/apps/shared/range_parameter_controller.h b/apps/shared/range_parameter_controller.h index db415c348..faead2a9a 100644 --- a/apps/shared/range_parameter_controller.h +++ b/apps/shared/range_parameter_controller.h @@ -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; }; } diff --git a/apps/solver/interval_controller.cpp b/apps/solver/interval_controller.cpp index 2e0c4a80f..7c4302920 100644 --- a/apps/solver/interval_controller.cpp +++ b/apps/solver/interval_controller.cpp @@ -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; -} - -} - - diff --git a/apps/solver/interval_controller.h b/apps/solver/interval_controller.h index 7a608cc3a..297dbd8e9 100644 --- a/apps/solver/interval_controller.h +++ b/apps/solver/interval_controller.h @@ -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; }; diff --git a/apps/statistics/histogram_parameter_controller.cpp b/apps/statistics/histogram_parameter_controller.cpp index e2d187afd..2d44aa9f1 100644 --- a/apps/statistics/histogram_parameter_controller.cpp +++ b/apps/statistics/histogram_parameter_controller.cpp @@ -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]; } } diff --git a/apps/statistics/histogram_parameter_controller.h b/apps/statistics/histogram_parameter_controller.h index ab20dd019..11598dd76 100644 --- a/apps/statistics/histogram_parameter_controller.h +++ b/apps/statistics/histogram_parameter_controller.h @@ -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; }; diff --git a/escher/include/escher/message_table_cell_with_editable_text.h b/escher/include/escher/message_table_cell_with_editable_text.h index 4f4c2fb43..bbcf472c5 100644 --- a/escher/include/escher/message_table_cell_with_editable_text.h +++ b/escher/include/escher/message_table_cell_with_editable_text.h @@ -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();