diff --git a/apps/math_toolbox.cpp b/apps/math_toolbox.cpp index e5af6a450..192c2180c 100644 --- a/apps/math_toolbox.cpp +++ b/apps/math_toolbox.cpp @@ -236,16 +236,22 @@ TextField * MathToolbox::sender() { } bool MathToolbox::handleEventForRow(Ion::Events::Event event, int selectedRow) { - if (event == Ion::Events::Back) { + int depth = m_stack.depth(); + if (event == Ion::Events::Back && depth == 0) { + m_selectableTableView.deselectTable(); + app()->dismissModalViewController(); + return true; + } + if ((event == Ion::Events::Back || event == Ion::Events::Left) && depth > 0) { return returnToPreviousMenu(); } - if (event == Ion::Events::OK || event == Ion::Events::EXE) { - ToolboxNode * selectedNode = (ToolboxNode *)m_nodeModel->children(selectedRow); - if (selectedNode->numberOfChildren() == 0) { - return selectLeaf(selectedNode); - } + ToolboxNode * selectedNode = (ToolboxNode *)m_nodeModel->children(selectedRow); + if ((event == Ion::Events::OK || event == Ion::Events::EXE || event == Ion::Events::Right) && selectedNode->numberOfChildren() > 0) { return selectSubMenu(selectedNode); } + if ((event == Ion::Events::OK || event == Ion::Events::EXE) && selectedNode->numberOfChildren() == 0) { + return selectLeaf(selectedNode); + } return false; } @@ -277,10 +283,6 @@ bool MathToolbox::selectLeaf(ToolboxNode * selectedNode){ bool MathToolbox::returnToPreviousMenu() { m_selectableTableView.deselectTable(); int depth = m_stack.depth(); - if (depth == 0) { - app()->dismissModalViewController(); - return true; - } int index = 0; ToolboxNode * parentNode = (ToolboxNode *)rootModel(); Stack::State * previousState = m_stack.stateAtIndex(index++);; diff --git a/apps/probability/law_controller.cpp b/apps/probability/law_controller.cpp index 10be9ab4d..14e3777f2 100644 --- a/apps/probability/law_controller.cpp +++ b/apps/probability/law_controller.cpp @@ -84,7 +84,7 @@ void Probability::LawController::didBecomeFirstResponder() { } bool Probability::LawController::handleEvent(Ion::Events::Event event) { - if (event == Ion::Events::OK || event == Ion::Events::EXE) { + if (event == Ion::Events::OK || event == Ion::Events::EXE || event == Ion::Events::Right) { StackViewController * stack = (StackViewController *)parentResponder(); setLawAccordingToIndex(selectedRow()); stack->push(m_parametersController, KDColorWhite, Palette::PurpleBright, Palette::PurpleBright); diff --git a/apps/probability/parameters_controller.cpp b/apps/probability/parameters_controller.cpp index ed42313d0..2293270ab 100644 --- a/apps/probability/parameters_controller.cpp +++ b/apps/probability/parameters_controller.cpp @@ -81,6 +81,13 @@ const char * ParametersController::title() { return I18n::translate(m_law->title()); } +bool ParametersController::handleEvent(Ion::Events::Event event) { + if (event == Ion::Events::Left) { + stackController()->pop(); + return true; + } + return false; +} void ParametersController::reinitCalculation() { m_calculationController->setCalculationAccordingToIndex(0, true); } diff --git a/apps/probability/parameters_controller.h b/apps/probability/parameters_controller.h index d987d504e..0ba1e9c00 100644 --- a/apps/probability/parameters_controller.h +++ b/apps/probability/parameters_controller.h @@ -12,6 +12,7 @@ class ParametersController : public Shared::FloatParameterController { public: ParametersController(Responder * parentResponder, Law * m_law, CalculationController * calculationController); const char * title() override; + bool handleEvent(Ion::Events::Event event) override; void reinitCalculation(); void didBecomeFirstResponder() override; void viewWillAppear() override; diff --git a/apps/sequence/list/list_parameter_controller.cpp b/apps/sequence/list/list_parameter_controller.cpp index 621762263..4b76153f6 100644 --- a/apps/sequence/list/list_parameter_controller.cpp +++ b/apps/sequence/list/list_parameter_controller.cpp @@ -24,7 +24,11 @@ void ListParameterController::setFunction(Shared::Function * function) { } bool ListParameterController::handleEvent(Ion::Events::Event event) { - if (event == Ion::Events::OK || event == Ion::Events::EXE) { +#if FUNCTION_COLOR_CHOICE + if (event == Ion::Events::OK || event == Ion::Events::EXE || (event == Ion::Events::Right && selectedRow() == 1)) { +#else + if (event == Ion::Events::OK || event == Ion::Events::EXE || (event == Ion::Events::Right && selectedRow() == 0)) { +#endif int selectedRowIndex = selectedRow(); switch (selectedRowIndex) { #if FUNCTION_COLOR_CHOICE diff --git a/apps/sequence/list/type_parameter_controller.cpp b/apps/sequence/list/type_parameter_controller.cpp index b7f728558..08555eab2 100644 --- a/apps/sequence/list/type_parameter_controller.cpp +++ b/apps/sequence/list/type_parameter_controller.cpp @@ -67,6 +67,10 @@ bool TypeParameterController::handleEvent(Ion::Events::Event event) { app()->dismissModalViewController(); return true; } + if (event == Ion::Events::Left && m_sequence) { + stackController()->pop(); + return true; + } return false; } diff --git a/apps/settings/main_controller.cpp b/apps/settings/main_controller.cpp index c4aa87679..43b2b627d 100644 --- a/apps/settings/main_controller.cpp +++ b/apps/settings/main_controller.cpp @@ -58,8 +58,11 @@ void MainController::didBecomeFirstResponder() { } bool MainController::handleEvent(Ion::Events::Event event) { - if (event == Ion::Events::OK || event == Ion::Events::EXE) { + if (event == Ion::Events::OK || event == Ion::Events::EXE || event == Ion::Events::Right) { if (m_nodeModel->children(selectedRow())->numberOfChildren() == 0) { + if (event == Ion::Events::Right) { + return false; + } GlobalPreferences::sharedGlobalPreferences()->setShowUpdatePopUp(!GlobalPreferences::sharedGlobalPreferences()->showUpdatePopUp()); m_selectableTableView.reloadData(); return true; diff --git a/apps/settings/sub_controller.cpp b/apps/settings/sub_controller.cpp index 858016837..69834e7c1 100644 --- a/apps/settings/sub_controller.cpp +++ b/apps/settings/sub_controller.cpp @@ -101,6 +101,10 @@ bool SubController::handleEvent(Ion::Events::Event event) { stack->pop(); return true; } + if (event == Ion::Events::Left) { + stackController()->pop(); + return true; + } return false; } diff --git a/apps/shared/interval_parameter_controller.cpp b/apps/shared/interval_parameter_controller.cpp index 331fd67d2..810fb7a16 100644 --- a/apps/shared/interval_parameter_controller.cpp +++ b/apps/shared/interval_parameter_controller.cpp @@ -63,6 +63,14 @@ HighlightCell * IntervalParameterController::reusableParameterCell(int index, in return m_intervalCells[index]; } +bool IntervalParameterController::handleEvent(Ion::Events::Event event) { + if (event == Ion::Events::Left && stackController()->depth() > 2) { + stackController()->pop(); + return true; + } + return false; +} + int IntervalParameterController::reusableParameterCellCount(int type) { return k_totalNumberOfCell; } diff --git a/apps/shared/interval_parameter_controller.h b/apps/shared/interval_parameter_controller.h index aba1d5888..5f0e5ab25 100644 --- a/apps/shared/interval_parameter_controller.h +++ b/apps/shared/interval_parameter_controller.h @@ -18,6 +18,7 @@ protected: constexpr static int k_totalNumberOfCell = 3; bool setParameterAtIndex(int parameterIndex, float f) override; Interval * m_interval; + bool handleEvent(Ion::Events::Event event) override; private: HighlightCell * reusableParameterCell(int index, int type) override; int reusableParameterCellCount(int type) override; diff --git a/apps/shared/values_parameter_controller.cpp b/apps/shared/values_parameter_controller.cpp index 1e4a8c677..356634ce0 100644 --- a/apps/shared/values_parameter_controller.cpp +++ b/apps/shared/values_parameter_controller.cpp @@ -36,12 +36,18 @@ void ValuesParameterController::willDisplayCellForIndex(HighlightCell * cell, in } void ValuesParameterController::didBecomeFirstResponder() { - selectCellAtLocation(0, 0); + if (selectedRow() < 0) { + selectCellAtLocation(0, 0); + } app()->setFirstResponder(&m_selectableTableView); } bool ValuesParameterController::handleEvent(Ion::Events::Event event) { - if (event == Ion::Events::OK || event == Ion::Events::EXE) { +#if COPY_COLUMN + if (event == Ion::Events::OK || event == Ion::Events::EXE || (event == Ion::Events::Right && selectedRow() == 2)) { +#else + if (event == Ion::Events::OK || event == Ion::Events::EXE || (event == Ion::Events::Right && selectedRow() == 1)) { +#endif switch (selectedRow()) { case 0: { diff --git a/apps/variable_box_controller.cpp b/apps/variable_box_controller.cpp index a2979a4fd..e748117cc 100644 --- a/apps/variable_box_controller.cpp +++ b/apps/variable_box_controller.cpp @@ -32,16 +32,16 @@ void VariableBoxController::ContentViewController::didBecomeFirstResponder() { } bool VariableBoxController::ContentViewController::handleEvent(Ion::Events::Event event) { - if (event == Ion::Events::Back) { #if MATRIX_LIST_VARIABLES - if (m_currentPage == Page::RootMenu) { + if (event == Ion::Events::Back && m_currentPage == Page::RootMenu) { #else - if (m_currentPage == Page::Scalar) { + if (event == Ion::Events::Back && m_currentPage == Page::Scalar) { #endif - m_firstSelectedRow = 0; - app()->dismissModalViewController(); - return true; - } + m_firstSelectedRow = 0; + app()->dismissModalViewController(); + return true; + } + if (event == Ion::Events::Back || event == Ion::Events::Left) { m_firstSelectedRow = m_previousSelectedRow; #if MATRIX_LIST_VARIABLES m_currentPage = Page::RootMenu; @@ -49,8 +49,8 @@ bool VariableBoxController::ContentViewController::handleEvent(Ion::Events::Even app()->setFirstResponder(this); return true; } - if (event == Ion::Events::OK || event == Ion::Events::EXE) { - if (m_currentPage == Page::RootMenu) { + if (event == Ion::Events::OK || event == Ion::Events::EXE || (event == Ion::Events::Right && m_currentPage == Page::RootMenu)) { + if (m_currentPage == Page::RootMenu) { m_previousSelectedRow = selectedRow(); m_firstSelectedRow = 0; m_currentPage = pageAtIndex(selectedRow());