diff --git a/apps/graph/graph/goto_parameter_controller.cpp b/apps/graph/graph/goto_parameter_controller.cpp index 910203a9d..56572345e 100644 --- a/apps/graph/graph/goto_parameter_controller.cpp +++ b/apps/graph/graph/goto_parameter_controller.cpp @@ -6,12 +6,10 @@ namespace Graph { GoToParameterController::GoToParameterController(Responder * parentResponder, GraphView * graphView) : FloatParameterController(parentResponder), - m_abscisseCell(EditableTextMenuListCell((char*)"x")), + m_abscisseCell(EditableTextMenuListCell(&m_selectableTableView, this, m_draftTextBuffer, (char*)"x")), m_graphView(graphView), m_function(nullptr) { - m_abscisseCell.setParentResponder(&m_selectableTableView); - m_abscisseCell.setDelegate(this); } ExpressionTextFieldDelegate * GoToParameterController::textFieldDelegate() { diff --git a/apps/graph/graph/goto_parameter_controller.h b/apps/graph/graph/goto_parameter_controller.h index d15055646..f3ca7c7c5 100644 --- a/apps/graph/graph/goto_parameter_controller.h +++ b/apps/graph/graph/goto_parameter_controller.h @@ -19,6 +19,7 @@ public: private: float parameterAtIndex(int index) override; void setParameterAtIndex(int parameterIndex, float f) override; + char m_draftTextBuffer[EditableTextMenuListCell::k_bufferLength]; EditableTextMenuListCell m_abscisseCell; GraphView * m_graphView; Function * m_function; diff --git a/apps/graph/graph/window_parameter_controller.cpp b/apps/graph/graph/window_parameter_controller.cpp index b812fb9b6..18bdc34a1 100644 --- a/apps/graph/graph/window_parameter_controller.cpp +++ b/apps/graph/graph/window_parameter_controller.cpp @@ -8,17 +8,11 @@ namespace Graph { WindowParameterController::WindowParameterController(Responder * parentResponder, GraphWindow * graphWindow, GraphView * graphView) : FloatParameterController(parentResponder), m_graphWindow(graphWindow), + m_windowCells{EditableTextMenuListCell(&m_selectableTableView, this, m_draftTextBuffer, (char *)"Xmin"), EditableTextMenuListCell(&m_selectableTableView, this, m_draftTextBuffer, (char *)"Xmax"), + EditableTextMenuListCell(&m_selectableTableView, this, m_draftTextBuffer, (char *)"Ymin"), EditableTextMenuListCell(&m_selectableTableView, this, m_draftTextBuffer, (char *)"Ymax")}, m_yAutoCell(SwitchMenuListCell((char*)"Y auto")), m_graphView(graphView) { - m_windowCells[0].setText("Xmin"); - m_windowCells[1].setText("Xmax"); - m_windowCells[2].setText("Ymin"); - m_windowCells[3].setText("Ymax"); - for (int k = 0; k < k_numberOfTextCell; k++) { - m_windowCells[k].setParentResponder(&m_selectableTableView); - m_windowCells[k].setDelegate(this); - } } ExpressionTextFieldDelegate * WindowParameterController::textFieldDelegate() { diff --git a/apps/graph/graph/window_parameter_controller.h b/apps/graph/graph/window_parameter_controller.h index 4398c57bb..128e09c00 100644 --- a/apps/graph/graph/window_parameter_controller.h +++ b/apps/graph/graph/window_parameter_controller.h @@ -25,6 +25,7 @@ private: void setParameterAtIndex(int parameterIndex, float f) override; constexpr static int k_numberOfTextCell = 4; GraphWindow * m_graphWindow; + char m_draftTextBuffer[EditableTextMenuListCell::k_bufferLength]; EditableTextMenuListCell m_windowCells[k_numberOfTextCell]; SwitchMenuListCell m_yAutoCell; GraphView * m_graphView; diff --git a/apps/graph/values/editable_value_cell.cpp b/apps/graph/values/editable_value_cell.cpp index 0d7a580fb..4eff5cf0f 100644 --- a/apps/graph/values/editable_value_cell.cpp +++ b/apps/graph/values/editable_value_cell.cpp @@ -5,10 +5,10 @@ namespace Graph { -EditableValueCell::EditableValueCell() : +EditableValueCell::EditableValueCell(char * draftTextBuffer) : EvenOddCell(), Responder(nullptr), - m_textField(TextField(this, m_textBody, m_draftTextBody, 255, nullptr, 1.0f, 0.5f, KDColorBlack, KDColorWhite)) + m_textField(TextField(this, m_textBody, draftTextBuffer, 255, nullptr, 1.0f, 0.5f, KDColorBlack, KDColorWhite)) { } diff --git a/apps/graph/values/editable_value_cell.h b/apps/graph/values/editable_value_cell.h index 71b170fda..7d90ec361 100644 --- a/apps/graph/values/editable_value_cell.h +++ b/apps/graph/values/editable_value_cell.h @@ -7,7 +7,7 @@ namespace Graph { class EditableValueCell : public EvenOddCell, public Responder { public: - EditableValueCell(); + EditableValueCell(char * draftTextBuffer); void setDelegate(TextFieldDelegate * delegate); void reloadCell() override; const char * text() const; @@ -17,10 +17,10 @@ public: void layoutSubviews() override; void didBecomeFirstResponder() override; void setEditing(bool isEditing); + constexpr static int k_bufferLength = 255; private: TextField m_textField; - char m_textBody[255]; - char m_draftTextBody[255]; + char m_textBody[k_bufferLength]; }; } diff --git a/apps/graph/values/interval_parameter_controller.cpp b/apps/graph/values/interval_parameter_controller.cpp index d50a81560..d92281697 100644 --- a/apps/graph/values/interval_parameter_controller.cpp +++ b/apps/graph/values/interval_parameter_controller.cpp @@ -7,9 +7,9 @@ namespace Graph { IntervalParameterController::IntervalParameterController(Responder * parentResponder, Interval * interval) : FloatParameterController(parentResponder), m_interval(interval), - m_intervalStartCell(EditableTextMenuListCell((char*)"X Debut", &m_selectableTableView, this)), - m_intervalEndCell(EditableTextMenuListCell((char*)"X Fin", &m_selectableTableView, this)), - m_intervalStepCell(EditableTextMenuListCell((char*)"Pas", &m_selectableTableView, this)) + m_intervalStartCell(EditableTextMenuListCell(&m_selectableTableView, this, m_draftTextBuffer, (char*)"X Debut")), + m_intervalEndCell(EditableTextMenuListCell(&m_selectableTableView, this, m_draftTextBuffer, (char*)"X Fin")), + m_intervalStepCell(EditableTextMenuListCell(&m_selectableTableView, this, m_draftTextBuffer, (char*)"Pas")) { } diff --git a/apps/graph/values/interval_parameter_controller.h b/apps/graph/values/interval_parameter_controller.h index 84ca34d0c..6337577d4 100644 --- a/apps/graph/values/interval_parameter_controller.h +++ b/apps/graph/values/interval_parameter_controller.h @@ -22,6 +22,7 @@ private: void setParameterAtIndex(int parameterIndex, float f) override; constexpr static int k_totalNumberOfCell = 3; Interval * m_interval; + char m_draftTextBuffer[EditableTextMenuListCell::k_bufferLength]; EditableTextMenuListCell m_intervalStartCell; EditableTextMenuListCell m_intervalEndCell; EditableTextMenuListCell m_intervalStepCell; diff --git a/apps/graph/values/values_controller.cpp b/apps/graph/values/values_controller.cpp index a14bd9a9e..d3c772f54 100644 --- a/apps/graph/values/values_controller.cpp +++ b/apps/graph/values/values_controller.cpp @@ -10,6 +10,8 @@ ValuesController::ValuesController(Responder * parentResponder, FunctionStore * ViewController(parentResponder), HeaderViewDelegate(header), m_selectableTableView(SelectableTableView(this, this, k_topMargin, k_rightMargin, k_bottomMargin, k_leftMargin, this)), + m_abscissaCells{EditableValueCell(m_draftTextBuffer), EditableValueCell(m_draftTextBuffer), EditableValueCell(m_draftTextBuffer),EditableValueCell(m_draftTextBuffer), + EditableValueCell(m_draftTextBuffer), EditableValueCell(m_draftTextBuffer), EditableValueCell(m_draftTextBuffer), EditableValueCell(m_draftTextBuffer)}, m_functionStore(functionStore), m_intervalParameterController(IntervalParameterController(this, &m_interval)), m_abscissaParameterController(AbscissaParameterController(this, &m_intervalParameterController)), diff --git a/apps/graph/values/values_controller.h b/apps/graph/values/values_controller.h index c356c5af4..98e9db298 100644 --- a/apps/graph/values/values_controller.h +++ b/apps/graph/values/values_controller.h @@ -76,6 +76,7 @@ private: TitleCell m_abscissaTitleCell; FunctionTitleCell m_functionTitleCells[k_maxNumberOfFunctions]; ValueCell m_floatCells[k_maxNumberOfCells]; + char m_draftTextBuffer[EditableValueCell::k_bufferLength]; EditableValueCell m_abscissaCells[k_maxNumberOfAbscissaCells]; FunctionStore * m_functionStore; Interval m_interval; diff --git a/apps/probability/calculation_controller.cpp b/apps/probability/calculation_controller.cpp index c141ae377..43e0f1907 100644 --- a/apps/probability/calculation_controller.cpp +++ b/apps/probability/calculation_controller.cpp @@ -5,16 +5,14 @@ namespace Probability { -CalculationController::ContentView::ContentView(Responder * parentResponder,Calculation * calculation) : +CalculationController::ContentView::ContentView(Responder * parentResponder, CalculationController * calculationController, Calculation * calculation) : m_lawCurveView(LawCurveView()), m_imageTableView(ImageTableView(parentResponder, calculation)), + m_calculationCell{EditableTextCell(parentResponder, calculationController, m_draftTextBuffer), + EditableTextCell(parentResponder, calculationController, m_draftTextBuffer), + EditableTextCell(parentResponder, calculationController, m_draftTextBuffer)}, m_calculation(calculation) { - for (int k = 0; k < k_maxNumberOfEditableFields; k++) { - m_calculationCell[k].setParentResponder(parentResponder); - CalculationController * parentController = (CalculationController *)parentResponder; - m_calculationCell[k].setDelegate(parentController); - } } void CalculationController::ContentView::setLaw(Law * law) { @@ -131,7 +129,7 @@ EditableTextCell * CalculationController::ContentView::calculationCellAtIndex(in CalculationController::CalculationController(Responder * parentResponder) : ViewController(parentResponder), - m_contentView(ContentView(this, &m_calculation)), + m_contentView(ContentView(this, this, &m_calculation)), m_highlightedSubviewIndex(1), m_calculation(Calculation()) { diff --git a/apps/probability/calculation_controller.h b/apps/probability/calculation_controller.h index 5748160c0..8ac351514 100644 --- a/apps/probability/calculation_controller.h +++ b/apps/probability/calculation_controller.h @@ -23,7 +23,7 @@ public: private: class ContentView : public View { public: - ContentView(Responder * parentResponder, Calculation * Calculation); + ContentView(Responder * parentResponder, CalculationController * calculationController, Calculation * Calculation); void setLaw(Law * law); void layoutSubviews() override; void drawRect(KDContext * ctx, KDRect rect) const override; @@ -41,6 +41,7 @@ private: LawCurveView m_lawCurveView; ImageTableView m_imageTableView; PointerTextView m_text[k_maxNumberOfEditableFields]; + char m_draftTextBuffer[EditableTextCell::k_bufferLength]; EditableTextCell m_calculationCell[k_maxNumberOfEditableFields]; Calculation * m_calculation; }; diff --git a/apps/probability/parameters_controller.cpp b/apps/probability/parameters_controller.cpp index 9e7884a8b..80bcc4397 100644 --- a/apps/probability/parameters_controller.cpp +++ b/apps/probability/parameters_controller.cpp @@ -70,15 +70,13 @@ void ParametersController::ContentView::layoutSubviews() { ParametersController::ParametersController(Responder * parentResponder) : FloatParameterController(parentResponder), + m_menuListCell{EditableTextMenuListCell(&m_selectableTableView, this, m_draftTextBuffer), + EditableTextMenuListCell(&m_selectableTableView, this, m_draftTextBuffer)}, m_contentView(ContentView(this, &m_selectableTableView)), m_law(nullptr), m_buttonSelected(false), m_calculationController(CalculationController(nullptr)) { - for (int k = 0; k < k_maxNumberOfCells; k++) { - m_menuListCell[k].setParentResponder(&m_selectableTableView); - m_menuListCell[k].setDelegate(this); - } } ExpressionTextFieldDelegate * ParametersController::textFieldDelegate() { diff --git a/apps/probability/parameters_controller.h b/apps/probability/parameters_controller.h index d273ded84..febfc50b7 100644 --- a/apps/probability/parameters_controller.h +++ b/apps/probability/parameters_controller.h @@ -46,6 +46,7 @@ private: SelectableTableView * m_selectableTableView; }; constexpr static int k_maxNumberOfCells = 2; + char m_draftTextBuffer[EditableTextMenuListCell::k_bufferLength]; EditableTextMenuListCell m_menuListCell[k_maxNumberOfCells]; ContentView m_contentView; Law * m_law; diff --git a/escher/include/escher/editable_text_cell.h b/escher/include/escher/editable_text_cell.h index 350df0e61..0f77479e5 100644 --- a/escher/include/escher/editable_text_cell.h +++ b/escher/include/escher/editable_text_cell.h @@ -8,8 +8,7 @@ class EditableTextCell : public TableViewCell, public Responder { public: - EditableTextCell(Responder * parentResponder = nullptr, TextFieldDelegate * delegate = nullptr); - void setDelegate(TextFieldDelegate * delegate); + EditableTextCell(Responder * parentResponder, TextFieldDelegate * delegate, char * draftTextBuffer); void reloadCell() override; const char * text() const; void setText(const char * textContent); @@ -18,12 +17,12 @@ public: void layoutSubviews() override; void didBecomeFirstResponder() override; void setEditing(bool isEditing); + constexpr static int k_bufferLength = 255; private: constexpr static KDCoordinate k_textHeight = 12; constexpr static KDCoordinate k_separatorThickness = 1; TextField m_textField; - char m_textBody[255]; - char m_draftTextBody[255]; + char m_textBody[k_bufferLength]; }; #endif diff --git a/escher/include/escher/editable_text_menu_list_cell.h b/escher/include/escher/editable_text_menu_list_cell.h index 65527ade1..69abecf72 100644 --- a/escher/include/escher/editable_text_menu_list_cell.h +++ b/escher/include/escher/editable_text_menu_list_cell.h @@ -7,8 +7,7 @@ class EditableTextMenuListCell : public Responder, public MenuListCell { public: - EditableTextMenuListCell(char * label = nullptr, Responder * parentResponder = nullptr, TextFieldDelegate * textFieldDelegate = nullptr); - void setDelegate(TextFieldDelegate * delegate); + EditableTextMenuListCell(Responder * parentResponder, TextFieldDelegate * textFieldDelegate, char * draftTextBuffer, char * label = nullptr); View * accessoryView() const override; const char * editedText() const; void layoutSubviews() override; @@ -17,12 +16,12 @@ public: void reloadCell() override; void setAccessoryText(const char * text); void setTextColor(KDColor color) override; + constexpr static int k_bufferLength = 255; private: constexpr static KDCoordinate k_textWidth = 7*7; constexpr static KDCoordinate k_textHeight = 12; TextField m_textField; - char m_textBody[255]; - char m_draftTextBody[255]; + char m_textBody[k_bufferLength]; }; #endif diff --git a/escher/src/editable_text_cell.cpp b/escher/src/editable_text_cell.cpp index f73b95aa3..d90c65f15 100644 --- a/escher/src/editable_text_cell.cpp +++ b/escher/src/editable_text_cell.cpp @@ -3,17 +3,13 @@ #include #include -EditableTextCell::EditableTextCell(Responder * parentResponder, TextFieldDelegate * delegate) : +EditableTextCell::EditableTextCell(Responder * parentResponder, TextFieldDelegate * delegate, char * draftTextBuffer) : TableViewCell(), Responder(parentResponder), - m_textField(TextField(this, m_textBody, m_draftTextBody, 255, delegate)) + m_textField(TextField(this, m_textBody, draftTextBuffer, 255, delegate)) { } -void EditableTextCell::setDelegate(TextFieldDelegate * delegate) { - m_textField.setTextFieldDelegate(delegate); -} - void EditableTextCell::reloadCell() { TableViewCell::reloadCell(); KDColor backgroundColor = isHighlighted()? Palette::FocusCellBackgroundColor : Palette::CellBackgroundColor; diff --git a/escher/src/editable_text_menu_list_cell.cpp b/escher/src/editable_text_menu_list_cell.cpp index 6b1de84ac..4b0304407 100644 --- a/escher/src/editable_text_menu_list_cell.cpp +++ b/escher/src/editable_text_menu_list_cell.cpp @@ -1,17 +1,13 @@ #include #include -EditableTextMenuListCell::EditableTextMenuListCell(char * label, Responder * parentResponder, TextFieldDelegate * textFieldDelegate) : +EditableTextMenuListCell::EditableTextMenuListCell(Responder * parentResponder, TextFieldDelegate * textFieldDelegate, char * draftTextBuffer, char * label) : Responder(parentResponder), MenuListCell(label), - m_textField(TextField(this, m_textBody, m_draftTextBody, 255, textFieldDelegate)) + m_textField(TextField(this, m_textBody, draftTextBuffer, 255, textFieldDelegate)) { } -void EditableTextMenuListCell::setDelegate(TextFieldDelegate * delegate) { - m_textField.setTextFieldDelegate(delegate); -} - View * EditableTextMenuListCell::accessoryView() const { return (View *)&m_textField; }