[code] Script editor and Console are stacked.

Before, they appeared in modal views.

Change-Id: I42ea742370cd3cf0854965f67fc44b43db4cc309
This commit is contained in:
Léa Saviot
2017-10-31 18:10:18 +01:00
committed by Romain Goyet
parent eadf4a018a
commit fbdf6379d8
9 changed files with 51 additions and 80 deletions

View File

@@ -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<StackViewController *>(parentResponder());
}
}

View File

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

View File

@@ -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<StackViewController *>(parentResponder());
}
}

View File

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

View File

@@ -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<Button *>(&m_consoleButton);
}
StackViewController * MenuController::stackViewController() {
return static_cast<StackViewController *>(parentResponder()->parentResponder());
}

View File

@@ -15,7 +15,7 @@ class MenuController : public ViewController, public ListViewDataSource, public
public:
MenuController(Responder * parentResponder, ScriptStore * scriptStore, ButtonRowController * footer);
ConsoleController * consoleController();
ConsoleController * consoleController() { return &m_consoleController; }
StackViewController * stackViewController();
void configureScript();
void setParameteredScript();
@@ -25,13 +25,13 @@ public:
void reloadConsole();
/* ViewController */
View * view() override;
View * view() override { return &m_selectableTableView; }
bool handleEvent(Ion::Events::Event event) override;
void didBecomeFirstResponder() override;
/* ListViewDataSource */
int numberOfRows() override;
KDCoordinate cellHeight();
KDCoordinate cellHeight() { return k_rowHeight; }
KDCoordinate rowHeight(int j) override;
KDCoordinate cumulatedHeightFromIndex(int j) override;
int indexFromCumulatedHeight(KDCoordinate offsetY) override;
@@ -45,11 +45,14 @@ public:
bool textFieldDidReceiveEvent(TextField * textField, Ion::Events::Event event) override;
bool textFieldDidFinishEditing(TextField * textField, const char * text, Ion::Events::Event event) override;
bool textFieldDidAbortEditing(TextField * textField, const char * text) override;
Toolbox * toolboxForTextField(TextField * textFied) override;
Toolbox * toolboxForTextField(TextField * textFied) override { return nullptr; }
/* ButtonRowDelegate */
int numberOfButtons(ButtonRowController::Position position) const override;
Button * buttonAtIndex(int index, ButtonRowController::Position position) const override;
int numberOfButtons(ButtonRowController::Position position) const override { return 1; }
Button * buttonAtIndex(int index, ButtonRowController::Position position) const override {
assert(index == 0);
return const_cast<Button *>(&m_consoleButton);
}
private:
static constexpr int k_maxNumberOfDisplayableScriptCells = 7; //TODO

View File

