diff --git a/apps/code/console_controller.cpp b/apps/code/console_controller.cpp index 2b934f17a..982fbee05 100644 --- a/apps/code/console_controller.cpp +++ b/apps/code/console_controller.cpp @@ -209,7 +209,7 @@ bool ConsoleController::textFieldDidFinishEditing(TextField * textField, const c } bool ConsoleController::textFieldDidAbortEditing(TextField * textField, const char * text) { - app()->dismissModalViewController(); + stackViewController()->pop(); return true; } @@ -298,4 +298,8 @@ int ConsoleController::firstNewLineCharIndex(const char * text, size_t length) { return index; } +StackViewController * ConsoleController::stackViewController() { + return static_cast(parentResponder()); +} + } diff --git a/apps/code/console_controller.h b/apps/code/console_controller.h index 918fef2af..4640bbfb1 100644 --- a/apps/code/console_controller.h +++ b/apps/code/console_controller.h @@ -35,6 +35,7 @@ public: void viewWillAppear() override; void didBecomeFirstResponder() override; bool handleEvent(Ion::Events::Event event) override; + ViewController::DisplayParameter displayParameter() override { return ViewController::DisplayParameter::WantsMaximumSpace; } // ListViewDataSource int numberOfRows() override; @@ -70,6 +71,7 @@ private: void appendTextToOutputAccumulationBuffer(const char * text, size_t length); void emptyOutputAccumulationBuffer(); int firstNewLineCharIndex(const char * text, size_t length); + StackViewController * stackViewController(); int m_rowHeight; ConsoleStore m_consoleStore; SelectableTableView m_selectableTableView; diff --git a/apps/code/editor_controller.cpp b/apps/code/editor_controller.cpp index ef75805d2..2cea0e1dd 100644 --- a/apps/code/editor_controller.cpp +++ b/apps/code/editor_controller.cpp @@ -18,8 +18,8 @@ void EditorController::setScript(Script script){ } bool EditorController::handleEvent(Ion::Events::Event event) { - if (event == Ion::Events::OK) { - app()->dismissModalViewController(); + if (event == Ion::Events::OK || event == Ion::Events::Back) { + stackController()->pop(); return true; } return false; @@ -112,4 +112,8 @@ bool EditorController::textAreaDidReceiveEvent(TextArea * textArea, Ion::Events: return false; } +StackViewController * EditorController::stackController() { + return static_cast(parentResponder()); +} + } diff --git a/apps/code/editor_controller.h b/apps/code/editor_controller.h index 473136609..006d33bff 100644 --- a/apps/code/editor_controller.h +++ b/apps/code/editor_controller.h @@ -18,6 +18,7 @@ public: bool handleEvent(Ion::Events::Event event) override; void didBecomeFirstResponder() override; void viewDidDisappear() override; + ViewController::DisplayParameter displayParameter() override { return ViewController::DisplayParameter::WantsMaximumSpace; } /* TextAreaDelegate */ bool textAreaShouldFinishEditing(TextArea * textArea, Ion::Events::Event event) override; @@ -26,6 +27,7 @@ public: private: static constexpr int k_indentationSpacesNumber = 2; + StackViewController * stackController(); TextArea m_textArea; ScriptParameterController * m_scriptParameterController; }; diff --git a/apps/code/menu_controller.cpp b/apps/code/menu_controller.cpp index 04ee00cfe..40b5bd6e2 100644 --- a/apps/code/menu_controller.cpp +++ b/apps/code/menu_controller.cpp @@ -15,7 +15,7 @@ MenuController::MenuController(Responder * parentResponder, ScriptStore * script m_consoleButton(this, I18n::Message::Console, Invocation([](void * context, void * sender) { MenuController * menu = (MenuController *)context; if (menu->consoleController()->loadPythonEnvironment()) { - menu->app()->displayModalViewController(menu->consoleController(), 0.5f, 0.5f); + menu->stackViewController()->push(menu->consoleController()); return; } //TODO: Pop up warning message: not enough space to load Python @@ -34,15 +34,13 @@ MenuController::MenuController(Responder * parentResponder, ScriptStore * script m_selectableTableView.selectCellAtLocation(0, 0); } -ConsoleController * MenuController::consoleController() { - return &m_consoleController; -} - -View * MenuController::view() { - return &m_selectableTableView; -} - void MenuController::didBecomeFirstResponder() { + if (m_selectableTableView.selectedRow() < 0) { + assert(footer()->selectedButton() == 0); + app()->setFirstResponder(&m_consoleButton); + return; + } + assert(m_selectableTableView.selectedRow() < numberOfRows()); app()->setFirstResponder(&m_selectableTableView); } @@ -114,10 +112,6 @@ int MenuController::numberOfRows() { //TODO do not add the addScript row if there can be no more scripts stored. }; -KDCoordinate MenuController::cellHeight() { - return k_rowHeight; -} - KDCoordinate MenuController::rowHeight(int j) { return cellHeight(); } @@ -213,19 +207,6 @@ bool MenuController::textFieldDidAbortEditing(TextField * textField, const char return true; } -Toolbox * MenuController::toolboxForTextField(TextField * textFied) { - return nullptr; -} - -int MenuController::numberOfButtons(ButtonRowController::Position position) const { - return 1; -} - -Button * MenuController::buttonAtIndex(int index, ButtonRowController::Position position) const { - assert(index == 0); - return const_cast