[code] Execute a script from the script options.

A button in the options opens the console, with only the current script
imported.

Change-Id: Ia3053534d6fdb2bd1340ce3c42b7249510c97bbc
This commit is contained in:
Léa Saviot
2017-11-14 17:58:16 +01:00
committed by Romain Goyet
parent 57633829a9
commit 6baaa8547a
12 changed files with 55 additions and 58 deletions

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -1,4 +1,4 @@
CodeApp = "Python"
CodeAppCapital = "PYTHON"
ConsolePrompt = ">>> "
ScriptParameters = "jpp"
ScriptParameters = "..."

View File

@@ -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;

View File

@@ -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();

View File

@@ -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() {

View File

@@ -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;
};
}

View File

@@ -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<MessageTableCell *>(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() {

View File

@@ -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;