From 398de8bda3f86eb4064c1b30bfe967b928451767 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9a=20Saviot?= Date: Fri, 17 Apr 2020 18:01:16 +0200 Subject: [PATCH] [apps/code] Empty controller in the var box --- apps/code/Makefile | 1 + apps/code/variable_box_controller.cpp | 4 +-- apps/code/variable_box_controller.h | 11 +++++-- apps/code/variable_box_empty_controller.cpp | 14 +++++++++ apps/code/variable_box_empty_controller.h | 34 +++++++++++++++++++++ 5 files changed, 60 insertions(+), 4 deletions(-) create mode 100644 apps/code/variable_box_empty_controller.cpp create mode 100644 apps/code/variable_box_empty_controller.h diff --git a/apps/code/Makefile b/apps/code/Makefile index d91713eed..7a4772d2c 100644 --- a/apps/code/Makefile +++ b/apps/code/Makefile @@ -24,6 +24,7 @@ app_code_src = $(addprefix apps/code/,\ script_parameter_controller.cpp \ script_store.cpp \ variable_box_controller.cpp \ + variable_box_empty_controller.cpp \ ) app_code_src += $(app_code_test_src) diff --git a/apps/code/variable_box_controller.cpp b/apps/code/variable_box_controller.cpp index 03103d8f2..e6b74f781 100644 --- a/apps/code/variable_box_controller.cpp +++ b/apps/code/variable_box_controller.cpp @@ -47,7 +47,7 @@ static bool shouldAddObject(const char * name, int maxLength) { } VariableBoxController::VariableBoxController(ScriptStore * scriptStore) : - NestedMenuController(nullptr, I18n::Message::FunctionsAndVariables), + AlternateEmptyNestedMenuController(I18n::Message::FunctionsAndVariables), m_scriptStore(scriptStore), m_currentScriptNodesCount(0), m_builtinNodesCount(0), @@ -141,7 +141,7 @@ void VariableBoxController::tableViewDidChangeSelection(SelectableTableView * t, return; } const int currentSelectedRow = selectedRow(); - if (typeAtLocation(0, currentSelectedRow) == k_subtitleCellType) { + if (currentSelectedRow >= 0 && typeAtLocation(0, currentSelectedRow) == k_subtitleCellType) { if (currentSelectedRow == 0) { t->selectCellAtLocation(0, 1); } else { diff --git a/apps/code/variable_box_controller.h b/apps/code/variable_box_controller.h index 3cfb63bf8..462e9db1a 100644 --- a/apps/code/variable_box_controller.h +++ b/apps/code/variable_box_controller.h @@ -1,14 +1,16 @@ #ifndef CODE_VARIABLE_BOX_CONTROLLER_H #define CODE_VARIABLE_BOX_CONTROLLER_H -#include +#include +#include #include "script_node.h" #include "script_node_cell.h" #include "script_store.h" +#include "variable_box_empty_controller.h" namespace Code { -class VariableBoxController : public NestedMenuController { +class VariableBoxController : public AlternateEmptyNestedMenuController { public: VariableBoxController(ScriptStore * scriptStore); @@ -27,6 +29,10 @@ public: /* SelectableTableViewDelegate */ void tableViewDidChangeSelection(SelectableTableView * t, int previousSelectedCellX, int previousSelectedCellY, bool withinTemporarySelection = false) override; + //AlternateEmptyNestedMenuController + ViewController * emptyViewController() override { return &m_variableBoxEmptyController; } + bool isDisplayingEmptyController() override { return StackViewController::depth() == 2; } + /* VariableBoxController */ void loadFunctionsAndVariables(int scriptIndex, const char * textToAutocomplete, int textToAutocompleteLength); const char * autocompletionForText(int scriptIndex, const char * textToAutocomplete, int * textToInsertLength); @@ -96,6 +102,7 @@ private: bool shouldAddNode(const char * textToAutocomplete, int textToAutocompleteLength, const char * name, int nameLength); bool contains(const char * name, int nameLength); void addNode(ScriptNode::Type type, NodeOrigin origin, const char * name, int nameLength, const char * nodeSourceName = nullptr, const char * description = nullptr); + VariableBoxEmptyController m_variableBoxEmptyController; ScriptNode m_currentScriptNodes[k_maxScriptNodesCount]; ScriptNode m_builtinNodes[k_totalBuiltinNodesCount]; ScriptNode m_importedNodes[k_maxScriptNodesCount]; diff --git a/apps/code/variable_box_empty_controller.cpp b/apps/code/variable_box_empty_controller.cpp new file mode 100644 index 000000000..ce4ea5ffe --- /dev/null +++ b/apps/code/variable_box_empty_controller.cpp @@ -0,0 +1,14 @@ +#include "variable_box_empty_controller.h" +#include + +namespace Code { + +VariableBoxEmptyController::VariableBoxEmptyView::VariableBoxEmptyView() : + ::VariableBoxEmptyController::VariableBoxEmptyView() +{ + initMessageViews(); + m_messages[0].setMessage(I18n::Message::Degrees); //TODO LEA + m_messages[1].setMessage(I18n::Message::Degrees); +} + +} diff --git a/apps/code/variable_box_empty_controller.h b/apps/code/variable_box_empty_controller.h new file mode 100644 index 000000000..f30f06825 --- /dev/null +++ b/apps/code/variable_box_empty_controller.h @@ -0,0 +1,34 @@ +#ifndef APPS_CODE_VARIABLE_BOX_EMPTY_CONTROLLER_H +#define APPS_CODE_VARIABLE_BOX_EMPTY_CONTROLLER_H + +#include + +namespace Code { + +class VariableBoxEmptyController : public ::VariableBoxEmptyController { +public: + VariableBoxEmptyController() : + ::VariableBoxEmptyController(), + m_view() + {} + // View Controller + View * view() override { return &m_view; } +private: + class VariableBoxEmptyView : public ::VariableBoxEmptyController::VariableBoxEmptyView { + public: + constexpr static int k_numberOfMessages = 2; + VariableBoxEmptyView(); + private: + int numberOfMessageTextViews() const override { return k_numberOfMessages; } + MessageTextView * messageTextViewAtIndex(int index) override { + assert(index >= 0 && index < k_numberOfMessages); + return &m_messages[index]; + } + MessageTextView m_messages[k_numberOfMessages]; + }; + VariableBoxEmptyView m_view; +}; + +} + +#endif