From a27963597bc4c20141e5e88933bd32fb0f8e63ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9a=20Saviot?= Date: Tue, 24 Apr 2018 13:53:39 +0200 Subject: [PATCH] [apps] More generic VariableBoxController methods Before, the class differentiated between TextField and ExpressionLayoutField Change-Id: I1fce8bb650a0bfccb11ddf61d05335e452374abb --- apps/shared/expression_field_delegate_app.cpp | 2 +- apps/shared/text_field_delegate_app.cpp | 2 +- apps/variable_box_controller.cpp | 33 ++----------------- apps/variable_box_controller.h | 10 ++---- 4 files changed, 7 insertions(+), 40 deletions(-) diff --git a/apps/shared/expression_field_delegate_app.cpp b/apps/shared/expression_field_delegate_app.cpp index 1854ffbe7..c61514728 100644 --- a/apps/shared/expression_field_delegate_app.cpp +++ b/apps/shared/expression_field_delegate_app.cpp @@ -48,7 +48,7 @@ bool ExpressionFieldDelegateApp::expressionLayoutFieldDidReceiveEvent(Expression } AppsContainer * appsContainer = (AppsContainer *)expressionLayoutField->app()->container(); VariableBoxController * variableBoxController = appsContainer->variableBoxController(); - variableBoxController->setExpressionLayoutFieldSender(expressionLayoutField); + variableBoxController->setSender(expressionLayoutField); expressionLayoutField->app()->displayModalViewController(variableBoxController, 0.f, 0.f, Metric::PopUpTopMargin, Metric::PopUpLeftMargin, 0, Metric::PopUpRightMargin); return true; } diff --git a/apps/shared/text_field_delegate_app.cpp b/apps/shared/text_field_delegate_app.cpp index f9eda1ed4..d8a26093a 100644 --- a/apps/shared/text_field_delegate_app.cpp +++ b/apps/shared/text_field_delegate_app.cpp @@ -93,7 +93,7 @@ bool TextFieldDelegateApp::textFieldDidReceiveEvent(TextField * textField, Ion:: } AppsContainer * appsContainer = (AppsContainer *)textField->app()->container(); VariableBoxController * variableBoxController = appsContainer->variableBoxController(); - variableBoxController->setTextFieldSender(textField); + variableBoxController->setSender(textField); textField->app()->displayModalViewController(variableBoxController, 0.f, 0.f, Metric::PopUpTopMargin, Metric::PopUpLeftMargin, 0, Metric::PopUpRightMargin); return true; } diff --git a/apps/variable_box_controller.cpp b/apps/variable_box_controller.cpp index cfa4a143f..6ebb90f22 100644 --- a/apps/variable_box_controller.cpp +++ b/apps/variable_box_controller.cpp @@ -64,7 +64,7 @@ bool VariableBoxController::ContentViewController::handleEvent(Ion::Events::Even char label[3]; putLabelAtIndexInBuffer(selectedRow(), label); const char * editedText = label; - m_insertTextAction(m_sender, editedText); + m_sender->handleEventWithText(editedText); #if MATRIX_VARIABLES m_selectableTableView.deselectTable(); m_currentPage = Page::RootMenu; @@ -195,16 +195,6 @@ int VariableBoxController::ContentViewController::typeAtLocation(int i, int j) { return 0; } -void VariableBoxController::ContentViewController::setTextFieldSender(TextField * textField) { - m_sender = textField; - m_insertTextAction = &insertTextInTextInput; -} - -void VariableBoxController::ContentViewController::setExpressionLayoutFieldSender(ExpressionLayoutField * expressionLayoutField) { - m_sender = expressionLayoutField; - m_insertTextAction = &insertTextInExpressionLayoutField; -} - void VariableBoxController::ContentViewController::reloadData() { m_selectableTableView.reloadData(); } @@ -290,19 +280,6 @@ ExpressionLayout * VariableBoxController::ContentViewController::expressionLayou return nullptr; } -void VariableBoxController::ContentViewController::insertTextInTextInput(void * sender, const char * textToInsert) { - TextInput * textInput = static_cast(sender); - textInput->handleEventWithText(textToInsert); -} - -void VariableBoxController::ContentViewController::insertTextInExpressionLayoutField(void * sender, const char * textToInsert) { - ExpressionLayoutField * expressionLayoutField = static_cast(sender); - if (!expressionLayoutField->isEditing()) { - expressionLayoutField->setEditing(true); - } - expressionLayoutField->insertLayoutFromTextAtCursor(textToInsert); -} - VariableBoxController::VariableBoxController(GlobalContext * context) : StackViewController(nullptr, &m_contentViewController, KDColorWhite, Palette::PurpleBright, Palette::PurpleDark), m_contentViewController(this, context) @@ -313,12 +290,8 @@ void VariableBoxController::didBecomeFirstResponder() { app()->setFirstResponder(&m_contentViewController); } -void VariableBoxController::setTextFieldSender(TextField * textField) { - m_contentViewController.setTextFieldSender(textField); -} - -void VariableBoxController::setExpressionLayoutFieldSender(ExpressionLayoutField * expressionLayoutField) { - m_contentViewController.setExpressionLayoutFieldSender(expressionLayoutField); +void VariableBoxController::setSender(Responder * sender) { + m_contentViewController.setSender(sender); } void VariableBoxController::viewWillAppear() { diff --git a/apps/variable_box_controller.h b/apps/variable_box_controller.h index 527b8ac77..bd536d80c 100644 --- a/apps/variable_box_controller.h +++ b/apps/variable_box_controller.h @@ -10,11 +10,9 @@ class VariableBoxController : public StackViewController { public: - typedef void (*Action)(void * sender, const char * text); VariableBoxController(Poincare::GlobalContext * context); void didBecomeFirstResponder() override; - void setTextFieldSender(TextField * textField); - void setExpressionLayoutFieldSender(ExpressionLayoutField * expressionLayoutField); + void setSender(Responder * sender); void viewWillAppear() override; void viewDidDisappear() override; private: @@ -33,8 +31,7 @@ private: KDCoordinate cumulatedHeightFromIndex(int j) override; int indexFromCumulatedHeight(KDCoordinate offsetY) override; int typeAtLocation(int i, int j) override; - void setTextFieldSender(TextField * textField); - void setExpressionLayoutFieldSender(ExpressionLayoutField * expressionLayoutField); + void setSender(Responder * responder) { m_sender = responder; } void reloadData(); void resetPage(); void viewDidDisappear() override; @@ -59,11 +56,8 @@ private: I18n::Message nodeLabelAtIndex(int index); const Poincare::Expression * expressionForIndex(int index); Poincare::ExpressionLayout * expressionLayoutForIndex(int index); - static void insertTextInTextInput(void * sender, const char * textToInsert); - static void insertTextInExpressionLayoutField(void * sender, const char * textToInsert); Poincare::GlobalContext * m_context; Responder * m_sender; - Action m_insertTextAction; int m_firstSelectedRow; int m_previousSelectedRow; Page m_currentPage;