diff --git a/apps/code/base.de.i18n b/apps/code/base.de.i18n index 3c4927851..b17766c48 100644 --- a/apps/code/base.de.i18n +++ b/apps/code/base.de.i18n @@ -1,7 +1,7 @@ Console = "Interaktive Konsole" AddScript = "Skript hinzuzufugen" ScriptOptions = "Optionen Skript" -EditScript = "Skript bearbeiten" +ExecuteScript = "Skript ausfuhren" RenameScript = "Skript umbenennen" AutoImportScript = "Automatischer Import in Konsole" DeleteScript = "Skript loschen" diff --git a/apps/code/base.en.i18n b/apps/code/base.en.i18n index d116437ef..53bdd50bf 100644 --- a/apps/code/base.en.i18n +++ b/apps/code/base.en.i18n @@ -1,7 +1,7 @@ Console = "Python shell" AddScript = "Add a script" ScriptOptions = "Script options" -EditScript = "Edit script" +ExecuteScript = "Execute script" RenameScript = "Rename script" AutoImportScript = "Auto import in shell" DeleteScript = "Delete script" diff --git a/apps/code/base.es.i18n b/apps/code/base.es.i18n index c80af2dfb..95c034451 100644 --- a/apps/code/base.es.i18n +++ b/apps/code/base.es.i18n @@ -1,7 +1,7 @@ Console = "Interprete de comandos" AddScript = "Agregar un archivo" ScriptOptions = "Opciones del archivo" -EditScript = "Editar el archivo" +ExecuteScript = "Ejecutar el archivo" RenameScript = "Renombrar el archivo" AutoImportScript = "Importacion auto en interprete" DeleteScript = "Eliminar el archivo" diff --git a/apps/code/base.fr.i18n b/apps/code/base.fr.i18n index 98aa5eae0..037639386 100644 --- a/apps/code/base.fr.i18n +++ b/apps/code/base.fr.i18n @@ -1,7 +1,7 @@ Console = "Console d'execution" AddScript = "Ajouter un script" ScriptOptions = "Options de script" -EditScript = "Editer le script" +ExecuteScript = "Executer le script" RenameScript = "Renommer le script" AutoImportScript = "Importation auto dans la console" DeleteScript = "Supprimer le script" diff --git a/apps/code/base.pt.i18n b/apps/code/base.pt.i18n index 1c7d0b8a4..98dc5635f 100644 --- a/apps/code/base.pt.i18n +++ b/apps/code/base.pt.i18n @@ -1,7 +1,7 @@ Console = "Interpretador interativo" AddScript = "Adicionar um script" ScriptOptions = "Opcoes de script" -EditScript = "Editar o script" +ExecuteScript = "Executar o script" RenameScript = "Renomear o script" AutoImportScript = "Importacao auto no interpretador" DeleteScript = "Eliminar o script" diff --git a/apps/code/base.universal.i18n b/apps/code/base.universal.i18n index 20c03173f..3c61b6c66 100644 --- a/apps/code/base.universal.i18n +++ b/apps/code/base.universal.i18n @@ -1,4 +1,4 @@ CodeApp = "Python" CodeAppCapital = "PYTHON" ConsolePrompt = ">>> " -ScriptParameters = "jpp" +ScriptParameters = "..." diff --git a/apps/code/console_controller.cpp b/apps/code/console_controller.cpp index faf2e634e..0bbd13798 100644 --- a/apps/code/console_controller.cpp +++ b/apps/code/console_controller.cpp @@ -30,7 +30,7 @@ ConsoleController::~ConsoleController() { unloadPythonEnvironment(); } -bool ConsoleController::loadPythonEnvironment() { +bool ConsoleController::loadPythonEnvironment(bool autoImportScripts) { if(pythonEnvironmentIsLoaded()) { return true; } @@ -43,7 +43,9 @@ bool ConsoleController::loadPythonEnvironment() { } MicroPython::init(m_pythonHeap, m_pythonHeap + k_pythonHeapSize); MicroPython::registerScriptProvider(m_scriptStore); - autoImport(); + if (autoImportScripts) { + autoImport(); + } return true; } @@ -72,8 +74,6 @@ void ConsoleController::runAndPrintForCommand(const char * command) { runCode(command); flushOutputAccumulationBufferToStore(); m_consoleStore.deleteLastLineIfEmpty(); - m_selectableTableView.reloadData(); - m_editCell.setEditing(true); } void ConsoleController::removeExtensionIfAny(char * name) { @@ -211,6 +211,8 @@ bool ConsoleController::textFieldDidReceiveEvent(TextField * textField, Ion::Eve bool ConsoleController::textFieldDidFinishEditing(TextField * textField, const char * text, Ion::Events::Event event) { runAndPrintForCommand(text); + m_selectableTableView.reloadData(); + m_editCell.setEditing(true); textField->setText(""); m_selectableTableView.selectCellAtLocation(0, m_consoleStore.numberOfLines()); return true; diff --git a/apps/code/console_controller.h b/apps/code/console_controller.h index 8c3fe37d9..78960fb6e 100644 --- a/apps/code/console_controller.h +++ b/apps/code/console_controller.h @@ -22,11 +22,12 @@ public: ConsoleController operator=(const ConsoleController& other) = delete; ConsoleController& operator=(ConsoleController&& other) = delete; - bool loadPythonEnvironment(); + bool loadPythonEnvironment(bool autoImportScripts = true); void unloadPythonEnvironment(); bool pythonEnvironmentIsLoaded(); void autoImport(); + void autoImportScriptAtIndex(int index); void runAndPrintForCommand(const char * command); void removeExtensionIfAny(char * name); @@ -65,7 +66,6 @@ private: static constexpr int k_numberOfLineCells = 15; // May change depending on the screen height static constexpr int k_pythonHeapSize = 16384; static constexpr int k_outputAccumulationBufferSize = 100; - void autoImportScriptAtIndex(int index); void flushOutputAccumulationBufferToStore(); void appendTextToOutputAccumulationBuffer(const char * text, size_t length); void emptyOutputAccumulationBuffer(); diff --git a/apps/code/menu_controller.cpp b/apps/code/menu_controller.cpp index 6f4d92b00..e005bdb5e 100644 --- a/apps/code/menu_controller.cpp +++ b/apps/code/menu_controller.cpp @@ -23,7 +23,8 @@ MenuController::MenuController(Responder * parentResponder, ScriptStore * script m_selectableTableView(this, this, 0, 1, 0, 0, 0, 0, this, this, false), m_consoleController(parentResponder, m_scriptStore), m_scriptParameterController(nullptr, I18n::Message::ScriptOptions, m_scriptStore, this), - m_editorController(this) + m_editorController(this), + m_reloadConsoleWhenBecomingFirstResponder(false) { for (int i = 0; i < k_maxNumberOfDisplayableScriptCells; i++) { m_scriptCells[i].setParentResponder(&m_selectableTableView); @@ -35,18 +36,19 @@ MenuController::MenuController(Responder * parentResponder, ScriptStore * script } void MenuController::didBecomeFirstResponder() { - if (footer()->selectedButton() <= 0) { - assert(m_selectableTableView.selectedRow() < m_scriptStore->numberOfScripts()); - if (m_selectableTableView.selectedRow() < 0) { - m_selectableTableView.selectCellAtLocation(0,0); - } - app()->setFirstResponder(&m_selectableTableView); + if (m_reloadConsoleWhenBecomingFirstResponder) { + reloadConsole(); + } + + if (footer()->selectedButton() == 0) { + assert(m_selectableTableView.selectedRow() < 0); + app()->setFirstResponder(&m_consoleButton); return; } - assert(m_selectableTableView.selectedRow() < 0); - assert(footer()->selectedButton() == 0); - app()->setFirstResponder(&m_consoleButton); - return; + if (m_selectableTableView.selectedRow() < 0) { + m_selectableTableView.selectCellAtLocation(0,0); + } + app()->setFirstResponder(&m_selectableTableView); } bool MenuController::handleEvent(Ion::Events::Event event) { @@ -129,6 +131,16 @@ void MenuController::deleteScriptAtIndex(int i) { void MenuController::reloadConsole() { m_consoleController.unloadPythonEnvironment(); + m_reloadConsoleWhenBecomingFirstResponder = false; +} + +void MenuController::openConsoleWithScriptAtIndex(int scriptIndex) { + reloadConsole(); + if (m_consoleController.loadPythonEnvironment(false)) { + m_consoleController.autoImportScriptAtIndex(scriptIndex); + stackViewController()->push(&m_consoleController); + } + m_reloadConsoleWhenBecomingFirstResponder = true; } bool MenuController::shouldDisplayAddScriptRow() { diff --git a/apps/code/menu_controller.h b/apps/code/menu_controller.h index 78c6b515d..c149cf7ec 100644 --- a/apps/code/menu_controller.h +++ b/apps/code/menu_controller.h @@ -24,6 +24,7 @@ public: void renameSelectedScript(); void deleteScriptAtIndex(int i); void reloadConsole(); + void openConsoleWithScriptAtIndex(int scriptIndex); bool shouldDisplayAddScriptRow(); void scriptContentEditionDidFinish(); @@ -94,6 +95,7 @@ private: ConsoleController m_consoleController; ScriptParameterController m_scriptParameterController; EditorController m_editorController; + bool m_reloadConsoleWhenBecomingFirstResponder; }; } diff --git a/apps/code/script_parameter_controller.cpp b/apps/code/script_parameter_controller.cpp index ff25d07ab..7e5b5f38a 100644 --- a/apps/code/script_parameter_controller.cpp +++ b/apps/code/script_parameter_controller.cpp @@ -6,10 +6,10 @@ namespace Code { ScriptParameterController::ScriptParameterController(Responder * parentResponder, I18n::Message title, ScriptStore * scriptStore, MenuController * menuController) : ViewController(parentResponder), m_pageTitle(title), - m_editScript(I18n::Message::Default), - m_renameScript(I18n::Message::Default), - m_autoImportScript(I18n::Message::Default), - m_deleteScript(I18n::Message::Default), + m_executeScript(I18n::Message::ExecuteScript), + m_renameScript(I18n::Message::RenameScript), + m_autoImportScript(I18n::Message::AutoImportScript), + m_deleteScript(I18n::Message::DeleteScript), m_selectableTableView(this, this, 0, 1, Metric::CommonTopMargin, Metric::CommonRightMargin, Metric::CommonBottomMargin, Metric::CommonLeftMargin, this), m_scriptStore(scriptStore), @@ -30,28 +30,24 @@ void ScriptParameterController::dismissScriptParameterController() { stackViewController()->pop(); } -View * ScriptParameterController::view() { - return &m_selectableTableView; -} - const char * ScriptParameterController::title() { return I18n::translate(m_pageTitle); } bool ScriptParameterController::handleEvent(Ion::Events::Event event) { if (event == Ion::Events::OK || event == Ion::Events::EXE) { - int i = m_currentScriptIndex; + int scriptIndex = m_currentScriptIndex; switch (selectedRow()) { case 0: - //TODO - //stackViewController()->push(&m_editorController); + dismissScriptParameterController(); + m_menuController->openConsoleWithScriptAtIndex(scriptIndex); return true; case 1: dismissScriptParameterController(); m_menuController->renameSelectedScript(); return true; case 2: - m_scriptStore->switchAutoImportAtIndex(i); + m_scriptStore->switchAutoImportAtIndex(scriptIndex); m_autoImport = !m_autoImport; m_selectableTableView.reloadData(); m_menuController->reloadConsole(); @@ -59,7 +55,7 @@ bool ScriptParameterController::handleEvent(Ion::Events::Event event) { return true; case 3: dismissScriptParameterController(); - m_menuController->deleteScriptAtIndex(i); + m_menuController->deleteScriptAtIndex(scriptIndex); m_menuController->reloadConsole(); return true; default: @@ -80,33 +76,18 @@ void ScriptParameterController::didBecomeFirstResponder() { app()->setFirstResponder(&m_selectableTableView); } -KDCoordinate ScriptParameterController::cellHeight() { - return Metric::ParameterCellHeight; -} - HighlightCell * ScriptParameterController::reusableCell(int index) { assert(index >= 0); assert(index < k_totalNumberOfCell); - HighlightCell * cells[] = {&m_editScript, &m_renameScript, &m_autoImportScript, &m_deleteScript}; + HighlightCell * cells[] = {&m_executeScript, &m_renameScript, &m_autoImportScript, &m_deleteScript}; return cells[index]; } -int ScriptParameterController::reusableCellCount() { - return k_totalNumberOfCell; -} - -int ScriptParameterController::numberOfRows() { - return k_totalNumberOfCell; -} - void ScriptParameterController::willDisplayCellForIndex(HighlightCell * cell, int index) { if (cell == &m_autoImportScript) { SwitchView * switchView = (SwitchView *)m_autoImportScript.accessoryView(); switchView->setState(m_autoImport); } - MessageTableCell * myCell = static_cast(cell); - I18n::Message labels[k_totalNumberOfCell] = {I18n::Message::EditScript, I18n::Message::RenameScript, I18n::Message::AutoImportScript, I18n::Message::DeleteScript}; - myCell->setMessage(labels[index]); } StackViewController * ScriptParameterController::stackViewController() { diff --git a/apps/code/script_parameter_controller.h b/apps/code/script_parameter_controller.h index e99cdfc3b..e7cf3ca6f 100644 --- a/apps/code/script_parameter_controller.h +++ b/apps/code/script_parameter_controller.h @@ -11,29 +11,29 @@ class MenuController; class ScriptParameterController : public ViewController, public SimpleListViewDataSource, public SelectableTableViewDataSource { public: - ScriptParameterController(Responder * parentResponder, I18n::Message title, ScriptStore * scriptStore, MenuController * menuController); + ScriptParameterController(Responder * parentResponder, I18n::Message title, ScriptStore * scriptStore, MenuController * menuController); void setScript(int i); void dismissScriptParameterController(); /* ViewController */ - View * view() override; + View * view() override { return &m_selectableTableView; } const char * title() override; bool handleEvent(Ion::Events::Event event) override; void viewWillAppear() override; void didBecomeFirstResponder() override; /* SimpleListViewDataSource */ - KDCoordinate cellHeight() override; + KDCoordinate cellHeight() override { return Metric::ParameterCellHeight; } HighlightCell * reusableCell(int index) override; - int reusableCellCount() override; - int numberOfRows() override; + int reusableCellCount() override { return k_totalNumberOfCell; } + int numberOfRows() override { return k_totalNumberOfCell; } void willDisplayCellForIndex(HighlightCell * cell, int index) override; private: constexpr static int k_totalNumberOfCell = 4; StackViewController * stackViewController(); I18n::Message m_pageTitle; - MessageTableCell m_editScript; //TODO rename execute script + MessageTableCell m_executeScript; MessageTableCell m_renameScript; MessageTableCellWithSwitch m_autoImportScript; MessageTableCell m_deleteScript;