@@ -49,7 +49,7 @@ bool ScriptParameterController::handleEvent(Ion::Events::Event event) {
int i = m_currentScriptIndex;
switch (selectedRow()) {
case 0:
app()->displayModalViewController(&m_editorController, 0.5f, 0.5f);
stackController()->push(&m_editorController);
return true;
case 1:
dismissScriptParameterController();
@@ -101,7 +101,7 @@ int ScriptParameterController::reusableCellCount() {
}
int ScriptParameterController::numberOfRows() {
return k_totalNumberOfCell;
return k_totalNumberOfCell;
}
void ScriptParameterController::willDisplayCellForIndex(HighlightCell * cell, int index) {
@@ -115,7 +115,7 @@ void ScriptParameterController::willDisplayCellForIndex(HighlightCell * cell, in
}
StackViewController * ScriptParameterController::stackController() {
return static_cast<StackViewController *>(parentResponder());
return static_cast<StackViewController *>(parentResponder());
}
}

View File

@@ -7,6 +7,7 @@
#include <escher/i18n.h>
#include <escher/button.h>
#include <escher/app.h>
#include <assert.h>
class ButtonRowDelegate;
@@ -21,10 +22,11 @@ public:
EmbossedGrey
};
ButtonRowController(Responder * parentResponder, ViewController * mainViewController, ButtonRowDelegate * delegate, Position position = Position::Top, Style = Style::PlainWhite);
View * view() override;
View * view() override { return &m_contentView; }
const char * title() override;
void didBecomeFirstResponder() override;
bool handleEvent(Ion::Events::Event event) override;
int selectedButton();
bool setSelectedButton(int selectedButton);
void viewWillAppear() override;
void viewDidDisappear() override;
@@ -40,9 +42,9 @@ private:
void layoutSubviews() override;
void drawRect(KDContext * ctx, KDRect rect) const override;
bool setSelectedButton(int selectedButton, App * app);
int selectedButton();
ViewController * mainViewController() const;
ButtonRowDelegate * buttonRowDelegate() const;
int selectedButton() const { return m_selectedButton; }
ViewController * mainViewController() const { return m_mainViewController; }
ButtonRowDelegate * buttonRowDelegate() const { return m_delegate; }
private:
constexpr static KDCoordinate k_plainStyleHeight = 20;
constexpr static KDCoordinate k_embossedStyleHeight = 36;
@@ -61,10 +63,13 @@ private:
class ButtonRowDelegate {
public:
ButtonRowDelegate(ButtonRowController * header, ButtonRowController * footer);
virtual int numberOfButtons(ButtonRowController::Position position) const;
virtual Button * buttonAtIndex(int index, ButtonRowController::Position position) const;
ButtonRowController * header();
ButtonRowController * footer();
virtual int numberOfButtons(ButtonRowController::Position position) const { return 0; }
virtual Button * buttonAtIndex(int index, ButtonRowController::Position position) const {
assert(false);
return nullptr;
}
ButtonRowController * header() { return m_header; }
ButtonRowController * footer() { return m_footer; }
private:
ButtonRowController * m_header;
ButtonRowController * m_footer;

View File

@@ -1,6 +1,5 @@
#include <escher/button_row_controller.h>
#include <escher/palette.h>
#include <assert.h>
#include <cmath>
ButtonRowDelegate::ButtonRowDelegate(ButtonRowController * header, ButtonRowController * footer) :
@@ -9,23 +8,6 @@ ButtonRowDelegate::ButtonRowDelegate(ButtonRowController * header, ButtonRowCont
{
}
int ButtonRowDelegate::numberOfButtons(ButtonRowController::Position position) const {
return 0;
}
Button * ButtonRowDelegate::buttonAtIndex(int index, ButtonRowController::Position position) const {
assert(false);
return nullptr;
}
ButtonRowController * ButtonRowDelegate::footer() {
return m_footer;
}
ButtonRowController * ButtonRowDelegate::header() {
return m_header;
}
ButtonRowController::ContentView::ContentView(ViewController * mainViewController, ButtonRowDelegate * delegate, Position position, Style style) :
View(),
m_mainViewController(mainViewController),
@@ -165,28 +147,12 @@ bool ButtonRowController::ContentView::setSelectedButton(int selectedButton, App
return false;
}
int ButtonRowController::ContentView::selectedButton() {
return m_selectedButton;
}
ViewController * ButtonRowController::ContentView::mainViewController() const {
return m_mainViewController;
}
ButtonRowDelegate * ButtonRowController::ContentView::buttonRowDelegate() const {
return m_delegate;
}
ButtonRowController::ButtonRowController(Responder * parentResponder, ViewController * mainViewController, ButtonRowDelegate * delegate, Position position, Style style) :
ViewController(parentResponder),
m_contentView(mainViewController, delegate, position, style)
{
}
View * ButtonRowController::view() {
return &m_contentView;
}
const char * ButtonRowController::title() {
return m_contentView.mainViewController()->title();
}
@@ -195,6 +161,10 @@ void ButtonRowController::didBecomeFirstResponder(){
app()->setFirstResponder(m_contentView.mainViewController());
}
int ButtonRowController::selectedButton() {
return m_contentView.selectedButton();
}
bool ButtonRowController::setSelectedButton(int selectedButton) {
App * application = app();
return m_contentView.setSelectedButton(selectedButton, application);