[apps][python] ExecutionEnvironment handles hide sand display of sandbox

and plot controller the same way
This commit is contained in:
Émilie Feral
2020-03-20 13:38:27 +01:00
parent 51da01aa11
commit 659da1dff8
8 changed files with 81 additions and 71 deletions

View File

@@ -104,9 +104,7 @@ const char * ConsoleController::inputText(const char * prompt) {
m_inputRunLoopActive = true;
// Hide the sandbox if it is displayed
if (sandboxIsDisplayed()) {
hideSandbox();
}
hideAnyDisplayedViewController();
const char * promptText = prompt;
char * s = const_cast<char *>(prompt);
@@ -180,10 +178,6 @@ const char * ConsoleController::inputText(const char * prompt) {
return text;
}
void ConsoleController::displayViewController(ViewController * controller) {
stackViewController()->push(controller);
}
void ConsoleController::viewWillAppear() {
ViewController::viewWillAppear();
loadPythonEnvironment();
@@ -192,12 +186,12 @@ void ConsoleController::viewWillAppear() {
autoImport();
}
Responder * firstResponder = Container::activeApp()->firstResponder(); // FIXME
//Responder * firstResponder = Container::activeApp()->firstResponder(); // FIXME
m_selectableTableView.reloadData();
m_selectableTableView.selectCellAtLocation(0, m_consoleStore.numberOfLines());
m_editCell.setEditing(true);
m_editCell.setText("");
Container::activeApp()->setFirstResponder(firstResponder); // FIXME
//Container::activeApp()->setFirstResponder(firstResponder); // FIXME
}
void ConsoleController::didBecomeFirstResponder() {
@@ -350,14 +344,15 @@ bool ConsoleController::textFieldDidFinishEditing(TextField * textField, const c
}
telemetryReportEvent("Console", text);
runAndPrintForCommand(text);
Responder * firstResponder = Container::activeApp()->firstResponder(); // FIXME
if (!sandboxIsDisplayed()) {
//Responder * firstResponder = Container::activeApp()->firstResponder(); // FIXME
if (viewControllerIsDisplayed(nullptr)) {
// TODO factorize
m_selectableTableView.reloadData();
m_editCell.setEditing(true);
textField->setText("");
m_selectableTableView.selectCellAtLocation(0, m_consoleStore.numberOfLines());
}
Container::activeApp()->setFirstResponder(firstResponder); // FIXME
//Container::activeApp()->setFirstResponder(firstResponder); // FIXME
return true;
}
@@ -383,29 +378,29 @@ bool ConsoleController::textFieldDidAbortEditing(TextField * textField) {
return true;
}
void ConsoleController::displaySandbox() {
if (sandboxIsDisplayed()) {
return;
}
stackViewController()->push(&m_sandboxController);
}
void ConsoleController::hideSandbox() {
if (!sandboxIsDisplayed()) {
return;
}
m_sandboxController.hide();
}
void ConsoleController::resetSandbox() {
if (!sandboxIsDisplayed()) {
if (!viewControllerIsDisplayed(sandbox())) {
return;
}
m_sandboxController.reset();
}
void ConsoleController::displayViewController(ViewController * controller) {
if (m_displayedViewController == controller) {
return;
}
stackViewController()->push(controller);
}
void ConsoleController::hideAnyDisplayedViewController() {
if (m_displayedViewController == nullptr) {
return;
}
stackViewController()->pop();
}
void ConsoleController::refreshPrintOutput() {
if (sandboxIsDisplayed()) {
if (!viewControllerIsDisplayed(nullptr)) { // Displaying a controller
return;
}
m_selectableTableView.reloadData();
@@ -461,12 +456,11 @@ void ConsoleController::printText(const char * text, size_t length) {
}
void ConsoleController::autoImportScript(Script script, bool force) {
if (sandboxIsDisplayed()) {
/* The sandbox might be displayed, for instance if we are auto-importing
* several scripts that draw at importation. In this case, we want to remove
* the sandbox. */
hideSandbox();
}
/* The sandbox might be displayed, for instance if we are auto-importing
* several scripts that draw at importation. In this case, we want to remove
* the sandbox. */
hideAnyDisplayedViewController();
if (script.importationStatus() || force) {
// Step 1 - Create the command "from scriptName import *".
@@ -492,13 +486,13 @@ void ConsoleController::autoImportScript(Script script, bool force) {
// Step 2 - Run the command
runAndPrintForCommand(command);
}
if (!sandboxIsDisplayed() && force) {
Responder * firstResponder = Container::activeApp()->firstResponder(); // FIXME
if (viewControllerIsDisplayed(nullptr) && force) {
//Responder * firstResponder = Container::activeApp()->firstResponder(); // FIXME
m_selectableTableView.reloadData();
m_selectableTableView.selectCellAtLocation(0, m_consoleStore.numberOfLines());
m_editCell.setEditing(true);
m_editCell.setText("");
Container::activeApp()->setFirstResponder(firstResponder); // FIXME
//Container::activeApp()->setFirstResponder(firstResponder); // FIXME
}
}

View File

@@ -60,13 +60,13 @@ public:
bool textFieldDidAbortEditing(TextField * textField) override;
// MicroPython::ExecutionEnvironment
void displaySandbox() override;
void hideSandbox() override;
ViewController * sandbox() override { return &m_sandboxController; }
void resetSandbox() override;
void displayViewController(ViewController * controller) override;
void hideAnyDisplayedViewController() override;
void refreshPrintOutput() override;
void printText(const char * text, size_t length) override;
const char * inputText(const char * prompt) override;
void displayViewController(ViewController * controller) override;
#if EPSILON_GETOPT
bool locked() const {

View File

@@ -5,8 +5,8 @@ namespace Code {
SandboxController::SandboxController(Responder * parentResponder, MicroPython::ExecutionEnvironment * executionEnvironment) :
ViewController(parentResponder),
m_solidColorView(KDColorWhite),
m_executionEnvironment(executionEnvironment)
ExecutionViewControllerHelper(executionEnvironment),
m_solidColorView(KDColorWhite)
{
assert(executionEnvironment != nullptr);
}
@@ -20,21 +20,11 @@ void SandboxController::reset() {
redrawWindow();
}
void SandboxController::hide() {
stackViewController()->pop();
}
void SandboxController::viewWillAppear() {
assert(m_executionEnvironment != nullptr);
m_executionEnvironment->setSandboxIsDisplayed(true);
ExecutionViewControllerHelper::viewWillAppear(this);
redrawWindow();
}
void SandboxController::viewDidDisappear() {
assert(m_executionEnvironment != nullptr);
m_executionEnvironment->setSandboxIsDisplayed(false);
}
bool SandboxController::handleEvent(Ion::Events::Event event) {
// The sandbox handles or "absorbs" all keyboard events except Home and OnOff
if (event == Ion::Events::Home || event == Ion::Events::OnOff) {

View File

@@ -9,24 +9,22 @@
namespace Code {
class SandboxController : public ViewController {
class SandboxController : public ViewController, public MicroPython::ExecutionViewControllerHelper {
public:
SandboxController(Responder * parentResponder, MicroPython::ExecutionEnvironment * executionEnvironment);
StackViewController * stackViewController();
void reset();
void hide();
// ViewController
View * view() override { return &m_solidColorView; }
void viewWillAppear() override;
void viewDidDisappear() override;
void viewDidDisappear() override { MicroPython::ExecutionViewControllerHelper::viewDidDisappear(this); }
bool handleEvent(Ion::Events::Event event) override;
ViewController::DisplayParameter displayParameter() override { return ViewController::DisplayParameter::WantsMaximumSpace; }
private:
void redrawWindow();
SolidColorView m_solidColorView;
MicroPython::ExecutionEnvironment * m_executionEnvironment;
};
}