diff --git a/apps/code/accordion.cpp b/apps/code/accordion.cpp index 14aa4d6ee..3c8c7b108 100644 --- a/apps/code/accordion.cpp +++ b/apps/code/accordion.cpp @@ -13,10 +13,6 @@ Accordion::Accordion(char * buffer, int bufferSize) : } } -int Accordion::numberOfBuffers() { - return m_numberOfBuffers; -} - const char * Accordion::bufferAtIndex(int index) { assert(index >= 0 && index < numberOfBuffers()); cleanFreeSpace(); @@ -42,8 +38,8 @@ int Accordion::sizeOfEditableBufferAtIndex(int index) { break; } length++; - // We do not count one Free Space Marker, in order to always have at a - // Free Space of sizeat least one. + // We do not count one Free Space Marker, in order to always have at a Free + // Space of size at least one. } return length; } @@ -172,7 +168,7 @@ void Accordion::cleanFreeSpace() { && indexOfCharToChangeIntoFreeSpaceMarker < m_historySize) { m_history[indexOfCharToChangeIntoFreeSpaceMarker] = k_freeSpaceMarker; - indexOfCharToChangeIntoFreeSpaceMarker ++; + indexOfCharToChangeIntoFreeSpaceMarker++; } } diff --git a/apps/code/accordion.h b/apps/code/accordion.h index d6998d776..a7acbba73 100644 --- a/apps/code/accordion.h +++ b/apps/code/accordion.h @@ -7,7 +7,7 @@ class Accordion { public: Accordion(char * buffer, int bufferSize); - int numberOfBuffers(); + int numberOfBuffers() { return m_numberOfBuffers; } const char * bufferAtIndex(int index); char * editableBufferAtIndex(int index); int sizeOfEditableBufferAtIndex(int index); diff --git a/apps/code/menu_controller.cpp b/apps/code/menu_controller.cpp index e005bdb5e..cf1ff59ce 100644 --- a/apps/code/menu_controller.cpp +++ b/apps/code/menu_controller.cpp @@ -24,7 +24,8 @@ MenuController::MenuController(Responder * parentResponder, ScriptStore * script m_consoleController(parentResponder, m_scriptStore), m_scriptParameterController(nullptr, I18n::Message::ScriptOptions, m_scriptStore, this), m_editorController(this), - m_reloadConsoleWhenBecomingFirstResponder(false) + m_reloadConsoleWhenBecomingFirstResponder(false), + m_shouldDisplayAddScriptRow(true) { for (int i = 0; i < k_maxNumberOfDisplayableScriptCells; i++) { m_scriptCells[i].setParentResponder(&m_selectableTableView); @@ -35,11 +36,14 @@ MenuController::MenuController(Responder * parentResponder, ScriptStore * script } } +StackViewController * MenuController::stackViewController() { + return static_cast(parentResponder()->parentResponder()); +} + void MenuController::didBecomeFirstResponder() { if (m_reloadConsoleWhenBecomingFirstResponder) { reloadConsole(); } - if (footer()->selectedButton() == 0) { assert(m_selectableTableView.selectedRow() < 0); app()->setFirstResponder(&m_consoleButton); @@ -48,9 +52,14 @@ void MenuController::didBecomeFirstResponder() { if (m_selectableTableView.selectedRow() < 0) { m_selectableTableView.selectCellAtLocation(0,0); } + assert(m_selectableTableView.selectedRow() < m_scriptStore->numberOfScripts()); app()->setFirstResponder(&m_selectableTableView); } +void MenuController::viewWillAppear() { + updateAddScriptRowDisplay(); +} + bool MenuController::handleEvent(Ion::Events::Event event) { if (event == Ion::Events::Down) { m_selectableTableView.deselectTable(); @@ -76,7 +85,7 @@ bool MenuController::handleEvent(Ion::Events::Event event) { assert(selectedColumn == 0); editScript(selectedRow); return true; - } else if (shouldDisplayAddScriptRow() + } else if (m_shouldDisplayAddScriptRow && selectedColumn == 0 && selectedRow == m_scriptStore->numberOfScripts()) { @@ -105,6 +114,7 @@ void MenuController::setParameteredScript() { void MenuController::addScript() { assert(m_scriptStore->numberOfScripts() < k_maxNumberOfScripts); if (m_scriptStore->addNewScript()) { + updateAddScriptRowDisplay(); m_selectableTableView.reloadData(); renameSelectedScript(); return; @@ -126,6 +136,7 @@ void MenuController::renameSelectedScript() { void MenuController::deleteScriptAtIndex(int i) { m_scriptStore->deleteScriptAtIndex(i); + updateAddScriptRowDisplay(); m_selectableTableView.reloadData(); } @@ -143,17 +154,12 @@ void MenuController::openConsoleWithScriptAtIndex(int scriptIndex) { m_reloadConsoleWhenBecomingFirstResponder = true; } -bool MenuController::shouldDisplayAddScriptRow() { - return (m_scriptStore->numberOfScripts() < k_maxNumberOfScripts - && !m_scriptStore->isFull()); -} - void MenuController::scriptContentEditionDidFinish(){ reloadConsole(); } int MenuController::numberOfRows() { - return m_scriptStore->numberOfScripts() + shouldDisplayAddScriptRow(); + return m_scriptStore->numberOfScripts() + m_shouldDisplayAddScriptRow; } void MenuController::willDisplayCellAtLocation(HighlightCell * cell, int i, int j) { @@ -251,16 +257,16 @@ int MenuController::reusableCellCount(int type) { } int MenuController::typeAtLocation(int i, int j) { - assert(i>=0 && i=0 && j= 0 && i < numberOfColumns()); + assert(j >= 0 && j < numberOfRows()); + if (i == 0) { + if (j == numberOfRows()-1 && m_shouldDisplayAddScriptRow) { return AddScriptCellType; } return ScriptCellType; } - assert(i==1); - if (j==numberOfRows()-1 && shouldDisplayAddScriptRow()) { + assert(i == 1); + if (j == numberOfRows()-1 && m_shouldDisplayAddScriptRow) { return EmptyCellType; } return ScriptParameterCellType; @@ -273,7 +279,7 @@ void MenuController::willDisplayScriptTitleCellForIndex(HighlightCell * cell, in } void MenuController::tableViewDidChangeSelection(SelectableTableView * t, int previousSelectedCellX, int previousSelectedCellY) { - if (shouldDisplayAddScriptRow() && selectedRow() == numberOfRows() - 1 && selectedColumn() == 1) { + if (selectedRow() == numberOfRows() - 1 && selectedColumn() == 1 && m_shouldDisplayAddScriptRow) { t->selectCellAtLocation(0, numberOfRows()-1); } } @@ -307,6 +313,7 @@ bool MenuController::textFieldDidFinishEditing(TextField * textField, const char newName = text; } if (m_scriptStore->renameScriptAtIndex(m_selectableTableView.selectedRow(), newName)) { + updateAddScriptRowDisplay(); textField->setText(newName); int currentRow = m_selectableTableView.selectedRow(); if (event == Ion::Events::Down && currentRow < numberOfRows() - 1) { @@ -330,6 +337,7 @@ bool MenuController::textFieldDidAbortEditing(TextField * textField, const char char numberedDefaultName[k_defaultScriptNameMaxSize]; numberedDefaultScriptName(numberedDefaultName); m_scriptStore->renameScriptAtIndex(m_selectableTableView.selectedRow(), const_cast(numberedDefaultName)); + updateAddScriptRowDisplay(); m_selectableTableView.reloadData(); } m_selectableTableView.selectCellAtLocation(m_selectableTableView.selectedColumn(), m_selectableTableView.selectedRow()); @@ -375,8 +383,8 @@ void MenuController::intToText(int i, char * buffer) { buffer[2] = 0; } -StackViewController * MenuController::stackViewController() { - return static_cast(parentResponder()->parentResponder()); +void MenuController::updateAddScriptRowDisplay() { + m_shouldDisplayAddScriptRow = (m_scriptStore->numberOfScripts() < k_maxNumberOfScripts && !m_scriptStore->isFull()); } } diff --git a/apps/code/menu_controller.h b/apps/code/menu_controller.h index c149cf7ec..e4b062a3f 100644 --- a/apps/code/menu_controller.h +++ b/apps/code/menu_controller.h @@ -25,13 +25,13 @@ public: void deleteScriptAtIndex(int i); void reloadConsole(); void openConsoleWithScriptAtIndex(int scriptIndex); - bool shouldDisplayAddScriptRow(); void scriptContentEditionDidFinish(); /* ViewController */ View * view() override { return &m_selectableTableView; } bool handleEvent(Ion::Events::Event event) override; void didBecomeFirstResponder() override; + void viewWillAppear() override; /* TableViewDataSource */ int numberOfRows() override; @@ -81,6 +81,7 @@ private: // 1 = length of null terminating char. void numberedDefaultScriptName(char * buffer); void intToText(int i, char * buffer); + void updateAddScriptRowDisplay(); ScriptStore * m_scriptStore; EvenOddEditableTextCell m_scriptCells[k_maxNumberOfDisplayableScriptCells]; /* In the initializer list of the MenuController constructor, we initialize @@ -96,6 +97,7 @@ private: ScriptParameterController m_scriptParameterController; EditorController m_editorController; bool m_reloadConsoleWhenBecomingFirstResponder; + bool m_shouldDisplayAddScriptRow; }; }