From 9cda9d9e59f27afa91e93ddd409279322cf39e3b Mon Sep 17 00:00:00 2001 From: Faustin Date: Thu, 7 Oct 2021 21:48:19 +0200 Subject: [PATCH] [apps/code] Add a settings for autocomplete (#36) --- apps/code/python_text_area.cpp | 6 ++ apps/global_preferences.h | 4 ++ apps/settings/Makefile | 1 + apps/settings/main_controller.cpp | 13 ++-- apps/settings/main_controller.h | 3 + apps/settings/main_controller_prompt_beta.cpp | 2 +- apps/settings/main_controller_prompt_none.cpp | 2 +- .../main_controller_prompt_update.cpp | 2 +- .../sub_menu/code_options_controller.cpp | 72 +++++++++++++++++++ .../sub_menu/code_options_controller.h | 26 +++++++ 10 files changed, 124 insertions(+), 7 deletions(-) create mode 100644 apps/settings/sub_menu/code_options_controller.cpp create mode 100644 apps/settings/sub_menu/code_options_controller.h diff --git a/apps/code/python_text_area.cpp b/apps/code/python_text_area.cpp index ab0615f3b..480da7304 100644 --- a/apps/code/python_text_area.cpp +++ b/apps/code/python_text_area.cpp @@ -3,6 +3,7 @@ #include #include #include +#include "../global_preferences.h" extern "C" { #include "py/nlr.h" @@ -444,6 +445,11 @@ void PythonTextArea::addAutocompletion() { } bool PythonTextArea::addAutocompletionTextAtIndex(int nextIndex, int * currentIndexToUpdate) { + // If Autocomplete disable, skip this step + if(!GlobalPreferences::sharedGlobalPreferences()->autocomplete()) { + return false; + } + // The variable box should be loaded at this point const char * autocompletionTokenBeginning = nullptr; const char * autocompletionLocation = const_cast(cursorLocation()); diff --git a/apps/global_preferences.h b/apps/global_preferences.h index 4367c20f7..641e48792 100644 --- a/apps/global_preferences.h +++ b/apps/global_preferences.h @@ -30,6 +30,8 @@ public: void setTempExamMode(ExamMode examMode); bool showPopUp() const { return m_showPopUp; } void setShowPopUp(bool showPopUp) { m_showPopUp = showPopUp; } + bool autocomplete() const { return m_autoComplete; } + void setAutocomplete(bool autocomple) { m_autoComplete = autocomple; } int brightnessLevel() const { return m_brightnessLevel; } void setBrightnessLevel(int brightnessLevel); const KDFont * font() const { return m_font; } @@ -44,6 +46,7 @@ private: m_examMode(ExamMode::Unknown), m_tempExamMode(ExamMode::Standard), m_showPopUp(true), + m_autoComplete(true), m_brightnessLevel(Ion::Backlight::MaxBrightness), m_font(KDFont::LargeFont) {} I18n::Language m_language; @@ -53,6 +56,7 @@ private: mutable ExamMode m_examMode; mutable ExamMode m_tempExamMode; bool m_showPopUp; + bool m_autoComplete; int m_brightnessLevel; const KDFont * m_font; }; diff --git a/apps/settings/Makefile b/apps/settings/Makefile index 588b95c2f..e0598ec4e 100644 --- a/apps/settings/Makefile +++ b/apps/settings/Makefile @@ -11,6 +11,7 @@ app_settings_src = $(addprefix apps/settings/,\ main_controller_prompt_update.cpp:+update \ sub_menu/about_controller.cpp \ sub_menu/accessibility_controller.cpp \ + sub_menu/code_options_controller.cpp \ sub_menu/about_controller_official.cpp:+official \ sub_menu/about_controller_non_official.cpp:-official \ sub_menu/exam_mode_controller_official.cpp:+official \ diff --git a/apps/settings/main_controller.cpp b/apps/settings/main_controller.cpp index 0b41d4254..2b74f96fa 100644 --- a/apps/settings/main_controller.cpp +++ b/apps/settings/main_controller.cpp @@ -17,9 +17,14 @@ constexpr SettingsMessageTree s_modelDateTimeChildren[3] = {SettingsMessageTree( constexpr SettingsMessageTree s_symbolChildren[4] = {SettingsMessageTree(I18n::Message::SymbolMultiplicationCross),SettingsMessageTree(I18n::Message::SymbolMultiplicationMiddleDot),SettingsMessageTree(I18n::Message::SymbolMultiplicationStar),SettingsMessageTree(I18n::Message::SymbolMultiplicationAutoSymbol)}; constexpr SettingsMessageTree s_symbolFunctionChildren[3] = {SettingsMessageTree(I18n::Message::SymbolDefaultFunction), SettingsMessageTree(I18n::Message::SymbolArgDefaultFunction), SettingsMessageTree(I18n::Message::SymbolArgFunction)}; constexpr SettingsMessageTree s_modelMathOptionsChildren[6] = {SettingsMessageTree(I18n::Message::AngleUnit, s_modelAngleChildren), SettingsMessageTree(I18n::Message::DisplayMode, s_modelFloatDisplayModeChildren), SettingsMessageTree(I18n::Message::EditionMode, s_modelEditionModeChildren), SettingsMessageTree(I18n::Message::SymbolFunction, s_symbolFunctionChildren), SettingsMessageTree(I18n::Message::ComplexFormat, s_modelComplexFormatChildren), SettingsMessageTree(I18n::Message::SymbolMultiplication, s_symbolChildren)}; -constexpr SettingsMessageTree s_modelFontChildren[2] = {SettingsMessageTree(I18n::Message::LargeFont), SettingsMessageTree(I18n::Message::SmallFont)}; constexpr SettingsMessageTree s_accessibilityChildren[6] = {SettingsMessageTree(I18n::Message::AccessibilityInvertColors), SettingsMessageTree(I18n::Message::AccessibilityMagnify),SettingsMessageTree(I18n::Message::AccessibilityGamma),SettingsMessageTree(I18n::Message::AccessibilityGammaRed),SettingsMessageTree(I18n::Message::AccessibilityGammaGreen),SettingsMessageTree(I18n::Message::AccessibilityGammaBlue)}; constexpr SettingsMessageTree s_contributorsChildren[23] = {SettingsMessageTree(I18n::Message::Developers), SettingsMessageTree(I18n::Message::QuentinGuidee), SettingsMessageTree(I18n::Message::JoachimLeFournis), SettingsMessageTree(I18n::Message::MaximeFriess), SettingsMessageTree(I18n::Message::JeanBaptisteBoric), SettingsMessageTree(I18n::Message::SandraSimmons), SettingsMessageTree(I18n::Message::David), SettingsMessageTree(I18n::Message::DamienNicolet), SettingsMessageTree(I18n::Message::EvannDreumont), SettingsMessageTree(I18n::Message::SzaboLevente), SettingsMessageTree(I18n::Message::VenceslasDuet), SettingsMessageTree(I18n::Message::CharlotteThomas), SettingsMessageTree(I18n::Message::AntoninLoubiere), SettingsMessageTree(I18n::Message::CyprienMejat), SettingsMessageTree(I18n::Message::BetaTesters), SettingsMessageTree(I18n::Message::TimeoArnouts), SettingsMessageTree(I18n::Message::JulieC), SettingsMessageTree(I18n::Message::LelahelHideux), SettingsMessageTree(I18n::Message::Madil), SettingsMessageTree(I18n::Message::HilaireLeRoux), SettingsMessageTree(I18n::Message::HectorNussbaumer), SettingsMessageTree(I18n::Message::RaphaelDyda), SettingsMessageTree(I18n::Message::ThibautC)}; + +// Code Settings +constexpr SettingsMessageTree s_codeChildren[2] = {SettingsMessageTree(I18n::Message::FontSizes, s_modelFontChildren), SettingsMessageTree(I18n::Message::Autocomplete)}; +constexpr SettingsMessageTree s_modelFontChildren[2] = {SettingsMessageTree(I18n::Message::LargeFont), SettingsMessageTree(I18n::Message::SmallFont)}; + + constexpr SettingsMessageTree s_modelAboutChildren[9] = {SettingsMessageTree(I18n::Message::Username), SettingsMessageTree(I18n::Message::SoftwareVersion), SettingsMessageTree(I18n::Message::UpsilonVersion), SettingsMessageTree(I18n::Message::MicroPythonVersion), SettingsMessageTree(I18n::Message::Battery), SettingsMessageTree(I18n::Message::MemUse), SettingsMessageTree(I18n::Message::SerialNumber), SettingsMessageTree(I18n::Message::FccId), SettingsMessageTree(I18n::Message::Contributors, s_contributorsChildren)}; MainController::MainController(Responder * parentResponder, InputEventHandlerDelegate * inputEventHandlerDelegate) : @@ -31,6 +36,7 @@ MainController::MainController(Responder * parentResponder, InputEventHandlerDel m_localizationController(this, Metric::CommonTopMargin, LocalizationController::Mode::Language), m_accessibilityController(this), m_dateTimeController(this), + m_codeOptionsController(this), m_examModeController(this), m_aboutController(this), m_preferencesController(this) @@ -103,6 +109,8 @@ bool MainController::handleEvent(Ion::Events::Event event) { subController = &m_dateTimeController; } else if (title == I18n::Message::MathOptions) { subController = &m_mathOptionsController; + } else if (title == I18n::Message::CodeApp) { + subController = &m_codeOptionsController; } else { subController = &m_preferencesController; } @@ -202,9 +210,6 @@ void MainController::willDisplayCellForIndex(HighlightCell * cell, int index) { MessageTableCellWithChevronAndMessage * myTextCell = (MessageTableCellWithChevronAndMessage *)cell; int childIndex = -1; switch (model()->childAtIndex(index)->label()) { - case I18n::Message::FontSizes: - childIndex = GlobalPreferences::sharedGlobalPreferences()->font() == KDFont::LargeFont ? 0 : 1; - break; default: break; } diff --git a/apps/settings/main_controller.h b/apps/settings/main_controller.h index 796f50bbd..c254fb8d1 100644 --- a/apps/settings/main_controller.h +++ b/apps/settings/main_controller.h @@ -8,6 +8,7 @@ #include "sub_menu/accessibility_controller.h" #include "sub_menu/datetime_controller.h" #include "sub_menu/exam_mode_controller.h" +#include "sub_menu/code_options_controller.h" #include "sub_menu/localization_controller.h" #include "sub_menu/math_options_controller.h" #include "sub_menu/preferences_controller.h" @@ -22,6 +23,7 @@ extern const Shared::SettingsMessageTree s_symbolChildren[4]; extern const Shared::SettingsMessageTree s_symbolFunctionChildren[3]; extern const Shared::SettingsMessageTree s_modelMathOptionsChildren[6]; extern const Shared::SettingsMessageTree s_modelFontChildren[2]; +extern const Shared::SettingsMessageTree s_codeChildren[2]; extern const Shared::SettingsMessageTree s_modelDateTimeChildren[3]; extern const Shared::SettingsMessageTree s_accessibilityChildren[6]; extern const Shared::SettingsMessageTree s_contributorsChildren[23]; @@ -70,6 +72,7 @@ private: LocalizationController m_localizationController; AccessibilityController m_accessibilityController; DateTimeController m_dateTimeController; + CodeOptionsController m_codeOptionsController; ExamModeController m_examModeController; AboutController m_aboutController; PreferencesController m_preferencesController; diff --git a/apps/settings/main_controller_prompt_beta.cpp b/apps/settings/main_controller_prompt_beta.cpp index b462cc14b..ab9a457bd 100644 --- a/apps/settings/main_controller_prompt_beta.cpp +++ b/apps/settings/main_controller_prompt_beta.cpp @@ -10,10 +10,10 @@ constexpr SettingsMessageTree s_modelMenu[] = {SettingsMessageTree(I18n::Message::MathOptions, s_modelMathOptionsChildren), SettingsMessageTree(I18n::Message::Brightness), SettingsMessageTree(I18n::Message::DateTime, s_modelDateTimeChildren), - SettingsMessageTree(I18n::Message::FontSizes, s_modelFontChildren), SettingsMessageTree(I18n::Message::Language), SettingsMessageTree(I18n::Message::Country), SettingsMessageTree(I18n::Message::ExamMode, ExamModeConfiguration::s_modelExamChildren), + SettingsMessageTree(I18n::Message::CodeApp, s_codeChildren), SettingsMessageTree(I18n::Message::BetaPopUp), SettingsMessageTree(I18n::Message::About, s_modelAboutChildren), SettingsMessageTree(I18n::Message::Accessibility, s_accessibilityChildren)}; diff --git a/apps/settings/main_controller_prompt_none.cpp b/apps/settings/main_controller_prompt_none.cpp index 965fffe07..782240363 100644 --- a/apps/settings/main_controller_prompt_none.cpp +++ b/apps/settings/main_controller_prompt_none.cpp @@ -13,7 +13,7 @@ constexpr SettingsMessageTree s_modelMenu[] = SettingsMessageTree(I18n::Message::Language), SettingsMessageTree(I18n::Message::Country), SettingsMessageTree(I18n::Message::ExamMode, ExamModeConfiguration::s_modelExamChildren), - SettingsMessageTree(I18n::Message::FontSizes, s_modelFontChildren), + SettingsMessageTree(I18n::Message::CodeApp, s_codeChildren), SettingsMessageTree(I18n::Message::Accessibility, s_accessibilityChildren), SettingsMessageTree(I18n::Message::About, s_modelAboutChildren)}; diff --git a/apps/settings/main_controller_prompt_update.cpp b/apps/settings/main_controller_prompt_update.cpp index 3c74faffc..22f24059e 100644 --- a/apps/settings/main_controller_prompt_update.cpp +++ b/apps/settings/main_controller_prompt_update.cpp @@ -10,10 +10,10 @@ constexpr SettingsMessageTree s_modelMenu[] = {SettingsMessageTree(I18n::Message::MathOptions, s_modelMathOptionsChildren), SettingsMessageTree(I18n::Message::Brightness), SettingsMessageTree(I18n::Message::DateTime, s_modelDateTimeChildren), - SettingsMessageTree(I18n::Message::FontSizes, s_modelFontChildren), SettingsMessageTree(I18n::Message::Language), SettingsMessageTree(I18n::Message::Country), SettingsMessageTree(I18n::Message::ExamMode, ExamModeConfiguration::s_modelExamChildren), + SettingsMessageTree(I18n::Message::CodeApp, s_codeChildren), SettingsMessageTree(I18n::Message::UpdatePopUp), SettingsMessageTree(I18n::Message::Accessibility, s_accessibilityChildren), SettingsMessageTree(I18n::Message::About, s_modelAboutChildren)}; diff --git a/apps/settings/sub_menu/code_options_controller.cpp b/apps/settings/sub_menu/code_options_controller.cpp new file mode 100644 index 000000000..1aff07456 --- /dev/null +++ b/apps/settings/sub_menu/code_options_controller.cpp @@ -0,0 +1,72 @@ +#include "code_options_controller.h" +#include +#include "../../global_preferences.h" + +using namespace Shared; + +namespace Settings { + +CodeOptionsController::CodeOptionsController(Responder * parentResponder) : + GenericSubController(parentResponder), + m_preferencesController(this) +{ + for (int i = 0; i < k_totalNumberOfCell; i++) { + m_cells[i].setMessageFont(KDFont::LargeFont); + } + for (int i = 0; i < k_totalNumberOfSwitchCells; i++) { + m_switchCells[i].setMessageFont(KDFont::LargeFont); + } +} + +bool CodeOptionsController::handleEvent(Ion::Events::Event event) { + if (event == Ion::Events::OK || event == Ion::Events::EXE || event == Ion::Events::Right) { + switch (selectedRow()){ + case 1: + GlobalPreferences::sharedGlobalPreferences()->setAutocomplete(!GlobalPreferences::sharedGlobalPreferences()->autocomplete()); + m_selectableTableView.reloadCellAtLocation(m_selectableTableView.selectedColumn(), m_selectableTableView.selectedRow()); + break; + + default: + GenericSubController * subController = nullptr; + subController = &m_preferencesController; + subController->setMessageTreeModel(m_messageTreeModel->childAtIndex(selectedRow())); + StackViewController * stack = stackController(); + m_lastSelect = selectedRow(); + stack->push(subController); + break; + + } + return true; + } + return GenericSubController::handleEvent(event); +} + +HighlightCell * CodeOptionsController::reusableCell(int index, int type) { + assert(type == 0); + assert(index >= 0 && index < k_totalNumberOfCell); + return &m_cells[index]; +} + +int CodeOptionsController::reusableCellCount(int type) { + assert(type == 0); + return k_totalNumberOfCell; +} + +void CodeOptionsController::willDisplayCellForIndex(HighlightCell * cell, int index) { + GenericSubController::willDisplayCellForIndex(cell, index); + I18n::Message thisLabel = m_messageTreeModel->childAtIndex(index)->label(); + + if (thisLabel == I18n::Message::FontSizes){ + MessageTableCellWithChevronAndMessage * myTextCell = (MessageTableCellWithChevronAndMessage *)cell; + myTextCell->setMessage(thisLabel); + GlobalPreferences::sharedGlobalPreferences()->font() == KDFont::LargeFont + ? myTextCell->setSubtitle(I18n::Message::LargeFont) + : myTextCell->setSubtitle(I18n::Message::SmallFont); + } else if (thisLabel == I18n::Message::Autocomplete) { + MessageTableCellWithSwitch * mySwitchCell = (MessageTableCellWithSwitch *)cell; + SwitchView * mySwitch = (SwitchView *)mySwitchCell->accessoryView(); + mySwitch->setState(GlobalPreferences::sharedGlobalPreferences()->autocomplete()); + } +} + +} diff --git a/apps/settings/sub_menu/code_options_controller.h b/apps/settings/sub_menu/code_options_controller.h new file mode 100644 index 000000000..44bea0a3d --- /dev/null +++ b/apps/settings/sub_menu/code_options_controller.h @@ -0,0 +1,26 @@ +#ifndef SETTINGS_CODE_OPTIONS_CONTROLLER_H +#define SETTINGS_CODE_OPTIONS_CONTROLLER_H + +#include "generic_sub_controller.h" +#include "preferences_controller.h" + +namespace Settings { + +class CodeOptionsController : public GenericSubController { +public: + CodeOptionsController(Responder * parentResponder); + bool handleEvent(Ion::Events::Event event) override; + HighlightCell * reusableCell(int index, int type) override; + int reusableCellCount(int type) override; + void willDisplayCellForIndex(HighlightCell * cell, int index) override; +private: + constexpr static int k_totalNumberOfCell = 1; + constexpr static int k_totalNumberOfSwitchCells = 1; + PreferencesController m_preferencesController; + MessageTableCellWithChevronAndMessage m_cells[k_totalNumberOfCell]; + MessageTableCellWithSwitch m_switchCells[k_totalNumberOfCell]; +}; + +} + +#endif