diff --git a/apps/calculation/app.cpp b/apps/calculation/app.cpp index f08dc917c..5750ef81b 100644 --- a/apps/calculation/app.cpp +++ b/apps/calculation/app.cpp @@ -47,7 +47,7 @@ void App::Snapshot::tidy() { App::App(Container * container, Snapshot * snapshot) : ExpressionFieldDelegateApp(container, snapshot, &m_editExpressionController), m_historyController(&m_editExpressionController, snapshot->calculationStore()), - m_editExpressionController(&m_modalViewController, &m_historyController, snapshot->calculationStore()) + m_editExpressionController(&m_modalViewController, this, &m_historyController, snapshot->calculationStore()) { } diff --git a/apps/calculation/edit_expression_controller.cpp b/apps/calculation/edit_expression_controller.cpp index a1920bc01..3464d9e41 100644 --- a/apps/calculation/edit_expression_controller.cpp +++ b/apps/calculation/edit_expression_controller.cpp @@ -10,10 +10,10 @@ using namespace Poincare; namespace Calculation { -EditExpressionController::ContentView::ContentView(Responder * parentResponder, TableView * subview, TextFieldDelegate * textFieldDelegate, LayoutFieldDelegate * layoutFieldDelegate) : +EditExpressionController::ContentView::ContentView(Responder * parentResponder, TableView * subview, InputEventHandlerDelegate * inputEventHandlerDelegate, TextFieldDelegate * textFieldDelegate, LayoutFieldDelegate * layoutFieldDelegate) : View(), m_mainView(subview), - m_expressionField(parentResponder, m_textBody, k_bufferLength, textFieldDelegate, layoutFieldDelegate) + m_expressionField(parentResponder, m_textBody, k_bufferLength, inputEventHandlerDelegate, textFieldDelegate, layoutFieldDelegate) { m_textBody[0] = 0; } @@ -40,11 +40,11 @@ void EditExpressionController::ContentView::reload() { markRectAsDirty(bounds()); } -EditExpressionController::EditExpressionController(Responder * parentResponder, HistoryController * historyController, CalculationStore * calculationStore) : +EditExpressionController::EditExpressionController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, HistoryController * historyController, CalculationStore * calculationStore) : ViewController(parentResponder), m_historyController(historyController), m_calculationStore(calculationStore), - m_contentView(this, (TableView *)m_historyController->view(), this, this), + m_contentView(this, (TableView *)m_historyController->view(), inputEventHandlerDelegate, this, this), m_inputViewHeightIsMaximal(false) { m_cacheBuffer[0] = 0; diff --git a/apps/calculation/edit_expression_controller.h b/apps/calculation/edit_expression_controller.h index 6032868f1..f0923cae5 100644 --- a/apps/calculation/edit_expression_controller.h +++ b/apps/calculation/edit_expression_controller.h @@ -15,7 +15,7 @@ class HistoryController; /* TODO: implement a split view */ class EditExpressionController : public ViewController, public Shared::TextFieldDelegate, public Shared::LayoutFieldDelegate { public: - EditExpressionController(Responder * parentResponder, HistoryController * historyController, CalculationStore * calculationStore); + EditExpressionController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, HistoryController * historyController, CalculationStore * calculationStore); View * view() override; void didBecomeFirstResponder() override; void viewDidDisappear() override; @@ -36,7 +36,7 @@ public: private: class ContentView : public View { public: - ContentView(Responder * parentResponder, TableView * subview, TextFieldDelegate * textFieldDelegate, LayoutFieldDelegate * layoutFieldDelegate); + ContentView(Responder * parentResponder, TableView * subview, InputEventHandlerDelegate * inputEventHandlerDelegate, TextFieldDelegate * textFieldDelegate, LayoutFieldDelegate * layoutFieldDelegate); void reload(); TableView * mainView() { return m_mainView; } ExpressionField * expressionField() { return &m_expressionField; } diff --git a/apps/code/app.cpp b/apps/code/app.cpp index 78b4855fc..ed956a5dd 100644 --- a/apps/code/app.cpp +++ b/apps/code/app.cpp @@ -76,7 +76,7 @@ void App::Snapshot::setOpt(const char * name, char * value) { #endif App::App(Container * container, Snapshot * snapshot) : - ::App(container, snapshot, &m_codeStackViewController, I18n::Message::Warning), + Shared::InputEventHandlerDelegateApp(container, snapshot, &m_codeStackViewController), m_pythonHeap{}, m_pythonUser(nullptr), m_consoleController(nullptr, this, snapshot->scriptStore() @@ -109,6 +109,10 @@ bool App::handleEvent(Ion::Events::Event event) { return false; } +Toolbox * App::toolboxForInputEventHandler(InputEventHandler * textInput) { + return &m_toolbox; +} + bool App::textInputDidReceiveEvent(InputEventHandler * textInput, Ion::Events::Event event) { const char * pythonText = Helpers::PythonTextForEvent(event); if (pythonText != nullptr) { diff --git a/apps/code/app.h b/apps/code/app.h index 2f60448bd..de7dd3f19 100644 --- a/apps/code/app.h +++ b/apps/code/app.h @@ -3,6 +3,7 @@ #include #include +#include "../shared/input_event_handler_delegate_app.h" #include "console_controller.h" #include "menu_controller.h" #include "script_store.h" @@ -11,9 +12,9 @@ namespace Code { -class App : public ::App { +class App : public Shared::InputEventHandlerDelegateApp { public: - class Descriptor : public ::App::Descriptor { + class Descriptor : public Shared::InputEventHandlerDelegateApp::Descriptor { public: I18n::Message name() override; I18n::Message upperName() override; @@ -39,8 +40,13 @@ public: ~App(); StackViewController * stackViewController() { return &m_codeStackViewController; } ConsoleController * consoleController() { return &m_consoleController; } - PythonToolbox * pythonToolbox() { return &m_toolbox; } + + /* Responder */ bool handleEvent(Ion::Events::Event event) override; + + /* InputEventHandlerDelegate */ + Toolbox * toolboxForInputEventHandler(InputEventHandler * textInput) override; + bool textInputDidReceiveEvent(InputEventHandler * textInput, Ion::Events::Event event); // Python delegate bool pythonIsInited() { return m_pythonUser != nullptr; } diff --git a/apps/code/console_controller.cpp b/apps/code/console_controller.cpp index 5940041f1..c53a33af5 100644 --- a/apps/code/console_controller.cpp +++ b/apps/code/console_controller.cpp @@ -28,7 +28,7 @@ ConsoleController::ConsoleController(Responder * parentResponder, App * pythonDe m_rowHeight(k_font->glyphSize().height()), m_importScriptsWhenViewAppears(false), m_selectableTableView(this, this, this, this), - m_editCell(this, this), + m_editCell(this, pythonDelegate, this), m_scriptStore(scriptStore), m_sandboxController(this), m_inputRunLoopActive(false) @@ -291,11 +291,6 @@ bool ConsoleController::textFieldDidAbortEditing(TextField * textField) { return true; } -Toolbox * ConsoleController::toolboxForInputEventHandler(InputEventHandler * textInput) { - Code::App * codeApp = static_cast(app()); - return codeApp->pythonToolbox(); -} - void ConsoleController::displaySandbox() { if (m_sandboxIsDisplayed) { return; diff --git a/apps/code/console_controller.h b/apps/code/console_controller.h index 9e039d33d..48a6750f7 100644 --- a/apps/code/console_controller.h +++ b/apps/code/console_controller.h @@ -60,7 +60,6 @@ public: bool textFieldDidReceiveEvent(TextField * textField, Ion::Events::Event event) override; bool textFieldDidFinishEditing(TextField * textField, const char * text, Ion::Events::Event event) override; bool textFieldDidAbortEditing(TextField * textField) override; - Toolbox * toolboxForInputEventHandler(InputEventHandler * textInput) override; // MicroPython::ExecutionEnvironment void displaySandbox() override; diff --git a/apps/code/console_edit_cell.cpp b/apps/code/console_edit_cell.cpp index f1588275a..9fc5ff585 100644 --- a/apps/code/console_edit_cell.cpp +++ b/apps/code/console_edit_cell.cpp @@ -6,12 +6,12 @@ namespace Code { -ConsoleEditCell::ConsoleEditCell(Responder * parentResponder, TextFieldDelegate * delegate) : +ConsoleEditCell::ConsoleEditCell(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, TextFieldDelegate * delegate) : HighlightCell(), Responder(parentResponder), m_textBuffer{0}, m_promptView(ConsoleController::k_font, nullptr, 0, 0.5), - m_textField(this, m_textBuffer, m_textBuffer, TextField::maxBufferSize(), delegate, false, ConsoleController::k_font) + m_textField(this, m_textBuffer, m_textBuffer, TextField::maxBufferSize(), inputEventHandlerDelegate, delegate, false, ConsoleController::k_font) { } diff --git a/apps/code/console_edit_cell.h b/apps/code/console_edit_cell.h index 536be0b43..8a6b2d9b3 100644 --- a/apps/code/console_edit_cell.h +++ b/apps/code/console_edit_cell.h @@ -11,7 +11,7 @@ namespace Code { class ConsoleEditCell : public HighlightCell, public Responder { public: - ConsoleEditCell(Responder * parentResponder = nullptr, TextFieldDelegate * delegate = nullptr); + ConsoleEditCell(Responder * parentResponder = nullptr, InputEventHandlerDelegate * inputEventHandlerDelegate = nullptr, TextFieldDelegate * delegate = nullptr); // View int numberOfSubviews() const override; diff --git a/apps/code/editor_controller.cpp b/apps/code/editor_controller.cpp index 15dcd4f1f..b08658822 100644 --- a/apps/code/editor_controller.cpp +++ b/apps/code/editor_controller.cpp @@ -14,7 +14,7 @@ EditorController::EditorController(MenuController * menuController, App * python m_script(Ion::Storage::Record()), m_menuController(menuController) { - m_editorView.setTextAreaDelegate(this); + m_editorView.setTextAreaDelegates(pythonDelegate, this); } void EditorController::setScript(Script script) { @@ -127,11 +127,6 @@ bool EditorController::textAreaDidReceiveEvent(TextArea * textArea, Ion::Events: return false; } -Toolbox * EditorController::toolboxForInputEventHandler(InputEventHandler * textInput) { - Code::App * codeApp = static_cast(app()); - return codeApp->pythonToolbox(); -} - StackViewController * EditorController::stackController() { return static_cast(parentResponder()); } diff --git a/apps/code/editor_controller.h b/apps/code/editor_controller.h index 9b2789a1e..807c3d003 100644 --- a/apps/code/editor_controller.h +++ b/apps/code/editor_controller.h @@ -25,7 +25,6 @@ public: /* TextAreaDelegate */ bool textAreaDidReceiveEvent(TextArea * textArea, Ion::Events::Event event) override; - Toolbox * toolboxForInputEventHandler(InputEventHandler * textInput) override; private: static constexpr int k_indentationSpacesNumber = 2; diff --git a/apps/code/editor_view.h b/apps/code/editor_view.h index 9fdeead33..16cb0749c 100644 --- a/apps/code/editor_view.h +++ b/apps/code/editor_view.h @@ -1,7 +1,7 @@ #ifndef CODE_EDITOR_VIEW_H #define CODE_EDITOR_VIEW_H -#include +#include #include "python_text_area.h" namespace Code { @@ -9,8 +9,8 @@ namespace Code { class EditorView : public Responder, public View, public ScrollViewDelegate { public: EditorView(Responder * parentResponder, App * pythonDelegate); - void setTextAreaDelegate(TextAreaDelegate * delegate) { - m_textArea.setDelegate(delegate); + void setTextAreaDelegates(InputEventHandlerDelegate * inputEventHandlerDelegate, TextAreaDelegate * delegate) { + m_textArea.setDelegates(inputEventHandlerDelegate, delegate); } const char * text() const { return m_textArea.text(); } void setText(char * textBuffer, size_t textBufferSize) { diff --git a/apps/code/menu_controller.cpp b/apps/code/menu_controller.cpp index 411d2b99a..9df0ef399 100644 --- a/apps/code/menu_controller.cpp +++ b/apps/code/menu_controller.cpp @@ -30,7 +30,7 @@ MenuController::MenuController(Responder * parentResponder, App * pythonDelegate m_addNewScriptCell.setMessage(I18n::Message::AddScript); for (int i = 0; i < k_maxNumberOfDisplayableScriptCells; i++) { m_scriptCells[i].setParentResponder(&m_selectableTableView); - m_scriptCells[i].textField()->setDelegate(this); + m_scriptCells[i].textField()->setDelegates(nullptr, this); } } diff --git a/apps/code/menu_controller.h b/apps/code/menu_controller.h index 6bcbb6454..0f055a9c7 100644 --- a/apps/code/menu_controller.h +++ b/apps/code/menu_controller.h @@ -54,7 +54,6 @@ public: bool textFieldDidFinishEditing(TextField * textField, const char * text, Ion::Events::Event event) override; bool textFieldDidAbortEditing(TextField * textField) override; bool textFieldDidHandleEvent(TextField * textField, bool returnValue, bool textHasChanged) override; - Toolbox * toolboxForInputEventHandler(InputEventHandler * textInput) override { return nullptr; } /* ButtonRowDelegate */ int numberOfButtons(ButtonRowController::Position position) const override { return 1; } diff --git a/apps/code/script_name_cell.h b/apps/code/script_name_cell.h index 31aaddf73..360e1f17c 100644 --- a/apps/code/script_name_cell.h +++ b/apps/code/script_name_cell.h @@ -15,7 +15,7 @@ public: ScriptNameCell(Responder * parentResponder = nullptr, TextFieldDelegate * delegate = nullptr) : EvenOddCell(), Responder(parentResponder), - m_textField(k_extensionLength, this, m_textBody, m_textBody, TextField::maxBufferSize(), delegate, false) + m_textField(k_extensionLength, this, m_textBody, m_textBody, TextField::maxBufferSize(), nullptr, delegate, false) {} Shared::TextFieldWithExtension * textField() { return &m_textField; } diff --git a/apps/graph/app.cpp b/apps/graph/app.cpp index cb5df820a..f2accdff6 100644 --- a/apps/graph/app.cpp +++ b/apps/graph/app.cpp @@ -61,16 +61,16 @@ App::App(Container * container, Snapshot * snapshot) : m_listFooter(&m_listHeader, &m_listController, &m_listController, ButtonRowController::Position::Bottom, ButtonRowController::Style::EmbossedGrey), m_listHeader(&m_listStackViewController, &m_listFooter, &m_listController), m_listStackViewController(&m_tabViewController, &m_listHeader), - m_graphController(&m_graphAlternateEmptyViewController, snapshot->functionStore(), snapshot->graphRange(), snapshot->cursor(), snapshot->indexFunctionSelectedByCursor(), snapshot->modelVersion(), snapshot->rangeVersion(), snapshot->angleUnitVersion(), &m_graphHeader), + m_graphController(&m_graphAlternateEmptyViewController, this, snapshot->functionStore(), snapshot->graphRange(), snapshot->cursor(), snapshot->indexFunctionSelectedByCursor(), snapshot->modelVersion(), snapshot->rangeVersion(), snapshot->angleUnitVersion(), &m_graphHeader), m_graphAlternateEmptyViewController(&m_graphHeader, &m_graphController, &m_graphController), m_graphHeader(&m_graphStackViewController, &m_graphAlternateEmptyViewController, &m_graphController), m_graphStackViewController(&m_tabViewController, &m_graphHeader), - m_valuesController(&m_valuesAlternateEmptyViewController, snapshot->interval(), &m_valuesHeader), + m_valuesController(&m_valuesAlternateEmptyViewController, this, snapshot->interval(), &m_valuesHeader), m_valuesAlternateEmptyViewController(&m_valuesHeader, &m_valuesController, &m_valuesController), m_valuesHeader(&m_valuesStackViewController, &m_valuesAlternateEmptyViewController, &m_valuesController), m_valuesStackViewController(&m_tabViewController, &m_valuesHeader), m_tabViewController(&m_inputViewController, snapshot, &m_listStackViewController, &m_graphStackViewController, &m_valuesStackViewController), - m_inputViewController(&m_modalViewController, &m_tabViewController, this, this) + m_inputViewController(&m_modalViewController, &m_tabViewController, this, this, this) { } diff --git a/apps/graph/graph/calculation_parameter_controller.cpp b/apps/graph/graph/calculation_parameter_controller.cpp index 88cae180c..cd5bb5877 100644 --- a/apps/graph/graph/calculation_parameter_controller.cpp +++ b/apps/graph/graph/calculation_parameter_controller.cpp @@ -7,12 +7,12 @@ using namespace Shared; namespace Graph { -CalculationParameterController::CalculationParameterController(Responder * parentResponder, GraphView * graphView, BannerView * bannerView, InteractiveCurveViewRange * range, CurveViewCursor * cursor) : +CalculationParameterController::CalculationParameterController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, GraphView * graphView, BannerView * bannerView, InteractiveCurveViewRange * range, CurveViewCursor * cursor) : ViewController(parentResponder), m_selectableTableView(this), m_record(), m_tangentGraphController(nullptr, graphView, bannerView, range, cursor), - m_integralGraphController(nullptr, graphView, range, cursor), + m_integralGraphController(nullptr, inputEventHandlerDelegate, graphView, range, cursor), m_minimumGraphController(nullptr, graphView, bannerView, range, cursor), m_maximumGraphController(nullptr, graphView, bannerView, range, cursor), m_rootGraphController(nullptr, graphView, bannerView, range, cursor), diff --git a/apps/graph/graph/calculation_parameter_controller.h b/apps/graph/graph/calculation_parameter_controller.h index e271d0334..a875c759e 100644 --- a/apps/graph/graph/calculation_parameter_controller.h +++ b/apps/graph/graph/calculation_parameter_controller.h @@ -16,7 +16,7 @@ namespace Graph { class CalculationParameterController : public ViewController, public SimpleListViewDataSource, public SelectableTableViewDataSource { public: - CalculationParameterController(Responder * parentResponder, GraphView * graphView, BannerView * bannerView, Shared::InteractiveCurveViewRange * range, Shared::CurveViewCursor * cursor); + CalculationParameterController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, GraphView * graphView, BannerView * bannerView, Shared::InteractiveCurveViewRange * range, Shared::CurveViewCursor * cursor); View * view() override; const char * title() override; bool handleEvent(Ion::Events::Event event) override; diff --git a/apps/graph/graph/curve_parameter_controller.cpp b/apps/graph/graph/curve_parameter_controller.cpp index 18f9f6383..e5e9da038 100644 --- a/apps/graph/graph/curve_parameter_controller.cpp +++ b/apps/graph/graph/curve_parameter_controller.cpp @@ -7,13 +7,13 @@ using namespace Shared; namespace Graph { -CurveParameterController::CurveParameterController(InteractiveCurveViewRange * graphRange, BannerView * bannerView, CurveViewCursor * cursor, GraphView * graphView, GraphController * graphController) : +CurveParameterController::CurveParameterController(InputEventHandlerDelegate * inputEventHandlerDelegate, InteractiveCurveViewRange * graphRange, BannerView * bannerView, CurveViewCursor * cursor, GraphView * graphView, GraphController * graphController) : StorageFunctionCurveParameterController(graphRange, cursor), - m_goToParameterController(this, graphRange, cursor, I18n::Message::X), + m_goToParameterController(this, inputEventHandlerDelegate, graphRange, cursor, I18n::Message::X), m_graphController(graphController), m_calculationCell(I18n::Message::Compute), m_derivativeCell(I18n::Message::DerivateNumber), - m_calculationParameterController(this, graphView, bannerView, graphRange, cursor) + m_calculationParameterController(this, inputEventHandlerDelegate, graphView, bannerView, graphRange, cursor) { } diff --git a/apps/graph/graph/curve_parameter_controller.h b/apps/graph/graph/curve_parameter_controller.h index c75356395..1588a2b30 100644 --- a/apps/graph/graph/curve_parameter_controller.h +++ b/apps/graph/graph/curve_parameter_controller.h @@ -11,7 +11,7 @@ class GraphController; class CurveParameterController : public Shared::StorageFunctionCurveParameterController { public: - CurveParameterController(Shared::InteractiveCurveViewRange * graphRange, BannerView * bannerView, Shared::CurveViewCursor * cursor, GraphView * graphView, GraphController * graphController); + CurveParameterController(InputEventHandlerDelegate * inputEventHandlerDelegate, Shared::InteractiveCurveViewRange * graphRange, BannerView * bannerView, Shared::CurveViewCursor * cursor, GraphView * graphView, GraphController * graphController); const char * title() override; bool handleEvent(Ion::Events::Event event) override; int numberOfRows() override; diff --git a/apps/graph/graph/graph_controller.cpp b/apps/graph/graph/graph_controller.cpp index 1deb1f546..93aff8660 100644 --- a/apps/graph/graph/graph_controller.cpp +++ b/apps/graph/graph/graph_controller.cpp @@ -5,12 +5,12 @@ using namespace Shared; namespace Graph { -GraphController::GraphController(Responder * parentResponder, StorageCartesianFunctionStore * functionStore, Shared::InteractiveCurveViewRange * curveViewRange, CurveViewCursor * cursor, int * indexFunctionSelectedByCursor, uint32_t * modelVersion, uint32_t * rangeVersion, Poincare::Preferences::AngleUnit * angleUnitVersion, ButtonRowController * header) : - StorageFunctionGraphController(parentResponder, header, curveViewRange, &m_view, cursor, indexFunctionSelectedByCursor, modelVersion, rangeVersion, angleUnitVersion), +GraphController::GraphController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, StorageCartesianFunctionStore * functionStore, Shared::InteractiveCurveViewRange * curveViewRange, CurveViewCursor * cursor, int * indexFunctionSelectedByCursor, uint32_t * modelVersion, uint32_t * rangeVersion, Poincare::Preferences::AngleUnit * angleUnitVersion, ButtonRowController * header) : + StorageFunctionGraphController(parentResponder, inputEventHandlerDelegate, header, curveViewRange, &m_view, cursor, indexFunctionSelectedByCursor, modelVersion, rangeVersion, angleUnitVersion), m_bannerView(), m_view(functionStore, curveViewRange, m_cursor, &m_bannerView, &m_cursorView), m_graphRange(curveViewRange), - m_curveParameterController(curveViewRange, &m_bannerView, m_cursor, &m_view, this), + m_curveParameterController(inputEventHandlerDelegate, curveViewRange, &m_bannerView, m_cursor, &m_view, this), m_displayDerivativeInBanner(false) { m_graphRange->setDelegate(this); diff --git a/apps/graph/graph/graph_controller.h b/apps/graph/graph/graph_controller.h index 8092f3c54..d14ee8741 100644 --- a/apps/graph/graph/graph_controller.h +++ b/apps/graph/graph/graph_controller.h @@ -15,7 +15,7 @@ namespace Graph { class GraphController : public Shared::StorageFunctionGraphController, public GraphControllerHelper { public: - GraphController(Responder * parentResponder, StorageCartesianFunctionStore * functionStore, Shared::InteractiveCurveViewRange * curveViewRange, Shared::CurveViewCursor * cursor, int * indexFunctionSelectedByCursor, uint32_t * modelVersion, uint32_t * rangeVersion, Poincare::Preferences::AngleUnit * angleUnitVersion, ButtonRowController * header); + GraphController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, StorageCartesianFunctionStore * functionStore, Shared::InteractiveCurveViewRange * curveViewRange, Shared::CurveViewCursor * cursor, int * indexFunctionSelectedByCursor, uint32_t * modelVersion, uint32_t * rangeVersion, Poincare::Preferences::AngleUnit * angleUnitVersion, ButtonRowController * header); I18n::Message emptyMessage() override; void viewWillAppear() override; bool displayDerivativeInBanner() const; diff --git a/apps/graph/graph/integral_graph_controller.cpp b/apps/graph/graph/integral_graph_controller.cpp index c3886e2b5..2ce449b95 100644 --- a/apps/graph/graph/integral_graph_controller.cpp +++ b/apps/graph/graph/integral_graph_controller.cpp @@ -12,8 +12,8 @@ using namespace Poincare; namespace Graph { -IntegralGraphController::IntegralGraphController(Responder * parentResponder, GraphView * graphView, InteractiveCurveViewRange * graphRange, CurveViewCursor * cursor) : - StorageSumGraphController(parentResponder, graphView, graphRange, cursor, Ion::Charset::Integral) +IntegralGraphController::IntegralGraphController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, GraphView * graphView, InteractiveCurveViewRange * graphRange, CurveViewCursor * cursor) : + StorageSumGraphController(parentResponder, inputEventHandlerDelegate, graphView, graphRange, cursor, Ion::Charset::Integral) { } diff --git a/apps/graph/graph/integral_graph_controller.h b/apps/graph/graph/integral_graph_controller.h index 0840afd1e..67f56fb00 100644 --- a/apps/graph/graph/integral_graph_controller.h +++ b/apps/graph/graph/integral_graph_controller.h @@ -9,7 +9,7 @@ namespace Graph { class IntegralGraphController : public Shared::StorageSumGraphController { public: - IntegralGraphController(Responder * parentResponder, GraphView * graphView, Shared::InteractiveCurveViewRange * graphRange, Shared::CurveViewCursor * cursor); + IntegralGraphController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, GraphView * graphView, Shared::InteractiveCurveViewRange * graphRange, Shared::CurveViewCursor * cursor); const char * title() override; private: I18n::Message legendMessageAtStep(Step step) override; diff --git a/apps/graph/list/text_field_function_title_cell.cpp b/apps/graph/list/text_field_function_title_cell.cpp index 552fde782..4cd6dd5b7 100644 --- a/apps/graph/list/text_field_function_title_cell.cpp +++ b/apps/graph/list/text_field_function_title_cell.cpp @@ -7,7 +7,7 @@ namespace Graph { TextFieldFunctionTitleCell::TextFieldFunctionTitleCell(StorageListController * listController, Orientation orientation, const KDFont * font) : Shared::FunctionTitleCell(orientation), Responder(listController), - m_textField(Shared::StorageFunction::k_parenthesedArgumentLength, this, m_textFieldBuffer, m_textFieldBuffer, k_textFieldBufferSize, listController, false, font, 0.5f, 0.5f) + m_textField(Shared::StorageFunction::k_parenthesedArgumentLength, this, m_textFieldBuffer, m_textFieldBuffer, k_textFieldBufferSize, nullptr, listController, false, font, 0.5f, 0.5f) {} void TextFieldFunctionTitleCell::setHighlighted(bool highlight) { diff --git a/apps/graph/values/storage_values_controller.cpp b/apps/graph/values/storage_values_controller.cpp index dec848f65..988d14d10 100644 --- a/apps/graph/values/storage_values_controller.cpp +++ b/apps/graph/values/storage_values_controller.cpp @@ -7,12 +7,12 @@ using namespace Poincare; namespace Graph { -StorageValuesController::StorageValuesController(Responder * parentResponder, Interval * interval, ButtonRowController * header) : - Shared::StorageValuesController(parentResponder, header, I18n::Message::X, &m_intervalParameterController, interval), +StorageValuesController::StorageValuesController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, Interval * interval, ButtonRowController * header) : + Shared::StorageValuesController(parentResponder, inputEventHandlerDelegate, header, I18n::Message::X, &m_intervalParameterController, interval), m_functionTitleCells{}, m_floatCells{}, m_functionParameterController(this), - m_intervalParameterController(this, m_interval), + m_intervalParameterController(this, inputEventHandlerDelegate, m_interval), m_derivativeParameterController(this) { for (int i = 0; i < k_maxNumberOfFunctions; i++) { diff --git a/apps/graph/values/storage_values_controller.h b/apps/graph/values/storage_values_controller.h index dd066f686..e97a53fe7 100644 --- a/apps/graph/values/storage_values_controller.h +++ b/apps/graph/values/storage_values_controller.h @@ -12,7 +12,7 @@ namespace Graph { class StorageValuesController : public Shared::StorageValuesController { public: - StorageValuesController(Responder * parentResponder, Shared::Interval * interval, ButtonRowController * header); + StorageValuesController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, Shared::Interval * interval, ButtonRowController * header); bool handleEvent(Ion::Events::Event event) override; void willDisplayCellAtLocation(HighlightCell * cell, int i, int j) override; I18n::Message emptyMessage() override; diff --git a/apps/probability/app.cpp b/apps/probability/app.cpp index eda77630a..fcc3cbef1 100644 --- a/apps/probability/app.cpp +++ b/apps/probability/app.cpp @@ -69,8 +69,8 @@ App::Snapshot::Page App::Snapshot::activePage() { App::App(Container * container, Snapshot * snapshot) : TextFieldDelegateApp(container, snapshot, &m_stackViewController), - m_calculationController(&m_stackViewController, snapshot->law(), snapshot->calculation()), - m_parametersController(&m_stackViewController, snapshot->law(), &m_calculationController), + m_calculationController(&m_stackViewController, this, snapshot->law(), snapshot->calculation()), + m_parametersController(&m_stackViewController, this, snapshot->law(), &m_calculationController), m_lawController(&m_stackViewController, snapshot->law(), &m_parametersController), m_stackViewController(&m_modalViewController, &m_lawController) { diff --git a/apps/probability/calculation_cell.cpp b/apps/probability/calculation_cell.cpp index cf892a8c8..0caf55d1d 100644 --- a/apps/probability/calculation_cell.cpp +++ b/apps/probability/calculation_cell.cpp @@ -5,9 +5,9 @@ namespace Probability { -CalculationCell::CalculationCell(Responder * parentResponder, char * draftTextBuffer, TextFieldDelegate * textFieldDelegate) : +CalculationCell::CalculationCell(Responder * parentResponder, char * draftTextBuffer, InputEventHandlerDelegate * inputEventHandlerDelegate, TextFieldDelegate * textFieldDelegate) : m_text(KDFont::LargeFont, I18n::Message::Default, 0.5f, 0.5f), - m_calculation(parentResponder, textFieldDelegate, draftTextBuffer), + m_calculation(parentResponder, inputEventHandlerDelegate, textFieldDelegate, draftTextBuffer), m_isResponder(true) { } diff --git a/apps/probability/calculation_cell.h b/apps/probability/calculation_cell.h index 8f2e9f56f..62eab6edd 100644 --- a/apps/probability/calculation_cell.h +++ b/apps/probability/calculation_cell.h @@ -7,7 +7,7 @@ namespace Probability { class CalculationCell : public HighlightCell { public: - CalculationCell(Responder * parentResponder = nullptr, char * draftTextBuffer = nullptr, TextFieldDelegate * textFieldDelegate = nullptr); + CalculationCell(Responder * parentResponder = nullptr, char * draftTextBuffer = nullptr, InputEventHandlerDelegate * inputEventHandlerDelegate = nullptr, TextFieldDelegate * textFieldDelegate = nullptr); Responder * responder() override; void setResponder(bool shouldbeResponder); void setHighlighted(bool highlight) override; diff --git a/apps/probability/calculation_controller.cpp b/apps/probability/calculation_controller.cpp index f5395066b..e7cb86b31 100644 --- a/apps/probability/calculation_controller.cpp +++ b/apps/probability/calculation_controller.cpp @@ -53,7 +53,7 @@ void CalculationController::ContentView::layoutSubviews() { m_lawCurveView.setFrame(KDRect(0, titleHeight+calculationHeight, bounds().width(), bounds().height() - calculationHeight - titleHeight)); } -CalculationController::CalculationController(Responder * parentResponder, Law * law, Calculation * calculation) : +CalculationController::CalculationController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, Law * law, Calculation * calculation) : ViewController(parentResponder), m_contentView(&m_selectableTableView, law, calculation), m_selectableTableView(this), @@ -72,7 +72,7 @@ CalculationController::CalculationController(Responder * parentResponder, Law * for (int i = 0; i < k_numberOfCalculationCells; i++) { m_calculationCells[i].editableTextCell()->setParentResponder(&m_selectableTableView); - m_calculationCells[i].editableTextCell()->textField()->setDelegate(this); + m_calculationCells[i].editableTextCell()->textField()->setDelegates(inputEventHandlerDelegate, this); m_calculationCells[i].editableTextCell()->textField()->setDraftTextBuffer(m_draftTextBuffer); } } diff --git a/apps/probability/calculation_controller.h b/apps/probability/calculation_controller.h index 9b2ccb400..b3ede0978 100644 --- a/apps/probability/calculation_controller.h +++ b/apps/probability/calculation_controller.h @@ -13,7 +13,7 @@ namespace Probability { class CalculationController : public ViewController, public TableViewDataSource, public SelectableTableViewDataSource, public Shared::ParameterTextFieldDelegate { public: - CalculationController(Responder * parentResponder, Law * law, Calculation * calculation); + CalculationController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, Law * law, Calculation * calculation); /* Responder */ void didEnterResponderChain(Responder * previousResponder) override; void didBecomeFirstResponder() override; diff --git a/apps/probability/parameters_controller.cpp b/apps/probability/parameters_controller.cpp index d5f90c0bd..1a2f82ffd 100644 --- a/apps/probability/parameters_controller.cpp +++ b/apps/probability/parameters_controller.cpp @@ -67,7 +67,7 @@ void ParametersController::ContentView::layoutSubviews() { /* Parameters Controller */ -ParametersController::ParametersController(Responder * parentResponder, Law * law, CalculationController * calculationController) : +ParametersController::ParametersController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, Law * law, CalculationController * calculationController) : FloatParameterController(parentResponder), m_contentView(this, &m_selectableTableView), m_menuListCell{}, @@ -78,7 +78,7 @@ ParametersController::ParametersController(Responder * parentResponder, Law * la 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()->setDelegates(inputEventHandlerDelegate, this); m_menuListCell[i].textField()->setDraftTextBuffer(m_draftTextBuffer); } } diff --git a/apps/probability/parameters_controller.h b/apps/probability/parameters_controller.h index 26ecf6500..2b995e7e8 100644 --- a/apps/probability/parameters_controller.h +++ b/apps/probability/parameters_controller.h @@ -10,7 +10,7 @@ namespace Probability { class ParametersController : public Shared::FloatParameterController { public: - ParametersController(Responder * parentResponder, Law * m_law, CalculationController * calculationController); + ParametersController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, Law * m_law, CalculationController * calculationController); const char * title() override; View * view() override { return &m_contentView; } bool handleEvent(Ion::Events::Event event) override; diff --git a/apps/regression/app.cpp b/apps/regression/app.cpp index c964d55ce..88f6d288e 100644 --- a/apps/regression/app.cpp +++ b/apps/regression/app.cpp @@ -55,11 +55,11 @@ App::App(Container * container, Snapshot * snapshot) : m_calculationController(&m_calculationAlternateEmptyViewController, &m_calculationHeader, snapshot->store()), m_calculationAlternateEmptyViewController(&m_calculationHeader, &m_calculationController, &m_calculationController), m_calculationHeader(&m_tabViewController, &m_calculationAlternateEmptyViewController, &m_calculationController), - m_graphController(&m_graphAlternateEmptyViewController, &m_graphHeader, snapshot->store(), snapshot->cursor(), snapshot->modelVersion(), snapshot->rangeVersion(), snapshot->graphSelectedDotIndex(), snapshot->selectedSeriesIndex()), + m_graphController(&m_graphAlternateEmptyViewController, this, &m_graphHeader, snapshot->store(), snapshot->cursor(), snapshot->modelVersion(), snapshot->rangeVersion(), snapshot->graphSelectedDotIndex(), snapshot->selectedSeriesIndex()), m_graphAlternateEmptyViewController(&m_graphHeader, &m_graphController, &m_graphController), m_graphHeader(&m_graphStackViewController, &m_graphAlternateEmptyViewController, &m_graphController), m_graphStackViewController(&m_tabViewController, &m_graphHeader), - m_storeController(&m_storeHeader, snapshot->store(), &m_storeHeader), + m_storeController(&m_storeHeader, this, snapshot->store(), &m_storeHeader), m_storeHeader(&m_storeStackViewController, &m_storeController, &m_storeController), m_storeStackViewController(&m_tabViewController, &m_storeHeader), m_tabViewController(&m_modalViewController, snapshot, &m_storeStackViewController, &m_graphStackViewController, &m_calculationHeader), diff --git a/apps/regression/go_to_parameter_controller.cpp b/apps/regression/go_to_parameter_controller.cpp index 5be131bb4..c14a3a56c 100644 --- a/apps/regression/go_to_parameter_controller.cpp +++ b/apps/regression/go_to_parameter_controller.cpp @@ -10,8 +10,8 @@ using namespace Poincare; namespace Regression { -GoToParameterController::GoToParameterController(Responder * parentResponder, Store * store, CurveViewCursor * cursor, GraphController * graphController) : - Shared::GoToParameterController(parentResponder, store, cursor, I18n::Message::X), +GoToParameterController::GoToParameterController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, Store * store, CurveViewCursor * cursor, GraphController * graphController) : + Shared::GoToParameterController(parentResponder, inputEventHandlerDelegate, store, cursor, I18n::Message::X), m_store(store), m_xPrediction(true), m_graphController(graphController) diff --git a/apps/regression/go_to_parameter_controller.h b/apps/regression/go_to_parameter_controller.h index e43de2b21..11a8486ac 100644 --- a/apps/regression/go_to_parameter_controller.h +++ b/apps/regression/go_to_parameter_controller.h @@ -11,7 +11,7 @@ class GraphController; class GoToParameterController : public Shared::GoToParameterController { public: - GoToParameterController(Responder * parentResponder, Store * store, Shared::CurveViewCursor * cursor, GraphController * graphController); + GoToParameterController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, Store * store, Shared::CurveViewCursor * cursor, GraphController * graphController); void setXPrediction(bool xPrediction); const char * title() override; void willDisplayCellForIndex(HighlightCell * cell, int index) override; diff --git a/apps/regression/graph_controller.cpp b/apps/regression/graph_controller.cpp index f1cd970e7..7ce45e16b 100644 --- a/apps/regression/graph_controller.cpp +++ b/apps/regression/graph_controller.cpp @@ -13,15 +13,15 @@ static inline int maxInt(int x, int y) { return (x>y ? x : y); } namespace Regression { -GraphController::GraphController(Responder * parentResponder, ButtonRowController * header, Store * store, CurveViewCursor * cursor, uint32_t * modelVersion, uint32_t * rangeVersion, int * selectedDotIndex, int * selectedSeriesIndex) : - InteractiveCurveViewController(parentResponder, header, store, &m_view, cursor, modelVersion, rangeVersion), +GraphController::GraphController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, ButtonRowController * header, Store * store, CurveViewCursor * cursor, uint32_t * modelVersion, uint32_t * rangeVersion, int * selectedDotIndex, int * selectedSeriesIndex) : + InteractiveCurveViewController(parentResponder, inputEventHandlerDelegate, header, store, &m_view, cursor, modelVersion, rangeVersion), m_crossCursorView(), m_roundCursorView(), m_bannerView(), m_view(store, m_cursor, &m_bannerView, &m_crossCursorView, this), m_store(store), m_initialisationParameterController(this, m_store), - m_graphOptionsController(this, m_store, m_cursor, this), + m_graphOptionsController(this, inputEventHandlerDelegate, m_store, m_cursor, this), m_selectedDotIndex(selectedDotIndex), m_selectedSeriesIndex(selectedSeriesIndex) { diff --git a/apps/regression/graph_controller.h b/apps/regression/graph_controller.h index 1a2a9cda1..1d02d8015 100644 --- a/apps/regression/graph_controller.h +++ b/apps/regression/graph_controller.h @@ -17,7 +17,7 @@ namespace Regression { class GraphController : public Shared::InteractiveCurveViewController { public: - GraphController(Responder * parentResponder, ButtonRowController * header, Store * store, Shared::CurveViewCursor * cursor, uint32_t * modelVersion, uint32_t * rangeVersion, int * selectedDotIndex, int * selectedSeriesIndex); + GraphController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, ButtonRowController * header, Store * store, Shared::CurveViewCursor * cursor, uint32_t * modelVersion, uint32_t * rangeVersion, int * selectedDotIndex, int * selectedSeriesIndex); ViewController * initialisationParameterController() override; bool isEmpty() const override; I18n::Message emptyMessage() override; diff --git a/apps/regression/graph_options_controller.cpp b/apps/regression/graph_options_controller.cpp index fb66c69e9..eec852d66 100644 --- a/apps/regression/graph_options_controller.cpp +++ b/apps/regression/graph_options_controller.cpp @@ -9,11 +9,11 @@ using namespace Shared; namespace Regression { -GraphOptionsController::GraphOptionsController(Responder * parentResponder, Store * store, CurveViewCursor * cursor, GraphController * graphController) : +GraphOptionsController::GraphOptionsController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, Store * store, CurveViewCursor * cursor, GraphController * graphController) : ViewController(parentResponder), m_changeRegressionCell(I18n::Message::Regression), m_selectableTableView(this), - m_goToParameterController(this, store, cursor, graphController), + m_goToParameterController(this, inputEventHandlerDelegate, store, cursor, graphController), m_store(store), m_graphController(graphController) { diff --git a/apps/regression/graph_options_controller.h b/apps/regression/graph_options_controller.h index 47c57c610..796ca795a 100644 --- a/apps/regression/graph_options_controller.h +++ b/apps/regression/graph_options_controller.h @@ -12,7 +12,7 @@ class GraphController; class GraphOptionsController : public ViewController, public ListViewDataSource, public SelectableTableViewDataSource { public: - GraphOptionsController(Responder * parentResponder, Store * store, Shared::CurveViewCursor * cursor, GraphController * graphController); + GraphOptionsController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, Store * store, Shared::CurveViewCursor * cursor, GraphController * graphController); View * view() override; const char * title() override; bool handleEvent(Ion::Events::Event event) override; diff --git a/apps/regression/store_controller.cpp b/apps/regression/store_controller.cpp index 0bc72bae4..a7201efb7 100644 --- a/apps/regression/store_controller.cpp +++ b/apps/regression/store_controller.cpp @@ -10,8 +10,8 @@ using namespace Shared; namespace Regression { -StoreController::StoreController(Responder * parentResponder, Store * store, ButtonRowController * header) : - Shared::StoreController(parentResponder, store, header), +StoreController::StoreController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, Store * store, ButtonRowController * header) : + Shared::StoreController(parentResponder, inputEventHandlerDelegate, store, header), m_titleCells{}, m_regressionContext(store), m_storeParameterController(this, store, this) diff --git a/apps/regression/store_controller.h b/apps/regression/store_controller.h index d05aadd9b..b141c559a 100644 --- a/apps/regression/store_controller.h +++ b/apps/regression/store_controller.h @@ -12,7 +12,7 @@ namespace Regression { class StoreController : public Shared::StoreController { public: - StoreController(Responder * parentResponder, Store * store, ButtonRowController * header); + StoreController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, Store * store, ButtonRowController * header); Shared::StoreContext * storeContext() override; void setFormulaLabel() override; bool fillColumnWithFormula(Poincare::Expression formula) override; diff --git a/apps/sequence/app.cpp b/apps/sequence/app.cpp index f5478b3dc..c3da93582 100644 --- a/apps/sequence/app.cpp +++ b/apps/sequence/app.cpp @@ -58,20 +58,20 @@ void App::Snapshot::tidy() { App::App(Container * container, Snapshot * snapshot) : FunctionApp(container, snapshot, &m_inputViewController), m_sequenceContext(((AppsContainer *)container)->globalContext(), snapshot->sequenceStore()), - m_listController(&m_listFooter, snapshot->sequenceStore(), &m_listHeader, &m_listFooter), + m_listController(&m_listFooter, this, snapshot->sequenceStore(), &m_listHeader, &m_listFooter), m_listFooter(&m_listHeader, &m_listController, &m_listController, ButtonRowController::Position::Bottom, ButtonRowController::Style::EmbossedGrey), m_listHeader(nullptr, &m_listFooter, &m_listController), m_listStackViewController(&m_tabViewController, &m_listHeader), - m_graphController(&m_graphAlternateEmptyViewController, snapshot->sequenceStore(), snapshot->graphRange(), snapshot->cursor(), snapshot->indexFunctionSelectedByCursor(), snapshot->modelVersion(), snapshot->rangeVersion(), snapshot->angleUnitVersion(), &m_graphHeader), + m_graphController(&m_graphAlternateEmptyViewController, this, snapshot->sequenceStore(), snapshot->graphRange(), snapshot->cursor(), snapshot->indexFunctionSelectedByCursor(), snapshot->modelVersion(), snapshot->rangeVersion(), snapshot->angleUnitVersion(), &m_graphHeader), m_graphAlternateEmptyViewController(&m_graphHeader, &m_graphController, &m_graphController), m_graphHeader(&m_graphStackViewController, &m_graphAlternateEmptyViewController, &m_graphController), m_graphStackViewController(&m_tabViewController, &m_graphHeader), - m_valuesController(&m_valuesAlternateEmptyViewController, snapshot->sequenceStore(), snapshot->interval(), &m_valuesHeader), + m_valuesController(&m_valuesAlternateEmptyViewController, this, snapshot->sequenceStore(), snapshot->interval(), &m_valuesHeader), m_valuesAlternateEmptyViewController(&m_valuesHeader, &m_valuesController, &m_valuesController), m_valuesHeader(nullptr, &m_valuesAlternateEmptyViewController, &m_valuesController), m_valuesStackViewController(&m_tabViewController, &m_valuesHeader), m_tabViewController(&m_inputViewController, snapshot, &m_listStackViewController, &m_graphStackViewController, &m_valuesStackViewController), - m_inputViewController(&m_modalViewController, &m_tabViewController, &m_listController, &m_listController) + m_inputViewController(&m_modalViewController, &m_tabViewController, &m_listController, &m_listController, &m_listController) { } diff --git a/apps/sequence/graph/curve_parameter_controller.cpp b/apps/sequence/graph/curve_parameter_controller.cpp index 0a13bdade..6521148ec 100644 --- a/apps/sequence/graph/curve_parameter_controller.cpp +++ b/apps/sequence/graph/curve_parameter_controller.cpp @@ -6,9 +6,9 @@ using namespace Shared; namespace Sequence { -CurveParameterController::CurveParameterController(GraphController * graphController, InteractiveCurveViewRange * graphRange, CurveViewCursor * cursor) : +CurveParameterController::CurveParameterController(InputEventHandlerDelegate * inputEventHandlerDelegate, GraphController * graphController, InteractiveCurveViewRange * graphRange, CurveViewCursor * cursor) : FunctionCurveParameterController(graphRange, cursor), - m_goToParameterController(this, graphRange, cursor, I18n::Message::N), + m_goToParameterController(this, inputEventHandlerDelegate, graphRange, cursor, I18n::Message::N), m_sumCell(I18n::Message::TermSum), m_graphController(graphController) { diff --git a/apps/sequence/graph/curve_parameter_controller.h b/apps/sequence/graph/curve_parameter_controller.h index a93a3e762..37e0eb54f 100644 --- a/apps/sequence/graph/curve_parameter_controller.h +++ b/apps/sequence/graph/curve_parameter_controller.h @@ -11,7 +11,7 @@ class GraphController; class CurveParameterController : public Shared::FunctionCurveParameterController { public: - CurveParameterController(GraphController * graphController, Shared::InteractiveCurveViewRange * graphRange, Shared::CurveViewCursor * cursor); + CurveParameterController(InputEventHandlerDelegate * inputEventHandlerDelegate, GraphController * graphController, Shared::InteractiveCurveViewRange * graphRange, Shared::CurveViewCursor * cursor); const char * title() override; bool handleEvent(Ion::Events::Event event) override; int numberOfRows() override; diff --git a/apps/sequence/graph/graph_controller.cpp b/apps/sequence/graph/graph_controller.cpp index 595c3fc0d..d5686e5ca 100644 --- a/apps/sequence/graph/graph_controller.cpp +++ b/apps/sequence/graph/graph_controller.cpp @@ -6,13 +6,13 @@ using namespace Poincare; namespace Sequence { -GraphController::GraphController(Responder * parentResponder, SequenceStore * sequenceStore, CurveViewRange * graphRange, CurveViewCursor * cursor, int * indexFunctionSelectedByCursor, uint32_t * modelVersion, uint32_t * rangeVersion, Preferences::AngleUnit * angleUnitVersion, ButtonRowController * header) : - FunctionGraphController(parentResponder, header, graphRange, &m_view, cursor, indexFunctionSelectedByCursor, modelVersion, rangeVersion, angleUnitVersion), +GraphController::GraphController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, SequenceStore * sequenceStore, CurveViewRange * graphRange, CurveViewCursor * cursor, int * indexFunctionSelectedByCursor, uint32_t * modelVersion, uint32_t * rangeVersion, Preferences::AngleUnit * angleUnitVersion, ButtonRowController * header) : + FunctionGraphController(parentResponder, inputEventHandlerDelegate, header, graphRange, &m_view, cursor, indexFunctionSelectedByCursor, modelVersion, rangeVersion, angleUnitVersion), m_bannerView(), m_view(sequenceStore, graphRange, m_cursor, &m_bannerView, &m_cursorView), m_graphRange(graphRange), - m_curveParameterController(this, graphRange, m_cursor), - m_termSumController(this, &m_view, graphRange, m_cursor), + m_curveParameterController(inputEventHandlerDelegate, this, graphRange, m_cursor), + m_termSumController(this, inputEventHandlerDelegate, &m_view, graphRange, m_cursor), m_sequenceStore(sequenceStore) { m_graphRange->setDelegate(this); diff --git a/apps/sequence/graph/graph_controller.h b/apps/sequence/graph/graph_controller.h index 18de515b6..7c6916c0d 100644 --- a/apps/sequence/graph/graph_controller.h +++ b/apps/sequence/graph/graph_controller.h @@ -14,7 +14,7 @@ namespace Sequence { class GraphController : public Shared::FunctionGraphController { public: - GraphController(Responder * parentResponder, SequenceStore * sequenceStore, CurveViewRange * graphRange, Shared::CurveViewCursor * cursor, int * indexFunctionSelectedByCursor, uint32_t * modelVersion, uint32_t * rangeVersion, Poincare::Preferences::AngleUnit * angleUnitVersion, ButtonRowController * header); + GraphController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, SequenceStore * sequenceStore, CurveViewRange * graphRange, Shared::CurveViewCursor * cursor, int * indexFunctionSelectedByCursor, uint32_t * modelVersion, uint32_t * rangeVersion, Poincare::Preferences::AngleUnit * angleUnitVersion, ButtonRowController * header); I18n::Message emptyMessage() override; TermSumController * termSumController(); private: diff --git a/apps/sequence/graph/term_sum_controller.cpp b/apps/sequence/graph/term_sum_controller.cpp index 084b5c74b..24ecb3371 100644 --- a/apps/sequence/graph/term_sum_controller.cpp +++ b/apps/sequence/graph/term_sum_controller.cpp @@ -17,8 +17,8 @@ using namespace Poincare; namespace Sequence { -TermSumController::TermSumController(Responder * parentResponder, GraphView * graphView, CurveViewRange * graphRange, CurveViewCursor * cursor) : - SumGraphController(parentResponder, graphView, graphRange, cursor, Ion::Charset::CapitalSigma) +TermSumController::TermSumController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, GraphView * graphView, CurveViewRange * graphRange, CurveViewCursor * cursor) : + SumGraphController(parentResponder, inputEventHandlerDelegate, graphView, graphRange, cursor, Ion::Charset::CapitalSigma) { } diff --git a/apps/sequence/graph/term_sum_controller.h b/apps/sequence/graph/term_sum_controller.h index d1382d330..4739d73aa 100644 --- a/apps/sequence/graph/term_sum_controller.h +++ b/apps/sequence/graph/term_sum_controller.h @@ -11,7 +11,7 @@ namespace Sequence { class TermSumController : public Shared::SumGraphController { public: - TermSumController(Responder * parentResponder, GraphView * graphView, CurveViewRange * graphRange, Shared::CurveViewCursor * cursor); + TermSumController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, GraphView * graphView, CurveViewRange * graphRange, Shared::CurveViewCursor * cursor); const char * title() override; private: bool moveCursorHorizontallyToPosition(double position) override; diff --git a/apps/sequence/list/list_controller.cpp b/apps/sequence/list/list_controller.cpp index 84fce86c1..8a8041aa6 100644 --- a/apps/sequence/list/list_controller.cpp +++ b/apps/sequence/list/list_controller.cpp @@ -9,12 +9,12 @@ using namespace Poincare; namespace Sequence { -ListController::ListController(Responder * parentResponder, SequenceStore * sequenceStore, ButtonRowController * header, ButtonRowController * footer) : +ListController::ListController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, SequenceStore * sequenceStore, ButtonRowController * header, ButtonRowController * footer) : Shared::FunctionListController(parentResponder, sequenceStore, header, footer, I18n::Message::AddSequence), m_sequenceStore(sequenceStore), m_sequenceTitleCells{}, m_expressionCells{}, - m_parameterController(this, sequenceStore), + m_parameterController(inputEventHandlerDelegate, this, sequenceStore), m_typeParameterController(this, sequenceStore, this, TableCell::Layout::Vertical), m_typeStackController(nullptr, &m_typeParameterController, KDColorWhite, Palette::PurpleDark, Palette::PurpleDark), m_sequenceToolbox() diff --git a/apps/sequence/list/list_controller.h b/apps/sequence/list/list_controller.h index 86a3f2498..88a393607 100644 --- a/apps/sequence/list/list_controller.h +++ b/apps/sequence/list/list_controller.h @@ -14,9 +14,9 @@ namespace Sequence { -class ListController : public Shared::FunctionListController, public Shared::TextFieldDelegate, public Shared::LayoutFieldDelegate { +class ListController : public Shared::FunctionListController, public InputEventHandlerDelegate, public Shared::TextFieldDelegate, public Shared::LayoutFieldDelegate { public: - ListController(Responder * parentResponder, SequenceStore * sequenceStore, ButtonRowController * header, ButtonRowController * footer); + ListController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, SequenceStore * sequenceStore, ButtonRowController * header, ButtonRowController * footer); const char * title() override; int numberOfExpressionRows() override; KDCoordinate expressionRowHeight(int j) override; diff --git a/apps/sequence/list/list_parameter_controller.cpp b/apps/sequence/list/list_parameter_controller.cpp index 30b317bb8..a83b4f1a9 100644 --- a/apps/sequence/list/list_parameter_controller.cpp +++ b/apps/sequence/list/list_parameter_controller.cpp @@ -9,10 +9,10 @@ using namespace Shared; namespace Sequence { -ListParameterController::ListParameterController(ListController * listController, SequenceStore * sequenceStore) : +ListParameterController::ListParameterController(InputEventHandlerDelegate * inputEventHandlerDelegate, ListController * listController, SequenceStore * sequenceStore) : Shared::ListParameterController(listController, sequenceStore, I18n::Message::SequenceColor, I18n::Message::DeleteSequence, this), m_typeCell(I18n::Message::SequenceType), - m_initialRankCell(&m_selectableTableView, this, m_draftTextBuffer, I18n::Message::FirstTermIndex), + m_initialRankCell(&m_selectableTableView, inputEventHandlerDelegate, this, m_draftTextBuffer, I18n::Message::FirstTermIndex), m_typeParameterController(this, sequenceStore, listController, TableCell::Layout::Horizontal, Metric::CommonTopMargin, Metric::CommonRightMargin, Metric::CommonBottomMargin, Metric::CommonLeftMargin), m_sequence(nullptr) diff --git a/apps/sequence/list/list_parameter_controller.h b/apps/sequence/list/list_parameter_controller.h index bcb671c4f..a4902f744 100644 --- a/apps/sequence/list/list_parameter_controller.h +++ b/apps/sequence/list/list_parameter_controller.h @@ -13,7 +13,7 @@ class ListController; class ListParameterController : public Shared::ListParameterController, public SelectableTableViewDelegate, public Shared::ParameterTextFieldDelegate { public: - ListParameterController(ListController * list, SequenceStore * sequenceStore); + ListParameterController(InputEventHandlerDelegate * inputEventHandlerDelegate, ListController * list, SequenceStore * sequenceStore); const char * title() override; bool handleEvent(Ion::Events::Event event) override; void setFunction(Shared::Function * function) override; diff --git a/apps/sequence/values/interval_parameter_controller.cpp b/apps/sequence/values/interval_parameter_controller.cpp index 33b0c4bed..eb337efc6 100644 --- a/apps/sequence/values/interval_parameter_controller.cpp +++ b/apps/sequence/values/interval_parameter_controller.cpp @@ -5,8 +5,8 @@ using namespace Shared; namespace Sequence { -IntervalParameterController::IntervalParameterController(Responder * parentResponder, Interval * interval) : - Shared::IntervalParameterController(parentResponder, interval) +IntervalParameterController::IntervalParameterController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, Interval * interval) : + Shared::IntervalParameterController(parentResponder, inputEventHandlerDelegate, interval) { } diff --git a/apps/sequence/values/interval_parameter_controller.h b/apps/sequence/values/interval_parameter_controller.h index 4968e8f5f..f72620911 100644 --- a/apps/sequence/values/interval_parameter_controller.h +++ b/apps/sequence/values/interval_parameter_controller.h @@ -7,7 +7,7 @@ namespace Sequence { class IntervalParameterController : public Shared::IntervalParameterController { public: - IntervalParameterController(Responder * parentResponder, Shared::Interval * interval); + IntervalParameterController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, Shared::Interval * interval); void willDisplayCellForIndex(HighlightCell * cell, int index) override; bool setParameterAtIndex(int parameterIndex, double f) override; }; diff --git a/apps/sequence/values/values_controller.cpp b/apps/sequence/values/values_controller.cpp index fb79a5711..a71f3406e 100644 --- a/apps/sequence/values/values_controller.cpp +++ b/apps/sequence/values/values_controller.cpp @@ -6,15 +6,15 @@ using namespace Shared; namespace Sequence { -ValuesController::ValuesController(Responder * parentResponder, SequenceStore * sequenceStore, Interval * interval, ButtonRowController * header) : - Shared::ValuesController(parentResponder, header, I18n::Message::NColumn, &m_intervalParameterController, interval), +ValuesController::ValuesController(Responder * parentResponder,InputEventHandlerDelegate * inputEventHandlerDelegate, SequenceStore * sequenceStore, Interval * interval, ButtonRowController * header) : + Shared::ValuesController(parentResponder, inputEventHandlerDelegate, header, I18n::Message::NColumn, &m_intervalParameterController, interval), m_sequenceTitleCells{}, m_floatCells{}, m_sequenceStore(sequenceStore), #if COPY_COLUMN m_sequenceParameterController('n'), #endif - m_intervalParameterController(this, m_interval) + m_intervalParameterController(this, inputEventHandlerDelegate, m_interval) { for (int i = 0; i < k_maxNumberOfSequences; i++) { m_sequenceTitleCells[i].setOrientation(FunctionTitleCell::Orientation::HorizontalIndicator); diff --git a/apps/sequence/values/values_controller.h b/apps/sequence/values/values_controller.h index aecc13159..583aac8bb 100644 --- a/apps/sequence/values/values_controller.h +++ b/apps/sequence/values/values_controller.h @@ -10,7 +10,7 @@ namespace Sequence { class ValuesController : public Shared::ValuesController { public: - ValuesController(Responder * parentResponder, SequenceStore * sequenceStore, Shared::Interval * interval, ButtonRowController * header); + ValuesController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, SequenceStore * sequenceStore, Shared::Interval * interval, ButtonRowController * header); void willDisplayCellAtLocation(HighlightCell * cell, int i, int j) override; I18n::Message emptyMessage() override; IntervalParameterController * intervalParameterController() override; diff --git a/apps/settings/app.cpp b/apps/settings/app.cpp index 6a56f116f..891f2552d 100644 --- a/apps/settings/app.cpp +++ b/apps/settings/app.cpp @@ -27,7 +27,7 @@ App::Descriptor * App::Snapshot::descriptor() { App::App(Container * container, Snapshot * snapshot) : Shared::TextFieldDelegateApp(container, snapshot, &m_stackViewController), - m_mainController(&m_stackViewController), + m_mainController(&m_stackViewController, this), m_stackViewController(&m_modalViewController, &m_mainController) { } diff --git a/apps/settings/main_controller.cpp b/apps/settings/main_controller.cpp index 8b8ab6a50..0476e917a 100644 --- a/apps/settings/main_controller.cpp +++ b/apps/settings/main_controller.cpp @@ -38,7 +38,7 @@ const SettingsMessageTree model = SettingsMessageTree(I18n::Message::SettingsApp const SettingsMessageTree model = SettingsMessageTree(I18n::Message::SettingsApp, menu, 8); #endif -MainController::MainController(Responder * parentResponder) : +MainController::MainController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate) : ViewController(parentResponder), #ifdef EPSILON_BOOT_PROMPT m_popUpCell(I18n::Message::Default, KDFont::LargeFont), @@ -47,7 +47,7 @@ MainController::MainController(Responder * parentResponder) : m_selectableTableView(this), m_messageTreeModel((MessageTree *)&model), m_preferencesController(this), - m_displayModeController(this), + m_displayModeController(this, inputEventHandlerDelegate), m_languageController(this, 13), m_examModeController(this), m_aboutController(this) diff --git a/apps/settings/main_controller.h b/apps/settings/main_controller.h index c7aa52ca7..6098c5848 100644 --- a/apps/settings/main_controller.h +++ b/apps/settings/main_controller.h @@ -13,7 +13,7 @@ namespace Settings { class MainController : public ViewController, public ListViewDataSource, public SelectableTableViewDataSource { public: - MainController(Responder * parentResponder); + MainController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate); View * view() override; bool handleEvent(Ion::Events::Event event) override; void didBecomeFirstResponder() override; diff --git a/apps/settings/sub_menu/display_mode_controller.cpp b/apps/settings/sub_menu/display_mode_controller.cpp index c9da97a41..86af72bde 100644 --- a/apps/settings/sub_menu/display_mode_controller.cpp +++ b/apps/settings/sub_menu/display_mode_controller.cpp @@ -10,9 +10,9 @@ using namespace Shared; namespace Settings { -DisplayModeController::DisplayModeController(Responder * parentResponder) : +DisplayModeController::DisplayModeController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate) : PreferencesController(parentResponder), - m_editableCell(&m_selectableTableView, this, m_draftTextBuffer) + m_editableCell(&m_selectableTableView, inputEventHandlerDelegate, this, m_draftTextBuffer) { m_editableCell.messageTableCellWithEditableText()->setMessage(I18n::Message::SignificantFigures); m_editableCell.messageTableCellWithEditableText()->setMessageFont(KDFont::LargeFont); diff --git a/apps/settings/sub_menu/display_mode_controller.h b/apps/settings/sub_menu/display_mode_controller.h index e91c614e6..86ebc2098 100644 --- a/apps/settings/sub_menu/display_mode_controller.h +++ b/apps/settings/sub_menu/display_mode_controller.h @@ -9,7 +9,7 @@ namespace Settings { class DisplayModeController : public PreferencesController, public Shared::ParameterTextFieldDelegate { public: - DisplayModeController(Responder * parentResponder); + DisplayModeController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate); KDCoordinate rowHeight(int j) override; KDCoordinate cumulatedHeightFromIndex(int j) override; int indexFromCumulatedHeight(KDCoordinate offsetY) override; diff --git a/apps/settings/sub_menu/message_table_cell_with_editable_text_with_separator.cpp b/apps/settings/sub_menu/message_table_cell_with_editable_text_with_separator.cpp index b74f064bb..303d76bc4 100644 --- a/apps/settings/sub_menu/message_table_cell_with_editable_text_with_separator.cpp +++ b/apps/settings/sub_menu/message_table_cell_with_editable_text_with_separator.cpp @@ -2,9 +2,9 @@ namespace Settings { -MessageTableCellWithEditableTextWithSeparator::MessageTableCellWithEditableTextWithSeparator(Responder * parentResponder, TextFieldDelegate * textFieldDelegate, char * draftTextBuffer, I18n::Message message) : +MessageTableCellWithEditableTextWithSeparator::MessageTableCellWithEditableTextWithSeparator(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, TextFieldDelegate * textFieldDelegate, char * draftTextBuffer, I18n::Message message) : HighlightCell(), - m_cell(parentResponder, textFieldDelegate, draftTextBuffer, message) + m_cell(parentResponder, inputEventHandlerDelegate, textFieldDelegate, draftTextBuffer, message) { } diff --git a/apps/settings/sub_menu/message_table_cell_with_editable_text_with_separator.h b/apps/settings/sub_menu/message_table_cell_with_editable_text_with_separator.h index f7dda73a0..28f21f0e0 100644 --- a/apps/settings/sub_menu/message_table_cell_with_editable_text_with_separator.h +++ b/apps/settings/sub_menu/message_table_cell_with_editable_text_with_separator.h @@ -7,7 +7,7 @@ namespace Settings { class MessageTableCellWithEditableTextWithSeparator : public HighlightCell { public: - MessageTableCellWithEditableTextWithSeparator(Responder * parentResponder = nullptr, TextFieldDelegate * textFieldDelegate = nullptr, char * draftTextBuffer = nullptr, I18n::Message message = (I18n::Message)0); + MessageTableCellWithEditableTextWithSeparator(Responder * parentResponder = nullptr, InputEventHandlerDelegate * inputEventHandlerDelegate = nullptr, TextFieldDelegate * textFieldDelegate = nullptr, char * draftTextBuffer = nullptr, I18n::Message message = (I18n::Message)0); void drawRect(KDContext * ctx, KDRect rect) const override; void setHighlighted(bool highlight) override; void reloadCell() override { m_cell.reloadCell(); } diff --git a/apps/shared/Makefile b/apps/shared/Makefile index 42b5f39cc..db1d6dd7f 100644 --- a/apps/shared/Makefile +++ b/apps/shared/Makefile @@ -30,6 +30,7 @@ app_objs += $(addprefix apps/shared/,\ hideable_even_odd_cell.o\ hideable_even_odd_editable_text_cell.o\ initialisation_parameter_controller.o\ + input_event_handler_delegate_app.o\ interactive_curve_view_controller.o\ interactive_curve_view_range.o\ interactive_curve_view_range_delegate.o\ diff --git a/apps/shared/buffer_text_view_with_text_field.cpp b/apps/shared/buffer_text_view_with_text_field.cpp index 6e5d0758b..8d3bfb189 100644 --- a/apps/shared/buffer_text_view_with_text_field.cpp +++ b/apps/shared/buffer_text_view_with_text_field.cpp @@ -3,11 +3,11 @@ namespace Shared { -BufferTextViewWithTextField::BufferTextViewWithTextField(Responder * parentResponder, TextFieldDelegate * delegate, const KDFont * font) : +BufferTextViewWithTextField::BufferTextViewWithTextField(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, TextFieldDelegate * delegate, const KDFont * font) : View(), Responder(parentResponder), m_bufferTextView(font, 0.0f, 0.5f), - m_textField(this, m_textFieldBuffer, m_textFieldBuffer, k_textFieldBufferSize, delegate, false, font, 0.0f, 0.5f), + m_textField(this, m_textFieldBuffer, m_textFieldBuffer, k_textFieldBufferSize, inputEventHandlerDelegate, delegate, false, font, 0.0f, 0.5f), m_textFieldBuffer{} { } diff --git a/apps/shared/buffer_text_view_with_text_field.h b/apps/shared/buffer_text_view_with_text_field.h index 0e88ed581..9d2191230 100644 --- a/apps/shared/buffer_text_view_with_text_field.h +++ b/apps/shared/buffer_text_view_with_text_field.h @@ -6,7 +6,7 @@ namespace Shared { class BufferTextViewWithTextField : public View, public Responder { public: - BufferTextViewWithTextField(Responder * parentResponder, TextFieldDelegate * delegate = nullptr, const KDFont * font = KDFont::LargeFont); + BufferTextViewWithTextField(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, TextFieldDelegate * delegate = nullptr, const KDFont * font = KDFont::LargeFont); KDSize minimalSizeForOptimalDisplay() const override; TextField * textField() { return &m_textField; } void setBufferText(const char * text); diff --git a/apps/shared/expression_field_delegate_app.cpp b/apps/shared/expression_field_delegate_app.cpp index 1070e4504..035f8e289 100644 --- a/apps/shared/expression_field_delegate_app.cpp +++ b/apps/shared/expression_field_delegate_app.cpp @@ -42,10 +42,4 @@ bool ExpressionFieldDelegateApp::layoutFieldDidReceiveEvent(LayoutField * layout return false; } -Toolbox * ExpressionFieldDelegateApp::toolboxForInputEventHandler(InputEventHandler * handler) { - Toolbox * toolbox = container()->mathToolbox(); - toolbox->setSender(handler); - return toolbox; -} - } diff --git a/apps/shared/expression_field_delegate_app.h b/apps/shared/expression_field_delegate_app.h index 26c42dba4..348e31050 100644 --- a/apps/shared/expression_field_delegate_app.h +++ b/apps/shared/expression_field_delegate_app.h @@ -11,7 +11,6 @@ public: virtual ~ExpressionFieldDelegateApp() = default; bool layoutFieldShouldFinishEditing(LayoutField * layoutField, Ion::Events::Event event) override; virtual bool layoutFieldDidReceiveEvent(LayoutField * layoutField, Ion::Events::Event event) override; - Toolbox * toolboxForInputEventHandler(InputEventHandler * handler) override; protected: ExpressionFieldDelegateApp(Container * container, Snapshot * snapshot, ViewController * rootViewController); }; diff --git a/apps/shared/function_go_to_parameter_controller.cpp b/apps/shared/function_go_to_parameter_controller.cpp index 957567855..acfa17836 100644 --- a/apps/shared/function_go_to_parameter_controller.cpp +++ b/apps/shared/function_go_to_parameter_controller.cpp @@ -5,8 +5,8 @@ namespace Shared { -FunctionGoToParameterController::FunctionGoToParameterController(Responder * parentResponder, InteractiveCurveViewRange * graphRange, CurveViewCursor * cursor, I18n::Message symbol) : - GoToParameterController(parentResponder, graphRange, cursor, symbol), +FunctionGoToParameterController::FunctionGoToParameterController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, InteractiveCurveViewRange * graphRange, CurveViewCursor * cursor, I18n::Message symbol) : + GoToParameterController(parentResponder, inputEventHandlerDelegate, graphRange, cursor, symbol), m_function(nullptr) { } diff --git a/apps/shared/function_go_to_parameter_controller.h b/apps/shared/function_go_to_parameter_controller.h index 9f32f67aa..00d9bb25a 100644 --- a/apps/shared/function_go_to_parameter_controller.h +++ b/apps/shared/function_go_to_parameter_controller.h @@ -8,7 +8,7 @@ namespace Shared { class FunctionGoToParameterController : public GoToParameterController { public: - FunctionGoToParameterController(Responder * parentResponder, InteractiveCurveViewRange * graphRange, CurveViewCursor * cursor, I18n::Message symbol); + FunctionGoToParameterController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, InteractiveCurveViewRange * graphRange, CurveViewCursor * cursor, I18n::Message symbol); const char * title() override; void setFunction(Function * function); protected: diff --git a/apps/shared/function_graph_controller.cpp b/apps/shared/function_graph_controller.cpp index e2bf8380e..9549a7c51 100644 --- a/apps/shared/function_graph_controller.cpp +++ b/apps/shared/function_graph_controller.cpp @@ -8,8 +8,8 @@ using namespace Poincare; namespace Shared { -FunctionGraphController::FunctionGraphController(Responder * parentResponder, ButtonRowController * header, InteractiveCurveViewRange * interactiveRange, CurveView * curveView, CurveViewCursor * cursor, int * indexFunctionSelectedByCursor, uint32_t * modelVersion, uint32_t * rangeVersion, Preferences::AngleUnit * angleUnitVersion) : - InteractiveCurveViewController(parentResponder, header, interactiveRange, curveView, cursor, modelVersion, rangeVersion), +FunctionGraphController::FunctionGraphController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, ButtonRowController * header, InteractiveCurveViewRange * interactiveRange, CurveView * curveView, CurveViewCursor * cursor, int * indexFunctionSelectedByCursor, uint32_t * modelVersion, uint32_t * rangeVersion, Preferences::AngleUnit * angleUnitVersion) : + InteractiveCurveViewController(parentResponder, inputEventHandlerDelegate, header, interactiveRange, curveView, cursor, modelVersion, rangeVersion), m_initialisationParameterController(this, interactiveRange), m_angleUnitVersion(angleUnitVersion), m_indexFunctionSelectedByCursor(indexFunctionSelectedByCursor) diff --git a/apps/shared/function_graph_controller.h b/apps/shared/function_graph_controller.h index e7dbf91ff..eb975200e 100644 --- a/apps/shared/function_graph_controller.h +++ b/apps/shared/function_graph_controller.h @@ -13,7 +13,7 @@ namespace Shared { class FunctionGraphController : public InteractiveCurveViewController, public FunctionBannerDelegate { public: - FunctionGraphController(Responder * parentResponder, ButtonRowController * header, InteractiveCurveViewRange * interactiveRange, CurveView * curveView, CurveViewCursor * cursor, int * indexFunctionSelectedByCursor, uint32_t * modelVersion, uint32_t * rangeVersion, Poincare::Preferences::AngleUnit * angleUnitVersion); + FunctionGraphController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, ButtonRowController * header, InteractiveCurveViewRange * interactiveRange, CurveView * curveView, CurveViewCursor * cursor, int * indexFunctionSelectedByCursor, uint32_t * modelVersion, uint32_t * rangeVersion, Poincare::Preferences::AngleUnit * angleUnitVersion); bool isEmpty() const override; ViewController * initialisationParameterController() override; void viewWillAppear() override; diff --git a/apps/shared/go_to_parameter_controller.cpp b/apps/shared/go_to_parameter_controller.cpp index 43dc97f1d..732799e70 100644 --- a/apps/shared/go_to_parameter_controller.cpp +++ b/apps/shared/go_to_parameter_controller.cpp @@ -4,11 +4,11 @@ namespace Shared { -GoToParameterController::GoToParameterController(Responder * parentResponder, InteractiveCurveViewRange * graphRange, CurveViewCursor * cursor, I18n::Message symbol) : +GoToParameterController::GoToParameterController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, InteractiveCurveViewRange * graphRange, CurveViewCursor * cursor, I18n::Message symbol) : FloatParameterController(parentResponder), m_cursor(cursor), m_graphRange(graphRange), - m_abscisseCell(&m_selectableTableView, this, m_draftTextBuffer, symbol) + m_abscisseCell(&m_selectableTableView, inputEventHandlerDelegate, this, m_draftTextBuffer, symbol) { } diff --git a/apps/shared/go_to_parameter_controller.h b/apps/shared/go_to_parameter_controller.h index 4b4f3986d..34c556361 100644 --- a/apps/shared/go_to_parameter_controller.h +++ b/apps/shared/go_to_parameter_controller.h @@ -10,7 +10,7 @@ namespace Shared { class GoToParameterController : public FloatParameterController { public: - GoToParameterController(Responder * parentResponder, InteractiveCurveViewRange * graphRange, CurveViewCursor * cursor, I18n::Message symbol); + GoToParameterController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, InteractiveCurveViewRange * graphRange, CurveViewCursor * cursor, I18n::Message symbol); int numberOfRows() override; bool handleEvent(Ion::Events::Event event) override; protected: diff --git a/apps/shared/hideable_even_odd_editable_text_cell.h b/apps/shared/hideable_even_odd_editable_text_cell.h index c9385d89a..61bce48fa 100644 --- a/apps/shared/hideable_even_odd_editable_text_cell.h +++ b/apps/shared/hideable_even_odd_editable_text_cell.h @@ -9,8 +9,8 @@ namespace Shared { class HideableEvenOddEditableTextCell : public EvenOddEditableTextCell, public Hideable { public: - HideableEvenOddEditableTextCell(Responder * parentResponder = nullptr, TextFieldDelegate * delegate = nullptr, char * draftTextBuffer = nullptr) : - EvenOddEditableTextCell(parentResponder, delegate, draftTextBuffer), + HideableEvenOddEditableTextCell(Responder * parentResponder = nullptr, InputEventHandlerDelegate * inputEventHandlerDelegate = nullptr, TextFieldDelegate * delegate = nullptr, char * draftTextBuffer = nullptr) : + EvenOddEditableTextCell(parentResponder, inputEventHandlerDelegate, delegate, draftTextBuffer), Hideable() {} KDColor backgroundColor() const override; diff --git a/apps/shared/input_event_handler_delegate_app.cpp b/apps/shared/input_event_handler_delegate_app.cpp new file mode 100644 index 000000000..cfbe2e105 --- /dev/null +++ b/apps/shared/input_event_handler_delegate_app.cpp @@ -0,0 +1,26 @@ +#include "input_event_handler_delegate_app.h" +#include "../apps_container.h" +#include +#include + +using namespace Poincare; + +namespace Shared { + +InputEventHandlerDelegateApp::InputEventHandlerDelegateApp(Container * container, Snapshot * snapshot, ViewController * rootViewController) : + ::App(container, snapshot, rootViewController, I18n::Message::Warning), + InputEventHandlerDelegate() +{ +} + +AppsContainer * InputEventHandlerDelegateApp::container() { + return (AppsContainer *)(app()->container()); +} + +Toolbox * InputEventHandlerDelegateApp::toolboxForInputEventHandler(InputEventHandler * textInput) { + Toolbox * toolbox = container()->mathToolbox(); + toolbox->setSender(textInput); + return toolbox; +} + +} diff --git a/apps/shared/input_event_handler_delegate_app.h b/apps/shared/input_event_handler_delegate_app.h new file mode 100644 index 000000000..c0a1359c9 --- /dev/null +++ b/apps/shared/input_event_handler_delegate_app.h @@ -0,0 +1,21 @@ +#ifndef SHARED_INPUT_EVENT_HANDLER_DELEGATE_APP_H +#define SHARED_INPUT_EVENT_HANDLER_DELEGATE_APP_H + +#include + +class AppsContainer; + +namespace Shared { + +class InputEventHandlerDelegateApp : public ::App, public InputEventHandlerDelegate { +public: + virtual ~InputEventHandlerDelegateApp() = default; + AppsContainer * container(); + Toolbox * toolboxForInputEventHandler(InputEventHandler * textInput) override; +protected: + InputEventHandlerDelegateApp(Container * container, Snapshot * snapshot, ViewController * rootViewController); +}; + +} + +#endif diff --git a/apps/shared/interactive_curve_view_controller.cpp b/apps/shared/interactive_curve_view_controller.cpp index a97dd51b9..6bf52e420 100644 --- a/apps/shared/interactive_curve_view_controller.cpp +++ b/apps/shared/interactive_curve_view_controller.cpp @@ -7,12 +7,12 @@ using namespace Poincare; namespace Shared { -InteractiveCurveViewController::InteractiveCurveViewController(Responder * parentResponder, ButtonRowController * header, InteractiveCurveViewRange * interactiveRange, CurveView * curveView, CurveViewCursor * cursor, uint32_t * modelVersion, uint32_t * rangeVersion) : +InteractiveCurveViewController::InteractiveCurveViewController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, ButtonRowController * header, InteractiveCurveViewRange * interactiveRange, CurveView * curveView, CurveViewCursor * cursor, uint32_t * modelVersion, uint32_t * rangeVersion) : SimpleInteractiveCurveViewController(parentResponder, interactiveRange, curveView, cursor), ButtonRowDelegate(header, nullptr), m_modelVersion(modelVersion), m_rangeVersion(rangeVersion), - m_rangeParameterController(this, interactiveRange), + m_rangeParameterController(this, inputEventHandlerDelegate, interactiveRange), m_zoomParameterController(this, interactiveRange, curveView), m_rangeButton(this, I18n::Message::Axis, Invocation([](void * context, void * sender) { InteractiveCurveViewController * graphController = (InteractiveCurveViewController *) context; diff --git a/apps/shared/interactive_curve_view_controller.h b/apps/shared/interactive_curve_view_controller.h index 2a1c6c316..f992a50d0 100644 --- a/apps/shared/interactive_curve_view_controller.h +++ b/apps/shared/interactive_curve_view_controller.h @@ -11,7 +11,7 @@ namespace Shared { class InteractiveCurveViewController : public SimpleInteractiveCurveViewController, public InteractiveCurveViewRangeDelegate, public ButtonRowDelegate, public AlternateEmptyViewDefaultDelegate { public: - InteractiveCurveViewController(Responder * parentResponder, ButtonRowController * header, InteractiveCurveViewRange * interactiveRange, CurveView * curveView, CurveViewCursor * cursor, uint32_t * modelVersion, uint32_t * rangeVersion); + InteractiveCurveViewController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, ButtonRowController * header, InteractiveCurveViewRange * interactiveRange, CurveView * curveView, CurveViewCursor * cursor, uint32_t * modelVersion, uint32_t * rangeVersion); // InteractiveCurveViewRangeDelegate float addMargin(float x, float range, bool isMin) override; diff --git a/apps/shared/interval_parameter_controller.cpp b/apps/shared/interval_parameter_controller.cpp index 075b14eff..c53922fc2 100644 --- a/apps/shared/interval_parameter_controller.cpp +++ b/apps/shared/interval_parameter_controller.cpp @@ -3,14 +3,14 @@ namespace Shared { -IntervalParameterController::IntervalParameterController(Responder * parentResponder, Interval * interval) : +IntervalParameterController::IntervalParameterController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, Interval * interval) : FloatParameterController(parentResponder), 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()->setDelegates(inputEventHandlerDelegate, this); m_intervalCells[i].textField()->setDraftTextBuffer(m_draftTextBuffer); } } diff --git a/apps/shared/interval_parameter_controller.h b/apps/shared/interval_parameter_controller.h index 831273299..0f61e264a 100644 --- a/apps/shared/interval_parameter_controller.h +++ b/apps/shared/interval_parameter_controller.h @@ -9,7 +9,7 @@ namespace Shared { class IntervalParameterController : public Shared::FloatParameterController { public: - IntervalParameterController(Responder * parentResponder, Interval * interval); + IntervalParameterController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, Interval * interval); Interval * interval(); const char * title() override; void willDisplayCellForIndex(HighlightCell * cell, int index) override; diff --git a/apps/shared/layout_field_delegate.cpp b/apps/shared/layout_field_delegate.cpp index edf71db56..48fd280ee 100644 --- a/apps/shared/layout_field_delegate.cpp +++ b/apps/shared/layout_field_delegate.cpp @@ -24,8 +24,4 @@ void LayoutFieldDelegate::layoutFieldDidChangeSize(LayoutField * layoutField) { return expressionFieldDelegateApp()->layoutFieldDidChangeSize(layoutField); } -Toolbox * LayoutFieldDelegate::toolboxForInputEventHandler(InputEventHandler * handler) { - return expressionFieldDelegateApp()->toolboxForInputEventHandler(handler); -} - } diff --git a/apps/shared/layout_field_delegate.h b/apps/shared/layout_field_delegate.h index 4ac6c664c..1785acca7 100644 --- a/apps/shared/layout_field_delegate.h +++ b/apps/shared/layout_field_delegate.h @@ -13,7 +13,6 @@ public: bool layoutFieldDidFinishEditing(LayoutField * layoutField, Poincare::Layout layoutR, Ion::Events::Event event) override; bool layoutFieldDidAbortEditing(LayoutField * layoutField) override; void layoutFieldDidChangeSize(LayoutField * layoutField) override; - Toolbox * toolboxForInputEventHandler(InputEventHandler * handler) override; private: virtual ExpressionFieldDelegateApp * expressionFieldDelegateApp() = 0; }; diff --git a/apps/shared/range_parameter_controller.cpp b/apps/shared/range_parameter_controller.cpp index d2cf2a466..cae297599 100644 --- a/apps/shared/range_parameter_controller.cpp +++ b/apps/shared/range_parameter_controller.cpp @@ -7,7 +7,7 @@ using namespace Poincare; namespace Shared { -RangeParameterController::RangeParameterController(Responder * parentResponder, InteractiveCurveViewRange * interactiveRange) : +RangeParameterController::RangeParameterController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, InteractiveCurveViewRange * interactiveRange) : FloatParameterController(parentResponder), m_interactiveRange(interactiveRange), m_xRangeCells{}, @@ -16,13 +16,13 @@ RangeParameterController::RangeParameterController(Responder * parentResponder, { for (int i = 0; i < k_numberOfEditableTextCell; i++) { m_xRangeCells[i].setParentResponder(&m_selectableTableView); - m_xRangeCells[i].textField()->setDelegate(this); + m_xRangeCells[i].textField()->setDelegates(inputEventHandlerDelegate, 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()->setDelegates(inputEventHandlerDelegate, this); m_yRangeCells[i].textField()->setDraftTextBuffer(m_draftTextBuffer); } } diff --git a/apps/shared/range_parameter_controller.h b/apps/shared/range_parameter_controller.h index faead2a9a..2a0f96f13 100644 --- a/apps/shared/range_parameter_controller.h +++ b/apps/shared/range_parameter_controller.h @@ -9,7 +9,7 @@ namespace Shared { class RangeParameterController : public FloatParameterController { public: - RangeParameterController(Responder * parentResponder, InteractiveCurveViewRange * interactiveCurveViewRange); + RangeParameterController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, InteractiveCurveViewRange * interactiveCurveViewRange); const char * title() override; int numberOfRows() override; int typeAtLocation(int i, int j) override; diff --git a/apps/shared/storage_function_go_to_parameter_controller.cpp b/apps/shared/storage_function_go_to_parameter_controller.cpp index 80a3f5fa9..66728f009 100644 --- a/apps/shared/storage_function_go_to_parameter_controller.cpp +++ b/apps/shared/storage_function_go_to_parameter_controller.cpp @@ -5,8 +5,8 @@ namespace Shared { -StorageFunctionGoToParameterController::StorageFunctionGoToParameterController(Responder * parentResponder, InteractiveCurveViewRange * graphRange, CurveViewCursor * cursor, I18n::Message symbol) : - GoToParameterController(parentResponder, graphRange, cursor, symbol), +StorageFunctionGoToParameterController::StorageFunctionGoToParameterController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, InteractiveCurveViewRange * graphRange, CurveViewCursor * cursor, I18n::Message symbol) : + GoToParameterController(parentResponder, inputEventHandlerDelegate, graphRange, cursor, symbol), m_record() { } diff --git a/apps/shared/storage_function_go_to_parameter_controller.h b/apps/shared/storage_function_go_to_parameter_controller.h index aea327599..d5c0b898e 100644 --- a/apps/shared/storage_function_go_to_parameter_controller.h +++ b/apps/shared/storage_function_go_to_parameter_controller.h @@ -8,7 +8,7 @@ namespace Shared { class StorageFunctionGoToParameterController : public GoToParameterController { public: - StorageFunctionGoToParameterController(Responder * parentResponder, InteractiveCurveViewRange * graphRange, CurveViewCursor * cursor, I18n::Message symbol); + StorageFunctionGoToParameterController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, InteractiveCurveViewRange * graphRange, CurveViewCursor * cursor, I18n::Message symbol); const char * title() override; void setRecord(Ion::Storage::Record record); protected: diff --git a/apps/shared/storage_function_graph_controller.cpp b/apps/shared/storage_function_graph_controller.cpp index a7485dbda..591149fde 100644 --- a/apps/shared/storage_function_graph_controller.cpp +++ b/apps/shared/storage_function_graph_controller.cpp @@ -8,8 +8,8 @@ using namespace Poincare; namespace Shared { -StorageFunctionGraphController::StorageFunctionGraphController(Responder * parentResponder, ButtonRowController * header, InteractiveCurveViewRange * interactiveRange, CurveView * curveView, CurveViewCursor * cursor, int * indexFunctionSelectedByCursor, uint32_t * modelVersion, uint32_t * rangeVersion, Preferences::AngleUnit * angleUnitVersion) : - InteractiveCurveViewController(parentResponder, header, interactiveRange, curveView, cursor, modelVersion, rangeVersion), +StorageFunctionGraphController::StorageFunctionGraphController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, ButtonRowController * header, InteractiveCurveViewRange * interactiveRange, CurveView * curveView, CurveViewCursor * cursor, int * indexFunctionSelectedByCursor, uint32_t * modelVersion, uint32_t * rangeVersion, Preferences::AngleUnit * angleUnitVersion) : + InteractiveCurveViewController(parentResponder, inputEventHandlerDelegate, header, interactiveRange, curveView, cursor, modelVersion, rangeVersion), m_initialisationParameterController(this, interactiveRange), m_angleUnitVersion(angleUnitVersion), m_indexFunctionSelectedByCursor(indexFunctionSelectedByCursor) diff --git a/apps/shared/storage_function_graph_controller.h b/apps/shared/storage_function_graph_controller.h index c36069af8..000a98f27 100644 --- a/apps/shared/storage_function_graph_controller.h +++ b/apps/shared/storage_function_graph_controller.h @@ -13,7 +13,7 @@ namespace Shared { class StorageFunctionGraphController : public InteractiveCurveViewController, public StorageFunctionBannerDelegate { public: - StorageFunctionGraphController(Responder * parentResponder, ButtonRowController * header, InteractiveCurveViewRange * interactiveRange, CurveView * curveView, CurveViewCursor * cursor, int * indexFunctionSelectedByCursor, uint32_t * modelVersion, uint32_t * rangeVersion, Poincare::Preferences::AngleUnit * angleUnitVersion); + StorageFunctionGraphController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, ButtonRowController * header, InteractiveCurveViewRange * interactiveRange, CurveView * curveView, CurveViewCursor * cursor, int * indexFunctionSelectedByCursor, uint32_t * modelVersion, uint32_t * rangeVersion, Poincare::Preferences::AngleUnit * angleUnitVersion); bool isEmpty() const override; ViewController * initialisationParameterController() override; void viewWillAppear() override; diff --git a/apps/shared/storage_sum_graph_controller.cpp b/apps/shared/storage_sum_graph_controller.cpp index 345d129f2..4b41aae33 100644 --- a/apps/shared/storage_sum_graph_controller.cpp +++ b/apps/shared/storage_sum_graph_controller.cpp @@ -13,7 +13,7 @@ using namespace Poincare; namespace Shared { -StorageSumGraphController::StorageSumGraphController(Responder * parentResponder, StorageFunctionGraphView * graphView, InteractiveCurveViewRange * range, CurveViewCursor * cursor, char sumSymbol) : +StorageSumGraphController::StorageSumGraphController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, StorageFunctionGraphView * graphView, InteractiveCurveViewRange * range, CurveViewCursor * cursor, char sumSymbol) : SimpleInteractiveCurveViewController(parentResponder, range, graphView, cursor), m_step(Step::FirstParameter), m_startSum(NAN), @@ -21,7 +21,7 @@ StorageSumGraphController::StorageSumGraphController(Responder * parentResponder m_record(), m_graphRange(range), m_graphView(graphView), - m_legendView(this, sumSymbol), + m_legendView(this, inputEventHandlerDelegate, sumSymbol), m_cursorView() { } @@ -203,11 +203,11 @@ bool StorageSumGraphController::handleEnter() { /* Legend View */ -StorageSumGraphController::LegendView::LegendView(StorageSumGraphController * controller, char sumSymbol) : +StorageSumGraphController::LegendView::LegendView(StorageSumGraphController * controller, InputEventHandlerDelegate * inputEventHandlerDelegate, char sumSymbol) : m_sum(0.0f, 0.5f, KDColorBlack, Palette::GreyMiddle), m_sumLayout(), m_legend(k_font, I18n::Message::Default, 0.0f, 0.5f, KDColorBlack, Palette::GreyMiddle), - m_editableZone(controller, m_draftText, m_draftText, TextField::maxBufferSize(), controller, false, k_font, 0.0f, 0.5f, KDColorBlack, Palette::GreyMiddle), + m_editableZone(controller, m_draftText, m_draftText, TextField::maxBufferSize(), inputEventHandlerDelegate, controller, false, k_font, 0.0f, 0.5f, KDColorBlack, Palette::GreyMiddle), m_sumSymbol(sumSymbol) { m_draftText[0] = 0; diff --git a/apps/shared/storage_sum_graph_controller.h b/apps/shared/storage_sum_graph_controller.h index 6e17684e5..85fece226 100644 --- a/apps/shared/storage_sum_graph_controller.h +++ b/apps/shared/storage_sum_graph_controller.h @@ -14,7 +14,7 @@ namespace Shared { class StorageSumGraphController : public SimpleInteractiveCurveViewController, public TextFieldDelegate { public: - StorageSumGraphController(Responder * parentResponder, StorageFunctionGraphView * curveView, InteractiveCurveViewRange * range, CurveViewCursor * cursor, char sumSymbol); + StorageSumGraphController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, StorageFunctionGraphView * curveView, InteractiveCurveViewRange * range, CurveViewCursor * cursor, char sumSymbol); void viewWillAppear() override; void didEnterResponderChain(Responder * previousFirstResponder) override; bool handleEvent(Ion::Events::Event event) override; @@ -48,7 +48,7 @@ private: bool handleEnter() override; class LegendView : public View { public: - LegendView(StorageSumGraphController * controller, char sumSymbol); + LegendView(StorageSumGraphController * controller, InputEventHandlerDelegate * inputEventHandlerDelegate, char sumSymbol); LegendView(const LegendView& other) = delete; LegendView(LegendView&& other) = delete; LegendView& operator=(const LegendView& other) = delete; diff --git a/apps/shared/storage_values_controller.cpp b/apps/shared/storage_values_controller.cpp index 1ac8f5795..38d14a041 100644 --- a/apps/shared/storage_values_controller.cpp +++ b/apps/shared/storage_values_controller.cpp @@ -9,7 +9,7 @@ using namespace Poincare; namespace Shared { -StorageValuesController::StorageValuesController(Responder * parentResponder, ButtonRowController * header, I18n::Message parameterTitle, IntervalParameterController * intervalParameterController, Interval * interval) : +StorageValuesController::StorageValuesController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, ButtonRowController * header, I18n::Message parameterTitle, IntervalParameterController * intervalParameterController, Interval * interval) : EditableCellTableViewController(parentResponder), ButtonRowDelegate(header, nullptr), m_interval(interval), @@ -35,7 +35,7 @@ StorageValuesController::StorageValuesController(Responder * parentResponder, Bu m_abscissaTitleCell.setMessageFont(k_font); for (int i = 0; i < k_maxNumberOfAbscissaCells; i++) { m_abscissaCells[i].setParentResponder(&m_selectableTableView); - m_abscissaCells[i].editableTextCell()->textField()->setDelegate(this); + m_abscissaCells[i].editableTextCell()->textField()->setDelegates(inputEventHandlerDelegate, this); m_abscissaCells[i].editableTextCell()->textField()->setDraftTextBuffer(m_draftTextBuffer); m_abscissaCells[i].editableTextCell()->textField()->setFont(k_font); } diff --git a/apps/shared/storage_values_controller.h b/apps/shared/storage_values_controller.h index 3c71f0777..1e9fb5629 100644 --- a/apps/shared/storage_values_controller.h +++ b/apps/shared/storage_values_controller.h @@ -15,7 +15,7 @@ namespace Shared { class StorageValuesController : public EditableCellTableViewController, public ButtonRowDelegate, public AlternateEmptyViewDefaultDelegate { public: - StorageValuesController(Responder * parentResponder, ButtonRowController * header, I18n::Message parameterTitle, IntervalParameterController * intervalParameterController, Interval * interval); + StorageValuesController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, ButtonRowController * header, I18n::Message parameterTitle, IntervalParameterController * intervalParameterController, Interval * interval); const char * title() override; Interval * interval(); int numberOfColumns() override; diff --git a/apps/shared/store_cell.h b/apps/shared/store_cell.h index 9e0f70064..a785a8d2b 100644 --- a/apps/shared/store_cell.h +++ b/apps/shared/store_cell.h @@ -7,8 +7,8 @@ namespace Shared { class StoreCell : public HideableEvenOddEditableTextCell { public: - StoreCell(Responder * parentResponder = nullptr, TextFieldDelegate * delegate = nullptr, char * draftTextBuffer = nullptr) : - HideableEvenOddEditableTextCell(parentResponder, delegate, draftTextBuffer), + StoreCell(Responder * parentResponder = nullptr, InputEventHandlerDelegate * inputEventHandlerDelegate = nullptr, TextFieldDelegate * delegate = nullptr, char * draftTextBuffer = nullptr) : + HideableEvenOddEditableTextCell(parentResponder, inputEventHandlerDelegate, delegate, draftTextBuffer), m_separatorLeft(false) {} void setSeparatorLeft(bool separator); diff --git a/apps/shared/store_controller.cpp b/apps/shared/store_controller.cpp index 1317572dc..62d955239 100644 --- a/apps/shared/store_controller.cpp +++ b/apps/shared/store_controller.cpp @@ -12,11 +12,11 @@ static inline int max(int x, int y) { return (x>y ? x : y); } namespace Shared { -StoreController::ContentView::ContentView(DoublePairStore * store, Responder * parentResponder, TableViewDataSource * dataSource, SelectableTableViewDataSource * selectionDataSource, TextFieldDelegate * textFieldDelegate) : +StoreController::ContentView::ContentView(DoublePairStore * store, Responder * parentResponder, TableViewDataSource * dataSource, SelectableTableViewDataSource * selectionDataSource, InputEventHandlerDelegate * inputEventHandlerDelegate, TextFieldDelegate * textFieldDelegate) : View(), Responder(parentResponder), m_dataView(store, this, dataSource, selectionDataSource), - m_formulaInputView(this, textFieldDelegate), + m_formulaInputView(this, inputEventHandlerDelegate, textFieldDelegate), m_displayFormulaInputView(false) { m_dataView.setBackgroundColor(Palette::WallScreenDark); @@ -52,16 +52,16 @@ KDRect StoreController::ContentView::formulaFrame() const { return KDRect(0, bounds().height() - k_formulaInputHeight, bounds().width(), m_displayFormulaInputView ? k_formulaInputHeight : 0); } -StoreController::StoreController(Responder * parentResponder, DoublePairStore * store, ButtonRowController * header) : +StoreController::StoreController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, DoublePairStore * store, ButtonRowController * header) : EditableCellTableViewController(parentResponder), ButtonRowDelegate(header, nullptr), m_editableCells{}, m_store(store), - m_contentView(m_store, this, this, this, this) + m_contentView(m_store, this, this, this, inputEventHandlerDelegate, this) { for (int i = 0; i < k_maxNumberOfEditableCells; i++) { m_editableCells[i].setParentResponder(m_contentView.dataView()); - m_editableCells[i].editableTextCell()->textField()->setDelegate(this); + m_editableCells[i].editableTextCell()->textField()->setDelegates(inputEventHandlerDelegate, this); m_editableCells[i].editableTextCell()->textField()->setDraftTextBuffer(m_draftTextBuffer); } } diff --git a/apps/shared/store_controller.h b/apps/shared/store_controller.h index d29f00cf2..9845244ed 100644 --- a/apps/shared/store_controller.h +++ b/apps/shared/store_controller.h @@ -14,7 +14,7 @@ namespace Shared { class StoreController : public EditableCellTableViewController, public ButtonRowDelegate { public: - StoreController(Responder * parentResponder, DoublePairStore * store, ButtonRowController * header); + StoreController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, DoublePairStore * store, ButtonRowController * header); View * view() override { return &m_contentView; } virtual StoreContext * storeContext() = 0; @@ -55,7 +55,7 @@ protected: class ContentView : public View , public Responder { public: - ContentView(DoublePairStore * store, Responder * parentResponder, TableViewDataSource * dataSource, SelectableTableViewDataSource * selectionDataSource, TextFieldDelegate * textFieldDelegate); + ContentView(DoublePairStore * store, Responder * parentResponder, TableViewDataSource * dataSource, SelectableTableViewDataSource * selectionDataSource, InputEventHandlerDelegate * inputEventHandlerDelegate, TextFieldDelegate * textFieldDelegate); StoreSelectableTableView * dataView() { return &m_dataView; } BufferTextViewWithTextField * formulaInputView() { return &m_formulaInputView; } void displayFormulaInput(bool display); diff --git a/apps/shared/sum_graph_controller.cpp b/apps/shared/sum_graph_controller.cpp index 8277049b6..4d2fee33d 100644 --- a/apps/shared/sum_graph_controller.cpp +++ b/apps/shared/sum_graph_controller.cpp @@ -13,7 +13,7 @@ using namespace Poincare; namespace Shared { -SumGraphController::SumGraphController(Responder * parentResponder, FunctionGraphView * graphView, InteractiveCurveViewRange * range, CurveViewCursor * cursor, char sumSymbol) : +SumGraphController::SumGraphController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, FunctionGraphView * graphView, InteractiveCurveViewRange * range, CurveViewCursor * cursor, char sumSymbol) : SimpleInteractiveCurveViewController(parentResponder, range, graphView, cursor), m_step(Step::FirstParameter), m_startSum(NAN), @@ -21,7 +21,7 @@ SumGraphController::SumGraphController(Responder * parentResponder, FunctionGrap m_function(nullptr), m_graphRange(range), m_graphView(graphView), - m_legendView(this, sumSymbol), + m_legendView(this, inputEventHandlerDelegate, sumSymbol), m_cursorView() { } @@ -202,11 +202,11 @@ bool SumGraphController::handleEnter() { /* Legend View */ -SumGraphController::LegendView::LegendView(SumGraphController * controller, char sumSymbol) : +SumGraphController::LegendView::LegendView(SumGraphController * controller, InputEventHandlerDelegate * inputEventHandlerDelegate, char sumSymbol) : m_sum(0.0f, 0.5f, KDColorBlack, Palette::GreyMiddle), m_sumLayout(), m_legend(KDFont::SmallFont, I18n::Message::Default, 0.0f, 0.5f, KDColorBlack, Palette::GreyMiddle), - m_editableZone(controller, m_draftText, m_draftText, TextField::maxBufferSize(), controller, false, KDFont::SmallFont, 0.0f, 0.5f, KDColorBlack, Palette::GreyMiddle), + m_editableZone(controller, m_draftText, m_draftText, TextField::maxBufferSize(), inputEventHandlerDelegate, controller, false, KDFont::SmallFont, 0.0f, 0.5f, KDColorBlack, Palette::GreyMiddle), m_sumSymbol(sumSymbol) { m_draftText[0] = 0; diff --git a/apps/shared/sum_graph_controller.h b/apps/shared/sum_graph_controller.h index 13f738cb6..9def6e084 100644 --- a/apps/shared/sum_graph_controller.h +++ b/apps/shared/sum_graph_controller.h @@ -14,7 +14,7 @@ namespace Shared { class SumGraphController : public SimpleInteractiveCurveViewController, public TextFieldDelegate { public: - SumGraphController(Responder * parentResponder, FunctionGraphView * curveView, InteractiveCurveViewRange * range, CurveViewCursor * cursor, char sumSymbol); + SumGraphController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, FunctionGraphView * curveView, InteractiveCurveViewRange * range, CurveViewCursor * cursor, char sumSymbol); void viewWillAppear() override; void didEnterResponderChain(Responder * previousFirstResponder) override; bool handleEvent(Ion::Events::Event event) override; @@ -48,7 +48,7 @@ private: bool handleEnter() override; class LegendView : public View { public: - LegendView(SumGraphController * controller, char sumSymbol); + LegendView(SumGraphController * controller, InputEventHandlerDelegate * inputEventHandlerDelegate, char sumSymbol); LegendView(const LegendView& other) = delete; LegendView(LegendView&& other) = delete; LegendView& operator=(const LegendView& other) = delete; diff --git a/apps/shared/text_field_delegate.cpp b/apps/shared/text_field_delegate.cpp index d63205115..3de2e36a4 100644 --- a/apps/shared/text_field_delegate.cpp +++ b/apps/shared/text_field_delegate.cpp @@ -12,8 +12,4 @@ bool TextFieldDelegate::textFieldDidReceiveEvent(::TextField * textField, Ion::E return textFieldDelegateApp()->textFieldDidReceiveEvent(textField, event); } -Toolbox * TextFieldDelegate::toolboxForInputEventHandler(InputEventHandler * textInput) { - return textFieldDelegateApp()->toolboxForInputEventHandler(textInput); -} - } diff --git a/apps/shared/text_field_delegate.h b/apps/shared/text_field_delegate.h index 8bdc71a8d..c23a0ad0e 100644 --- a/apps/shared/text_field_delegate.h +++ b/apps/shared/text_field_delegate.h @@ -10,7 +10,6 @@ class TextFieldDelegate : public ::TextFieldDelegate { public: bool textFieldShouldFinishEditing(TextField * textField, Ion::Events::Event event) override; bool textFieldDidReceiveEvent(TextField * textField, Ion::Events::Event event) override; - Toolbox * toolboxForInputEventHandler(InputEventHandler * textInput) override; private: virtual TextFieldDelegateApp * textFieldDelegateApp() = 0; }; diff --git a/apps/shared/text_field_delegate_app.cpp b/apps/shared/text_field_delegate_app.cpp index 70fa63453..fdf4745b9 100644 --- a/apps/shared/text_field_delegate_app.cpp +++ b/apps/shared/text_field_delegate_app.cpp @@ -8,7 +8,7 @@ using namespace Poincare; namespace Shared { TextFieldDelegateApp::TextFieldDelegateApp(Container * container, Snapshot * snapshot, ViewController * rootViewController) : - ::App(container, snapshot, rootViewController, I18n::Message::Warning), + InputEventHandlerDelegateApp(container, snapshot, rootViewController), TextFieldDelegate() { } @@ -17,10 +17,6 @@ Context * TextFieldDelegateApp::localContext() { return container()->globalContext(); } -AppsContainer * TextFieldDelegateApp::container() { - return (AppsContainer *)app()->container(); -} - char TextFieldDelegateApp::XNT() { return 'X'; } @@ -41,12 +37,6 @@ bool TextFieldDelegateApp::textFieldDidReceiveEvent(TextField * textField, Ion:: return false; } -Toolbox * TextFieldDelegateApp::toolboxForInputEventHandler(InputEventHandler * textInput) { - Toolbox * toolbox = container()->mathToolbox(); - toolbox->setSender(textInput); - return toolbox; -} - /* Protected */ bool TextFieldDelegateApp::fieldDidReceiveEvent(EditableField * field, Responder * responder, Ion::Events::Event event) { diff --git a/apps/shared/text_field_delegate_app.h b/apps/shared/text_field_delegate_app.h index db7b015d5..e8277d966 100644 --- a/apps/shared/text_field_delegate_app.h +++ b/apps/shared/text_field_delegate_app.h @@ -3,21 +3,20 @@ #include #include +#include "input_event_handler_delegate_app.h" #include "../i18n.h" class AppsContainer; namespace Shared { -class TextFieldDelegateApp : public ::App, public TextFieldDelegate { +class TextFieldDelegateApp : public InputEventHandlerDelegateApp, public TextFieldDelegate { public: virtual ~TextFieldDelegateApp() = default; virtual Poincare::Context * localContext(); - AppsContainer * container(); virtual char XNT(); bool textFieldShouldFinishEditing(TextField * textField, Ion::Events::Event event) override; virtual bool textFieldDidReceiveEvent(TextField * textField, Ion::Events::Event event) override; - Toolbox * toolboxForInputEventHandler(InputEventHandler * textInput) override; protected: TextFieldDelegateApp(Container * container, Snapshot * snapshot, ViewController * rootViewController); protected: diff --git a/apps/shared/text_field_with_extension.h b/apps/shared/text_field_with_extension.h index eea00eb75..317509669 100644 --- a/apps/shared/text_field_with_extension.h +++ b/apps/shared/text_field_with_extension.h @@ -12,6 +12,7 @@ public: char * textBuffer, char * draftTextBuffer, size_t textBufferSize, + ::InputEventHandlerDelegate * inputEventHandlerDelegate, ::TextFieldDelegate * delegate = nullptr, bool hasTwoBuffers = true, const KDFont * size = KDFont::LargeFont, @@ -19,7 +20,7 @@ public: float verticalAlignment = 0.5f, KDColor textColor = KDColorBlack, KDColor backgroundColor = KDColorWhite) : - TextField(parentResponder, textBuffer, draftTextBuffer, textBufferSize, delegate, hasTwoBuffers, size, horizontalAlignment, verticalAlignment, textColor, backgroundColor), + TextField(parentResponder, textBuffer, draftTextBuffer, textBufferSize, inputEventHandlerDelegate, delegate, hasTwoBuffers, size, horizontalAlignment, verticalAlignment, textColor, backgroundColor), m_extensionLength(extensionLength) {} private: diff --git a/apps/shared/values_controller.cpp b/apps/shared/values_controller.cpp index 33d4e9d38..ce3fd76a4 100644 --- a/apps/shared/values_controller.cpp +++ b/apps/shared/values_controller.cpp @@ -9,7 +9,7 @@ using namespace Poincare; namespace Shared { -ValuesController::ValuesController(Responder * parentResponder, ButtonRowController * header, I18n::Message parameterTitle, IntervalParameterController * intervalParameterController, Interval * interval) : +ValuesController::ValuesController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, ButtonRowController * header, I18n::Message parameterTitle, IntervalParameterController * intervalParameterController, Interval * interval) : EditableCellTableViewController(parentResponder), ButtonRowDelegate(header, nullptr), m_interval(interval), @@ -35,7 +35,7 @@ ValuesController::ValuesController(Responder * parentResponder, ButtonRowControl m_abscissaTitleCell.setMessageFont(KDFont::SmallFont); for (int i = 0; i < k_maxNumberOfAbscissaCells; i++) { m_abscissaCells[i].setParentResponder(&m_selectableTableView); - m_abscissaCells[i].editableTextCell()->textField()->setDelegate(this); + m_abscissaCells[i].editableTextCell()->textField()->setDelegates(inputEventHandlerDelegate, this); m_abscissaCells[i].editableTextCell()->textField()->setDraftTextBuffer(m_draftTextBuffer); m_abscissaCells[i].editableTextCell()->textField()->setFont(KDFont::SmallFont); } diff --git a/apps/shared/values_controller.h b/apps/shared/values_controller.h index 43c6bc162..525c6210c 100644 --- a/apps/shared/values_controller.h +++ b/apps/shared/values_controller.h @@ -15,7 +15,7 @@ namespace Shared { class ValuesController : public EditableCellTableViewController, public ButtonRowDelegate, public AlternateEmptyViewDefaultDelegate { public: - ValuesController(Responder * parentResponder, ButtonRowController * header, I18n::Message parameterTitle, IntervalParameterController * intervalParameterController, Interval * interval); + ValuesController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, ButtonRowController * header, I18n::Message parameterTitle, IntervalParameterController * intervalParameterController, Interval * interval); const char * title() override; Interval * interval(); int numberOfColumns() override; diff --git a/apps/solver/app.cpp b/apps/solver/app.cpp index eb486cd45..f00b7abe0 100644 --- a/apps/solver/app.cpp +++ b/apps/solver/app.cpp @@ -45,12 +45,12 @@ void App::Snapshot::tidy() { App::App(Container * container, Snapshot * snapshot) : ExpressionFieldDelegateApp(container, snapshot, &m_inputViewController), m_solutionsController(&m_alternateEmptyViewController, snapshot->equationStore()), - m_intervalController(nullptr, snapshot->equationStore()), + m_intervalController(nullptr, this, snapshot->equationStore()), m_alternateEmptyViewController(nullptr, &m_solutionsController, &m_solutionsController), m_listController(&m_listFooter, snapshot->equationStore(), &m_listFooter), m_listFooter(&m_stackViewController, &m_listController, &m_listController, ButtonRowController::Position::Bottom, ButtonRowController::Style::EmbossedGrey, ButtonRowController::Size::Large), m_stackViewController(&m_inputViewController, &m_listFooter), - m_inputViewController(&m_modalViewController, &m_stackViewController, &m_listController, &m_listController) + m_inputViewController(&m_modalViewController, &m_stackViewController, this, &m_listController, &m_listController) { } diff --git a/apps/solver/interval_controller.cpp b/apps/solver/interval_controller.cpp index 87fd46584..16514c0c9 100644 --- a/apps/solver/interval_controller.cpp +++ b/apps/solver/interval_controller.cpp @@ -41,7 +41,7 @@ void IntervalController::ContentView::layoutSubviews() { /* IntervalController Controller */ -IntervalController::IntervalController(Responder * parentResponder, EquationStore * equationStore) : +IntervalController::IntervalController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, EquationStore * equationStore) : FloatParameterController(parentResponder), m_contentView(&m_selectableTableView), m_intervalCell{}, @@ -51,7 +51,7 @@ IntervalController::IntervalController(Responder * parentResponder, EquationStor 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()->setDelegates(inputEventHandlerDelegate, this); m_intervalCell[i].textField()->setDraftTextBuffer(m_draftTextBuffer); } } diff --git a/apps/solver/interval_controller.h b/apps/solver/interval_controller.h index 297dbd8e9..5b1bc2f2b 100644 --- a/apps/solver/interval_controller.h +++ b/apps/solver/interval_controller.h @@ -9,7 +9,7 @@ namespace Solver { class IntervalController : public Shared::FloatParameterController { public: - IntervalController(Responder * parentResponder, EquationStore * equationStore); + IntervalController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, EquationStore * equationStore); const char * title() override; View * view() override { return &m_contentView; } int numberOfRows() override; diff --git a/apps/statistics/app.cpp b/apps/statistics/app.cpp index e674f7b9a..64c935553 100644 --- a/apps/statistics/app.cpp +++ b/apps/statistics/app.cpp @@ -57,11 +57,11 @@ App::App(Container * container, Snapshot * snapshot) : m_boxController(&m_boxAlternateEmptyViewController, &m_boxHeader, snapshot->store(), snapshot->selectedBoxQuantile(), snapshot->selectedBoxSeriesIndex()), m_boxAlternateEmptyViewController(&m_boxHeader, &m_boxController, &m_boxController), m_boxHeader(&m_tabViewController, &m_boxAlternateEmptyViewController, &m_boxController), - m_histogramController(&m_histogramAlternateEmptyViewController, &m_histogramHeader, snapshot->store(), snapshot->storeVersion(), snapshot->barVersion(), snapshot->rangeVersion(), snapshot->selectedHistogramBarIndex(), snapshot->selectedHistogramSeriesIndex()), + m_histogramController(&m_histogramAlternateEmptyViewController, this, &m_histogramHeader, snapshot->store(), snapshot->storeVersion(), snapshot->barVersion(), snapshot->rangeVersion(), snapshot->selectedHistogramBarIndex(), snapshot->selectedHistogramSeriesIndex()), m_histogramAlternateEmptyViewController(&m_histogramHeader, &m_histogramController, &m_histogramController), m_histogramHeader(&m_histogramStackViewController, &m_histogramAlternateEmptyViewController, &m_histogramController), m_histogramStackViewController(&m_tabViewController, &m_histogramHeader), - m_storeController(&m_storeHeader, snapshot->store(), &m_storeHeader), + m_storeController(&m_storeHeader, this, snapshot->store(), &m_storeHeader), m_storeHeader(&m_storeStackViewController, &m_storeController, &m_storeController), m_storeStackViewController(&m_tabViewController, &m_storeHeader), m_tabViewController(&m_modalViewController, snapshot, &m_storeStackViewController, &m_histogramStackViewController, &m_boxHeader, &m_calculationHeader) diff --git a/apps/statistics/histogram_controller.cpp b/apps/statistics/histogram_controller.cpp index bc7654029..a360a3183 100644 --- a/apps/statistics/histogram_controller.cpp +++ b/apps/statistics/histogram_controller.cpp @@ -14,14 +14,14 @@ namespace Statistics { static inline float min(float x, float y) { return (xy ? x : y); } -HistogramController::HistogramController(Responder * parentResponder, ButtonRowController * header, Store * store, uint32_t * storeVersion, uint32_t * barVersion, uint32_t * rangeVersion, int * selectedBarIndex, int * selectedSeriesIndex) : +HistogramController::HistogramController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, ButtonRowController * header, Store * store, uint32_t * storeVersion, uint32_t * barVersion, uint32_t * rangeVersion, int * selectedBarIndex, int * selectedSeriesIndex) : MultipleDataViewController(parentResponder, store, selectedBarIndex, selectedSeriesIndex), ButtonRowDelegate(header, nullptr), m_view(this, store), m_storeVersion(storeVersion), m_barVersion(barVersion), m_rangeVersion(rangeVersion), - m_histogramParameterController(nullptr, store) + m_histogramParameterController(nullptr, inputEventHandlerDelegate, store) { } diff --git a/apps/statistics/histogram_controller.h b/apps/statistics/histogram_controller.h index def083feb..6f4f7ae39 100644 --- a/apps/statistics/histogram_controller.h +++ b/apps/statistics/histogram_controller.h @@ -11,7 +11,7 @@ namespace Statistics { class HistogramController : public MultipleDataViewController, public ButtonRowDelegate { public: - HistogramController(Responder * parentResponder, ButtonRowController * header, Store * store, uint32_t * m_storeVersion, uint32_t * m_barVersion, uint32_t * m_rangeVersion, int * m_selectedBarIndex, int * selectedSeriesIndex); + HistogramController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, ButtonRowController * header, Store * store, uint32_t * m_storeVersion, uint32_t * m_barVersion, uint32_t * m_rangeVersion, int * m_selectedBarIndex, int * selectedSeriesIndex); HistogramParameterController * histogramParameterController() { return &m_histogramParameterController; } void setCurrentDrawnSeries(int series); diff --git a/apps/statistics/histogram_parameter_controller.cpp b/apps/statistics/histogram_parameter_controller.cpp index 2d44aa9f1..8dde871a4 100644 --- a/apps/statistics/histogram_parameter_controller.cpp +++ b/apps/statistics/histogram_parameter_controller.cpp @@ -7,14 +7,14 @@ using namespace Shared; namespace Statistics { -HistogramParameterController::HistogramParameterController(Responder * parentResponder, Store * store) : +HistogramParameterController::HistogramParameterController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, Store * store) : FloatParameterController(parentResponder), 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()->setDelegates(inputEventHandlerDelegate, this); m_cells[i].textField()->setDraftTextBuffer(m_draftTextBuffer); } } diff --git a/apps/statistics/histogram_parameter_controller.h b/apps/statistics/histogram_parameter_controller.h index 11598dd76..0ef81008a 100644 --- a/apps/statistics/histogram_parameter_controller.h +++ b/apps/statistics/histogram_parameter_controller.h @@ -9,7 +9,7 @@ namespace Statistics { class HistogramParameterController : public Shared::FloatParameterController { public: - HistogramParameterController(Responder * parentResponder, Store * store); + HistogramParameterController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegateApp, Store * store); const char * title() override; int numberOfRows() override { return 1+k_numberOfCells; } void willDisplayCellForIndex(HighlightCell * cell, int index) override; diff --git a/apps/statistics/store_controller.cpp b/apps/statistics/store_controller.cpp index c4a96a316..db86f0ade 100644 --- a/apps/statistics/store_controller.cpp +++ b/apps/statistics/store_controller.cpp @@ -12,8 +12,8 @@ using namespace Shared; namespace Statistics { -StoreController::StoreController(Responder * parentResponder, Store * store, ButtonRowController * header) : - Shared::StoreController(parentResponder, store, header), +StoreController::StoreController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, Store * store, ButtonRowController * header) : + Shared::StoreController(parentResponder, inputEventHandlerDelegate, store, header), m_titleCells{}, m_store(store), m_statisticsContext(m_store), diff --git a/apps/statistics/store_controller.h b/apps/statistics/store_controller.h index 398bbe6c5..c3e2350e6 100644 --- a/apps/statistics/store_controller.h +++ b/apps/statistics/store_controller.h @@ -11,7 +11,7 @@ namespace Statistics { class StoreController : public Shared::StoreController { public: - StoreController(Responder * parentResponder, Store * store, ButtonRowController * header); + StoreController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, Store * store, ButtonRowController * header); Shared::StoreContext * storeContext() override; void setFormulaLabel() override; bool fillColumnWithFormula(Poincare::Expression formula) override; diff --git a/escher/include/escher/editable_field.h b/escher/include/escher/editable_field.h index bb47217a2..0343d183e 100644 --- a/escher/include/escher/editable_field.h +++ b/escher/include/escher/editable_field.h @@ -6,6 +6,7 @@ class EditableField : public InputEventHandler { public: + using InputEventHandler::InputEventHandler; virtual bool isEditing() const = 0; virtual void setEditing(bool isEditing, bool reinitDraftBuffer = true) = 0; virtual char XNTChar(char defaultXNTChar) = 0; diff --git a/escher/include/escher/editable_text_cell.h b/escher/include/escher/editable_text_cell.h index 053b8e02d..102c378f9 100644 --- a/escher/include/escher/editable_text_cell.h +++ b/escher/include/escher/editable_text_cell.h @@ -8,7 +8,7 @@ class EditableTextCell : public HighlightCell, public Responder { public: - EditableTextCell(Responder * parentResponder = nullptr, TextFieldDelegate * delegate = nullptr, char * draftTextBuffer = nullptr, const KDFont * font = KDFont::LargeFont, + EditableTextCell(Responder * parentResponder = nullptr, InputEventHandlerDelegate * inputEventHandlerDelegate = nullptr, TextFieldDelegate * delegate = nullptr, char * draftTextBuffer = nullptr, const KDFont * font = KDFont::LargeFont, float horizontalAlignment = 0.0f, float verticalAlignment = 0.5f, KDColor textColor = KDColorBlack, KDColor = KDColorWhite, KDCoordinate topMargin = 0, KDCoordinate rightMargin = 0, KDCoordinate bottomMargin = 0, KDCoordinate leftMargin = 0); TextField * textField(); void setMargins(KDCoordinate topMargin = 0, KDCoordinate rightMargin = 0, KDCoordinate bottomMargin = 0, KDCoordinate leftMargin = 0); diff --git a/escher/include/escher/even_odd_editable_text_cell.h b/escher/include/escher/even_odd_editable_text_cell.h index 50a9eeef7..bd7ccbe31 100644 --- a/escher/include/escher/even_odd_editable_text_cell.h +++ b/escher/include/escher/even_odd_editable_text_cell.h @@ -7,7 +7,7 @@ class EvenOddEditableTextCell : public EvenOddCell, public Responder { public: - EvenOddEditableTextCell(Responder * parentResponder = nullptr, TextFieldDelegate * delegate = nullptr, char * draftTextBuffer = nullptr, const KDFont * font = KDFont::LargeFont, float horizontalAlignment = 1.0f, float verticalAlignment = 0.5f, KDCoordinate topMargin = 0, KDCoordinate rightMargin = 0, KDCoordinate bottomMargin = 0, KDCoordinate leftMargin = 0); + EvenOddEditableTextCell(Responder * parentResponder = nullptr,InputEventHandlerDelegate * inputEventHandlerDelegate = nullptr, TextFieldDelegate * delegate = nullptr, char * draftTextBuffer = nullptr, const KDFont * font = KDFont::LargeFont, float horizontalAlignment = 1.0f, float verticalAlignment = 0.5f, KDCoordinate topMargin = 0, KDCoordinate rightMargin = 0, KDCoordinate bottomMargin = 0, KDCoordinate leftMargin = 0); EditableTextCell * editableTextCell(); void setEven(bool even) override; void setHighlighted(bool highlight) override; diff --git a/escher/include/escher/expression_field.h b/escher/include/escher/expression_field.h index 522013f35..b80be7775 100644 --- a/escher/include/escher/expression_field.h +++ b/escher/include/escher/expression_field.h @@ -9,7 +9,7 @@ class ExpressionField : public Responder, public View { public: - ExpressionField(Responder * parentResponder, char * textBuffer, int textBufferLength, TextFieldDelegate * textFieldDelegate, LayoutFieldDelegate * layoutFieldDelegate); + ExpressionField(Responder * parentResponder, char * textBuffer, int textBufferLength, InputEventHandlerDelegate * inputEventHandler, TextFieldDelegate * textFieldDelegate, LayoutFieldDelegate * layoutFieldDelegate); void setEditing(bool isEditing, bool reinitDraftBuffer = true); bool isEditing() const; diff --git a/escher/include/escher/input_event_handler.h b/escher/include/escher/input_event_handler.h index 409a24bcc..395ff3cf5 100644 --- a/escher/include/escher/input_event_handler.h +++ b/escher/include/escher/input_event_handler.h @@ -6,11 +6,11 @@ class App; class InputEventHandler { public: + InputEventHandler(InputEventHandlerDelegate * inputEventHandlerdelegate) : m_inputEventHandlerDelegate(inputEventHandlerdelegate) {} virtual bool handleEventWithText(const char * text, bool indentation = false, bool forceCursorRightOfText = false) { return false; } protected: bool handleToolboxEvent(App * app); -private: - virtual InputEventHandlerDelegate * inputEventHandlerDelegate() { return nullptr; }; + InputEventHandlerDelegate * m_inputEventHandlerDelegate; }; #endif diff --git a/escher/include/escher/input_view_controller.h b/escher/include/escher/input_view_controller.h index e2a57f17a..879c7ffd5 100644 --- a/escher/include/escher/input_view_controller.h +++ b/escher/include/escher/input_view_controller.h @@ -3,6 +3,7 @@ #include #include +#include #include #include #include @@ -12,9 +13,9 @@ /* TODO Implement a split view. Because we use a modal view, the main view is * redrawn underneath the modal view, which is visible and ugly. */ -class InputViewController : public ModalViewController, TextFieldDelegate, LayoutFieldDelegate { +class InputViewController : public ModalViewController, InputEventHandlerDelegate, TextFieldDelegate, LayoutFieldDelegate { public: - InputViewController(Responder * parentResponder, ViewController * child, TextFieldDelegate * textFieldDelegate, LayoutFieldDelegate * layoutFieldDelegate); + InputViewController(Responder * parentResponder, ViewController * child, InputEventHandlerDelegate * inputEventHandlerDelegate, TextFieldDelegate * textFieldDelegate, LayoutFieldDelegate * layoutFieldDelegate); void edit(Responder * caller, Ion::Events::Event event, void * context, const char * initialText, Invocation::Action successAction, Invocation::Action failureAction); const char * textBody(); void abortEditionAndDismiss(); @@ -37,7 +38,7 @@ public: private: class ExpressionFieldController : public ViewController { public: - ExpressionFieldController(Responder * parentResponder, TextFieldDelegate * textFieldDelegate, LayoutFieldDelegate * layoutFieldDelegate); + ExpressionFieldController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, TextFieldDelegate * textFieldDelegate, LayoutFieldDelegate * layoutFieldDelegate); ExpressionFieldController(const ExpressionFieldController& other) = delete; ExpressionFieldController(ExpressionFieldController&& other) = delete; ExpressionFieldController& operator=(const ExpressionFieldController& other) = delete; @@ -55,6 +56,7 @@ private: ExpressionFieldController m_expressionFieldController; Invocation m_successAction; Invocation m_failureAction; + InputEventHandlerDelegate * m_inputEventHandlerDelegate; TextFieldDelegate * m_textFieldDelegate; LayoutFieldDelegate * m_layoutFieldDelegate; bool m_inputViewHeightIsMaximal; diff --git a/escher/include/escher/layout_field.h b/escher/include/escher/layout_field.h index 0be368516..d9c0743d3 100644 --- a/escher/include/escher/layout_field.h +++ b/escher/include/escher/layout_field.h @@ -13,12 +13,13 @@ class LayoutField : public ScrollableView, public ScrollViewDataSource, public EditableField { public: - LayoutField(Responder * parentResponder, LayoutFieldDelegate * delegate = nullptr) : + LayoutField(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, LayoutFieldDelegate * delegate = nullptr) : ScrollableView(parentResponder, &m_contentView, this), + EditableField(inputEventHandlerDelegate), m_contentView(), m_delegate(delegate) {} - void setDelegate(LayoutFieldDelegate * delegate) { m_delegate = delegate; } + void setDelegates(InputEventHandlerDelegate * inputEventHandlerDelegate, LayoutFieldDelegate * delegate) { m_inputEventHandlerDelegate = inputEventHandlerDelegate; m_delegate = delegate; } bool isEditing() const override { return m_contentView.isEditing(); } void setEditing(bool isEditing, bool reinitDraftBuffer = false) override { m_contentView.setEditing(isEditing); } void clearLayout() { m_contentView.clearLayout(); } @@ -60,7 +61,6 @@ private: void scrollRightOfLayout(Poincare::Layout layoutR); void scrollToBaselinedRect(KDRect rect, KDCoordinate baseline); void insertLayoutAtCursor(Poincare::Layout layoutR, Poincare::Layout pointedLayout, bool forceCursorRightOfLayout = false); - InputEventHandlerDelegate * inputEventHandlerDelegate() override { return m_delegate; } class ContentView : public View { public: diff --git a/escher/include/escher/layout_field_delegate.h b/escher/include/escher/layout_field_delegate.h index 58ad98a03..2bce6a8f6 100644 --- a/escher/include/escher/layout_field_delegate.h +++ b/escher/include/escher/layout_field_delegate.h @@ -2,12 +2,11 @@ #define ESCHER_LAYOUT_FIELD_DELEGATE_H #include -#include #include class LayoutField; -class LayoutFieldDelegate : public InputEventHandlerDelegate { +class LayoutFieldDelegate { public: virtual bool layoutFieldShouldFinishEditing(LayoutField * layoutField, Ion::Events::Event event) = 0; virtual bool layoutFieldDidReceiveEvent(LayoutField * layoutField, Ion::Events::Event event) = 0; 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 bbcf472c5..6e19e0b64 100644 --- a/escher/include/escher/message_table_cell_with_editable_text.h +++ b/escher/include/escher/message_table_cell_with_editable_text.h @@ -7,7 +7,7 @@ class MessageTableCellWithEditableText : public Responder, public MessageTableCell { public: - MessageTableCellWithEditableText(Responder * parentResponder = nullptr, TextFieldDelegate * textFieldDelegate = nullptr, char * draftTextBuffer = nullptr, I18n::Message message = (I18n::Message)0); + MessageTableCellWithEditableText(Responder * parentResponder = nullptr, InputEventHandlerDelegate * inputEventHandlerDelegate = 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; diff --git a/escher/include/escher/text_area.h b/escher/include/escher/text_area.h index e4f1f784f..94a663e9f 100644 --- a/escher/include/escher/text_area.h +++ b/escher/include/escher/text_area.h @@ -10,7 +10,7 @@ class TextArea : public TextInput, public InputEventHandler { public: TextArea(Responder * parentResponder, View * contentView, const KDFont * font = KDFont::LargeFont); - void setDelegate(TextAreaDelegate * delegate) { m_delegate = delegate; } + void setDelegates(InputEventHandlerDelegate * inputEventHandlerDelegate, TextAreaDelegate * delegate) { m_inputEventHandlerDelegate = inputEventHandlerDelegate; m_delegate = delegate; } bool handleEvent(Ion::Events::Event event) override; bool handleEventWithText(const char * text, bool indentation = false, bool forceCursorRightOfText = false) override; void setText(char * textBuffer, size_t textBufferSize); @@ -18,7 +18,6 @@ public: protected: int indentationBeforeCursor() const; bool insertTextWithIndentation(const char * textBuffer, int location); - InputEventHandlerDelegate * inputEventHandlerDelegate() override { return m_delegate; } class Text { public: diff --git a/escher/include/escher/text_area_delegate.h b/escher/include/escher/text_area_delegate.h index 4b6d87fa6..c16c5ffa0 100644 --- a/escher/include/escher/text_area_delegate.h +++ b/escher/include/escher/text_area_delegate.h @@ -1,11 +1,9 @@ #ifndef ESCHER_TEXT_AREA_DELEGATE_H #define ESCHER_TEXT_AREA_DELEGATE_H -#include - class TextArea; -class TextAreaDelegate : public InputEventHandlerDelegate { +class TextAreaDelegate { public: virtual bool textAreaDidReceiveEvent(TextArea * textArea, Ion::Events::Event event) = 0; }; diff --git a/escher/include/escher/text_field.h b/escher/include/escher/text_field.h index 08576b62c..ce8871ea8 100644 --- a/escher/include/escher/text_field.h +++ b/escher/include/escher/text_field.h @@ -9,11 +9,11 @@ class TextField : public TextInput, public EditableField { public: TextField(Responder * parentResponder, char * textBuffer, char * draftTextBuffer, size_t textBufferSize, - TextFieldDelegate * delegate = nullptr, bool hasTwoBuffers = true, const KDFont * font = KDFont::LargeFont, + InputEventHandlerDelegate * inputEventHandlerDelegate, TextFieldDelegate * delegate = nullptr, bool hasTwoBuffers = true, const KDFont * font = KDFont::LargeFont, float horizontalAlignment = 0.0f, float verticalAlignment = 0.5f, KDColor textColor = KDColorBlack, KDColor backgroundColor = KDColorWhite); void setBackgroundColor(KDColor backgroundColor) override; void setTextColor(KDColor textColor); - void setDelegate(TextFieldDelegate * delegate) { m_delegate = delegate; } + void setDelegates(InputEventHandlerDelegate * inputEventHandlerDelegate, TextFieldDelegate * delegate) { m_inputEventHandlerDelegate = inputEventHandlerDelegate; m_delegate = delegate; } void setDraftTextBuffer(char * draftTextBuffer); bool isEditing() const override; size_t draftTextLength() const; @@ -79,7 +79,6 @@ protected: ContentView m_contentView; private: bool privateHandleEvent(Ion::Events::Event event); - InputEventHandlerDelegate * inputEventHandlerDelegate() override { return m_delegate; } bool m_hasTwoBuffers; TextFieldDelegate * m_delegate; }; diff --git a/escher/include/escher/text_field_delegate.h b/escher/include/escher/text_field_delegate.h index 2b3598dff..eae329dc5 100644 --- a/escher/include/escher/text_field_delegate.h +++ b/escher/include/escher/text_field_delegate.h @@ -1,11 +1,9 @@ #ifndef ESCHER_TEXT_FIELD_DELEGATE_H #define ESCHER_TEXT_FIELD_DELEGATE_H -#include - class TextField; -class TextFieldDelegate : public InputEventHandlerDelegate { +class TextFieldDelegate { public: virtual bool textFieldShouldFinishEditing(TextField * textField, Ion::Events::Event event) = 0; virtual bool textFieldDidReceiveEvent(TextField * textField, Ion::Events::Event event) = 0; diff --git a/escher/src/editable_text_cell.cpp b/escher/src/editable_text_cell.cpp index 0e3557917..f6388bfb0 100644 --- a/escher/src/editable_text_cell.cpp +++ b/escher/src/editable_text_cell.cpp @@ -3,11 +3,11 @@ #include #include -EditableTextCell::EditableTextCell(Responder * parentResponder, TextFieldDelegate * delegate, char * draftTextBuffer, +EditableTextCell::EditableTextCell(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, TextFieldDelegate * delegate, char * draftTextBuffer, const KDFont * font, float horizontalAlignment, float verticalAlignment, KDColor textColor, KDColor backgroundColor, KDCoordinate topMargin, KDCoordinate rightMargin, KDCoordinate bottomMargin, KDCoordinate leftMargin) : HighlightCell(), Responder(parentResponder), - m_textField(this, m_textBody, draftTextBuffer, TextField::maxBufferSize(), delegate, true, font, horizontalAlignment, verticalAlignment, textColor, backgroundColor), + m_textField(this, m_textBody, draftTextBuffer, TextField::maxBufferSize(), inputEventHandlerDelegate, delegate, true, font, horizontalAlignment, verticalAlignment, textColor, backgroundColor), m_topMargin(topMargin), m_rightMargin(rightMargin), m_bottomMargin(bottomMargin), diff --git a/escher/src/even_odd_editable_text_cell.cpp b/escher/src/even_odd_editable_text_cell.cpp index f7bacbd43..2eb3bbc63 100644 --- a/escher/src/even_odd_editable_text_cell.cpp +++ b/escher/src/even_odd_editable_text_cell.cpp @@ -2,10 +2,10 @@ #include #include -EvenOddEditableTextCell::EvenOddEditableTextCell(Responder * parentResponder, TextFieldDelegate * delegate, char * draftTextBuffer, const KDFont * font, float horizontalAlignment, float verticalAlignment, KDCoordinate topMargin, KDCoordinate rightMargin, KDCoordinate bottomMargin, KDCoordinate leftMargin) : +EvenOddEditableTextCell::EvenOddEditableTextCell(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, TextFieldDelegate * delegate, char * draftTextBuffer, const KDFont * font, float horizontalAlignment, float verticalAlignment, KDCoordinate topMargin, KDCoordinate rightMargin, KDCoordinate bottomMargin, KDCoordinate leftMargin) : EvenOddCell(), Responder(parentResponder), - m_editableCell(this, delegate, draftTextBuffer, font, horizontalAlignment, verticalAlignment, KDColorBlack, KDColorWhite, topMargin, rightMargin, bottomMargin, leftMargin) + m_editableCell(this, inputEventHandlerDelegate, delegate, draftTextBuffer, font, horizontalAlignment, verticalAlignment, KDColorBlack, KDColorWhite, topMargin, rightMargin, bottomMargin, leftMargin) { } diff --git a/escher/src/expression_field.cpp b/escher/src/expression_field.cpp index e4a1055d9..d61d01a6b 100644 --- a/escher/src/expression_field.cpp +++ b/escher/src/expression_field.cpp @@ -2,11 +2,11 @@ #include #include -ExpressionField::ExpressionField(Responder * parentResponder, char * textBuffer, int textBufferLength, TextFieldDelegate * textFieldDelegate, LayoutFieldDelegate * layoutFieldDelegate) : +ExpressionField::ExpressionField(Responder * parentResponder, char * textBuffer, int textBufferLength, InputEventHandlerDelegate * inputEventHandlerDelegate, TextFieldDelegate * textFieldDelegate, LayoutFieldDelegate * layoutFieldDelegate) : Responder(parentResponder), View(), - m_textField(parentResponder, textBuffer, textBuffer, textBufferLength, textFieldDelegate, false, KDFont::LargeFont, 0.0f, 0.5f, KDColorBlack, KDColorWhite), - m_layoutField(parentResponder, layoutFieldDelegate), + m_textField(parentResponder, textBuffer, textBuffer, textBufferLength, inputEventHandlerDelegate, textFieldDelegate, false, KDFont::LargeFont, 0.0f, 0.5f, KDColorBlack, KDColorWhite), + m_layoutField(parentResponder, inputEventHandlerDelegate, layoutFieldDelegate), m_textBuffer(textBuffer), m_textBufferLength(textBufferLength) { diff --git a/escher/src/input_event_handler.cpp b/escher/src/input_event_handler.cpp index 9c2ab770c..d2291c167 100644 --- a/escher/src/input_event_handler.cpp +++ b/escher/src/input_event_handler.cpp @@ -5,8 +5,8 @@ #include bool InputEventHandler::handleToolboxEvent(App * app) { - if (inputEventHandlerDelegate() != nullptr) { - Toolbox * toolbox = inputEventHandlerDelegate()->toolboxForInputEventHandler(this); + if (m_inputEventHandlerDelegate != nullptr) { + Toolbox * toolbox = m_inputEventHandlerDelegate->toolboxForInputEventHandler(this); toolbox->setSender(this); app->displayModalViewController(toolbox, 0.f, 0.f, Metric::PopUpTopMargin, Metric::PopUpLeftMargin, 0, Metric::PopUpRightMargin); return true; diff --git a/escher/src/input_view_controller.cpp b/escher/src/input_view_controller.cpp index 2aadfc841..dd001cb96 100644 --- a/escher/src/input_view_controller.cpp +++ b/escher/src/input_view_controller.cpp @@ -3,9 +3,9 @@ #include #include -InputViewController::ExpressionFieldController::ExpressionFieldController(Responder * parentResponder, TextFieldDelegate * textFieldDelegate, LayoutFieldDelegate * layoutFieldDelegate) : +InputViewController::ExpressionFieldController::ExpressionFieldController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, TextFieldDelegate * textFieldDelegate, LayoutFieldDelegate * layoutFieldDelegate) : ViewController(parentResponder), - m_expressionField(this, m_textBuffer, k_bufferLength, textFieldDelegate, layoutFieldDelegate) + m_expressionField(this, m_textBuffer, k_bufferLength, inputEventHandlerDelegate, textFieldDelegate, layoutFieldDelegate) { m_textBuffer[0] = 0; } @@ -14,11 +14,12 @@ void InputViewController::ExpressionFieldController::didBecomeFirstResponder() { app()->setFirstResponder(&m_expressionField); } -InputViewController::InputViewController(Responder * parentResponder, ViewController * child, TextFieldDelegate * textFieldDelegate, LayoutFieldDelegate * layoutFieldDelegate) : +InputViewController::InputViewController(Responder * parentResponder, ViewController * child, InputEventHandlerDelegate * inputEventHandlerDelegate, TextFieldDelegate * textFieldDelegate, LayoutFieldDelegate * layoutFieldDelegate) : ModalViewController(parentResponder, child), - m_expressionFieldController(this, this, this), + m_expressionFieldController(this, this, this, this), m_successAction(Invocation(nullptr, nullptr)), m_failureAction(Invocation(nullptr, nullptr)), + m_inputEventHandlerDelegate(inputEventHandlerDelegate), m_textFieldDelegate(textFieldDelegate), m_layoutFieldDelegate(layoutFieldDelegate), m_inputViewHeightIsMaximal(false) @@ -95,7 +96,7 @@ void InputViewController::layoutFieldDidChangeSize(LayoutField * layoutField) { } Toolbox * InputViewController::toolboxForInputEventHandler(InputEventHandler * handler) { - return m_textFieldDelegate->toolboxForInputEventHandler(handler); + return m_inputEventHandlerDelegate->toolboxForInputEventHandler(handler); } void InputViewController::inputViewDidFinishEditing() { diff --git a/escher/src/message_table_cell_with_editable_text.cpp b/escher/src/message_table_cell_with_editable_text.cpp index 764d70e8a..a9d2909fb 100644 --- a/escher/src/message_table_cell_with_editable_text.cpp +++ b/escher/src/message_table_cell_with_editable_text.cpp @@ -2,10 +2,10 @@ #include #include -MessageTableCellWithEditableText::MessageTableCellWithEditableText(Responder * parentResponder, TextFieldDelegate * textFieldDelegate, char * draftTextBuffer, I18n::Message message) : +MessageTableCellWithEditableText::MessageTableCellWithEditableText(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate, TextFieldDelegate * textFieldDelegate, char * draftTextBuffer, I18n::Message message) : Responder(parentResponder), MessageTableCell(message), - m_textField(this, m_textBody, draftTextBuffer, TextField::maxBufferSize(), textFieldDelegate, true, KDFont::LargeFont, 1.0f, 0.5f) + m_textField(this, m_textBody, draftTextBuffer, TextField::maxBufferSize(), inputEventHandlerDelegate, textFieldDelegate, true, KDFont::LargeFont, 1.0f, 0.5f) { m_textBody[0] = '\0'; } diff --git a/escher/src/text_area.cpp b/escher/src/text_area.cpp index 7933d302f..0723270fa 100644 --- a/escher/src/text_area.cpp +++ b/escher/src/text_area.cpp @@ -14,6 +14,7 @@ static inline size_t min(size_t a, size_t b) { TextArea::TextArea(Responder * parentResponder, View * contentView, const KDFont * font) : TextInput(parentResponder, contentView), + InputEventHandler(nullptr), m_delegate(nullptr) { } diff --git a/escher/src/text_field.cpp b/escher/src/text_field.cpp index 772560d68..418a4c6bb 100644 --- a/escher/src/text_field.cpp +++ b/escher/src/text_field.cpp @@ -177,9 +177,10 @@ KDRect TextField::ContentView::characterFrameAtIndex(size_t index) const { /* TextField */ TextField::TextField(Responder * parentResponder, char * textBuffer, char * draftTextBuffer, - size_t textBufferSize, TextFieldDelegate * delegate, bool hasTwoBuffers, const KDFont * font, + size_t textBufferSize, InputEventHandlerDelegate * inputEventHandlerDelegate, TextFieldDelegate * delegate, bool hasTwoBuffers, const KDFont * font, float horizontalAlignment, float verticalAlignment, KDColor textColor, KDColor backgroundColor) : TextInput(parentResponder, &m_contentView), + EditableField(inputEventHandlerDelegate), m_contentView(textBuffer, draftTextBuffer, textBufferSize, font, horizontalAlignment, verticalAlignment, textColor, backgroundColor), m_hasTwoBuffers(hasTwoBuffers), m_delegate(delegate)