From 56b9bd0a618f1284ce5d363a1fb8ffa9a1c7b7ea Mon Sep 17 00:00:00 2001 From: M4x1m3 Date: Thu, 23 Jan 2020 23:21:42 +0100 Subject: [PATCH] Added option to duplicate scripts (closes 176) --- apps/code/base.de.i18n | 1 + apps/code/base.en.i18n | 1 + apps/code/base.es.i18n | 1 + apps/code/base.fr.i18n | 1 + apps/code/base.hu.i18n | 1 + apps/code/base.pt.i18n | 1 + apps/code/menu_controller.cpp | 13 +++++++++++++ apps/code/menu_controller.h | 1 + apps/code/script_parameter_controller.cpp | 8 +++++++- apps/code/script_parameter_controller.h | 3 ++- 10 files changed, 29 insertions(+), 2 deletions(-) diff --git a/apps/code/base.de.i18n b/apps/code/base.de.i18n index 5879c5745..5c4014a14 100644 --- a/apps/code/base.de.i18n +++ b/apps/code/base.de.i18n @@ -4,5 +4,6 @@ ScriptOptions = "Skriptoptionen" ExecuteScript = "Skript ausführen" AutoImportScript = "Automatischer Import in Konsole" DeleteScript = "Skript löschen" +DuplicateScript = "Skript duplizieren" FunctionsAndVariables = "Funktionen und Variablen" AllowedCharactersaz09 = "Erlaubte Zeichen: a-z, 0-9, _" diff --git a/apps/code/base.en.i18n b/apps/code/base.en.i18n index 8bf1e3c9f..d9886d3fd 100644 --- a/apps/code/base.en.i18n +++ b/apps/code/base.en.i18n @@ -4,5 +4,6 @@ ScriptOptions = "Script options" ExecuteScript = "Execute script" AutoImportScript = "Auto import in shell" DeleteScript = "Delete script" +DuplicateScript = "Duplicate script" FunctionsAndVariables = "Functions and variables" AllowedCharactersaz09 = "Allowed characters: a-z, 0-9, _" diff --git a/apps/code/base.es.i18n b/apps/code/base.es.i18n index 4e4860fe4..3038a29f5 100644 --- a/apps/code/base.es.i18n +++ b/apps/code/base.es.i18n @@ -4,5 +4,6 @@ ScriptOptions = "Opciones del archivo" ExecuteScript = "Ejecutar el archivo" AutoImportScript = "Importación auto en intérprete" DeleteScript = "Eliminar el archivo" +DuplicateScript = "Duplicar el guión" FunctionsAndVariables = "Funciones y variables" AllowedCharactersaz09 = "Caracteres permitidos : a-z, 0-9, _" diff --git a/apps/code/base.fr.i18n b/apps/code/base.fr.i18n index 253989ab2..48b12d6d7 100644 --- a/apps/code/base.fr.i18n +++ b/apps/code/base.fr.i18n @@ -4,5 +4,6 @@ ScriptOptions = "Options de script" ExecuteScript = "Exécuter le script" AutoImportScript = "Importation auto dans la console" DeleteScript = "Supprimer le script" +DuplicateScript = "Dupliquer le script" FunctionsAndVariables = "Fonctions et variables" AllowedCharactersaz09 = "Caractères autorisés : a-z, 0-9, _" diff --git a/apps/code/base.hu.i18n b/apps/code/base.hu.i18n index c78e1b07b..7666b7199 100644 --- a/apps/code/base.hu.i18n +++ b/apps/code/base.hu.i18n @@ -4,5 +4,6 @@ ScriptOptions = "Script beállítások" ExecuteScript = "Script indítása" AutoImportScript = "Script automata importálása" DeleteScript = "Script törlése" +DuplicateScript = "Másolja a szkriptet" FunctionsAndVariables = "Függvények és változók" AllowedCharactersaz09 = "Engedélyezett karakterek: a-z, 0-9, _" diff --git a/apps/code/base.pt.i18n b/apps/code/base.pt.i18n index d44da5a19..0fdbd1490 100644 --- a/apps/code/base.pt.i18n +++ b/apps/code/base.pt.i18n @@ -4,5 +4,6 @@ ScriptOptions = "Opções de script" ExecuteScript = "Executar o script" AutoImportScript = "Importação auto no interpretador" DeleteScript = "Eliminar o script" +DuplicateScript = "Duplicar o script" FunctionsAndVariables = "Funções e variáveis" AllowedCharactersaz09 = "Caracteres permitidos : a-z, 0-9, _" diff --git a/apps/code/menu_controller.cpp b/apps/code/menu_controller.cpp index bed2c31cc..b53e02c7c 100644 --- a/apps/code/menu_controller.cpp +++ b/apps/code/menu_controller.cpp @@ -4,6 +4,7 @@ #include "../apps_container.h" #include #include +#include #include #include @@ -133,6 +134,18 @@ void MenuController::renameSelectedScript() { tf->setCursorLocation(tf->text() + strlen(previousText)); } +void MenuController::duplicateScript(Script script) { + assert(!script.isNull()); + + // Clone here + char buffer[10]; + Script::DefaultName(buffer, 10); + + Ion::Storage::sharedStorage()->createRecordWithExtension(buffer, Code::ScriptStore::k_scriptExtension, script.value().buffer, script.value().size); + + updateAddScriptRowDisplay(); +} + void MenuController::deleteScript(Script script) { assert(!script.isNull()); script.destroy(); diff --git a/apps/code/menu_controller.h b/apps/code/menu_controller.h index 252b2f030..caa78d2e1 100644 --- a/apps/code/menu_controller.h +++ b/apps/code/menu_controller.h @@ -19,6 +19,7 @@ public: StackViewController * stackViewController(); void willExitResponderChain(Responder * nextFirstResponder) override; void renameSelectedScript(); + void duplicateScript(Script script); void deleteScript(Script script); void reloadConsole(); void openConsoleWithScript(Script script); diff --git a/apps/code/script_parameter_controller.cpp b/apps/code/script_parameter_controller.cpp index 7a8e67b23..1c7d176b3 100644 --- a/apps/code/script_parameter_controller.cpp +++ b/apps/code/script_parameter_controller.cpp @@ -10,6 +10,7 @@ ScriptParameterController::ScriptParameterController(Responder * parentResponder m_renameScript(I18n::Message::Rename), m_autoImportScript(I18n::Message::AutoImportScript), m_deleteScript(I18n::Message::DeleteScript), + m_duplicateScript(I18n::Message::DuplicateScript), m_selectableTableView(this), m_script(Ion::Storage::Record()), m_menuController(menuController) @@ -52,6 +53,11 @@ bool ScriptParameterController::handleEvent(Ion::Events::Event event) { m_menuController->deleteScript(s); m_menuController->reloadConsole(); return true; + case 4: + dismissScriptParameterController(); + m_menuController->duplicateScript(s); + m_menuController->reloadConsole(); + return true; default: assert(false); return false; @@ -73,7 +79,7 @@ void ScriptParameterController::didBecomeFirstResponder() { HighlightCell * ScriptParameterController::reusableCell(int index) { assert(index >= 0); assert(index < k_totalNumberOfCell); - HighlightCell * cells[] = {&m_executeScript, &m_renameScript, &m_autoImportScript, &m_deleteScript}; + HighlightCell * cells[] = {&m_executeScript, &m_renameScript, &m_autoImportScript, &m_deleteScript, &m_duplicateScript}; return cells[index]; } diff --git a/apps/code/script_parameter_controller.h b/apps/code/script_parameter_controller.h index c851922d9..434366ca4 100644 --- a/apps/code/script_parameter_controller.h +++ b/apps/code/script_parameter_controller.h @@ -30,13 +30,14 @@ public: void willDisplayCellForIndex(HighlightCell * cell, int index) override; private: - constexpr static int k_totalNumberOfCell = 4; + constexpr static int k_totalNumberOfCell = 5; StackViewController * stackViewController(); I18n::Message m_pageTitle; MessageTableCell m_executeScript; MessageTableCell m_renameScript; MessageTableCellWithSwitch m_autoImportScript; MessageTableCell m_deleteScript; + MessageTableCell m_duplicateScript; SelectableTableView m_selectableTableView; Script m_script; MenuController * m_menuController;