diff --git a/apps/apps_container.cpp b/apps/apps_container.cpp index c4a77a547..f08efd05b 100644 --- a/apps/apps_container.cpp +++ b/apps/apps_container.cpp @@ -363,7 +363,7 @@ void AppsContainer::redrawWindow(bool force) { } void AppsContainer::activateExamMode(GlobalPreferences::ExamMode examMode) { - assert(examMode == GlobalPreferences::ExamMode::Standard || examMode == GlobalPreferences::ExamMode::Dutch); + assert(examMode == GlobalPreferences::ExamMode::Standard || examMode == GlobalPreferences::ExamMode::Dutch || examMode == GlobalPreferences::ExamMode::NoSym); reset(); Preferences * preferences = Preferences::sharedPreferences(); switch ((int)preferences->colorOfLED()) { diff --git a/apps/calculation/calculation_store.cpp b/apps/calculation/calculation_store.cpp index c8f1b25ef..10505479a 100644 --- a/apps/calculation/calculation_store.cpp +++ b/apps/calculation/calculation_store.cpp @@ -92,7 +92,7 @@ ExpiringPointer CalculationStore::push(const char * text, Context * // Compute and serialize the outputs { Expression outputs[] = {Expression(), Expression()}; - PoincareHelpers::ParseAndSimplifyAndApproximate(inputSerialization, &(outputs[0]), &(outputs[1]), context, GlobalPreferences::sharedGlobalPreferences()->isInExamMode() ? Preferences::sharedPreferences()->isExamSymbolic() : true); // Symbolic computation + PoincareHelpers::ParseAndSimplifyAndApproximate(inputSerialization, &(outputs[0]), &(outputs[1]), context, GlobalPreferences::sharedGlobalPreferences()->isInExamModeSymbolic()); // Symbolic computation for (int i = 0; i < 2; i++) { if (!serializeExpression(outputs[i], nextSerializationLocation, &newCalculationsLocation)) { /* If the exat/approximate output does not fit in the store (event if the diff --git a/apps/exam_pop_up_controller.cpp b/apps/exam_pop_up_controller.cpp index f35afe420..27451be80 100644 --- a/apps/exam_pop_up_controller.cpp +++ b/apps/exam_pop_up_controller.cpp @@ -96,7 +96,7 @@ void ExamPopUpController::ContentView::setMessagesForExamMode(GlobalPreferences: m_messageTextView1.setMessage(I18n::Message::ExitExamMode1); m_messageTextView2.setMessage(I18n::Message::ExitExamMode2); m_messageTextView3.setMessage(I18n::Message::Default); - } else if (mode == GlobalPreferences::ExamMode::Standard) { + } else if (mode == GlobalPreferences::ExamMode::Standard || mode == GlobalPreferences::ExamMode::NoSym) { m_messageTextView1.setMessage(I18n::Message::ActiveExamModeMessage1); m_messageTextView2.setMessage(I18n::Message::ActiveExamModeMessage2); m_messageTextView3.setMessage(I18n::Message::ActiveExamModeMessage3); diff --git a/apps/global_preferences.cpp b/apps/global_preferences.cpp index c6644f5fd..d05127172 100644 --- a/apps/global_preferences.cpp +++ b/apps/global_preferences.cpp @@ -8,12 +8,17 @@ GlobalPreferences * GlobalPreferences::sharedGlobalPreferences() { GlobalPreferences::ExamMode GlobalPreferences::examMode() const { if (m_examMode == ExamMode::Unknown) { uint8_t mode = Ion::ExamMode::FetchExamMode(); - assert(mode >= 0 && mode < 3); // mode can be cast in ExamMode (Off, Standard or Dutch) + assert(mode >= 0 && mode < 4); // mode can be cast in ExamMode (Off, Standard, NoSym or Dutch) m_examMode = (ExamMode)mode; } return m_examMode; } +GlobalPreferences::ExamMode GlobalPreferences::tempExamMode() const { + return m_tempExamMode; +} + + void GlobalPreferences::setExamMode(ExamMode mode) { ExamMode currentMode = examMode(); if (currentMode == mode) { @@ -21,12 +26,16 @@ void GlobalPreferences::setExamMode(ExamMode mode) { } assert(mode != ExamMode::Unknown); int8_t deltaMode = (int8_t)mode - (int8_t)currentMode; - deltaMode = deltaMode < 0 ? deltaMode + 3 : deltaMode; + deltaMode = deltaMode < 0 ? deltaMode + 4 : deltaMode; assert(deltaMode > 0); Ion::ExamMode::IncrementExamMode(deltaMode); m_examMode = mode; } +void GlobalPreferences::setTempExamMode(ExamMode mode) { + m_tempExamMode = mode; +} + void GlobalPreferences::setBrightnessLevel(int brightnessLevel) { if (m_brightnessLevel != brightnessLevel) { brightnessLevel = brightnessLevel < 0 ? 0 : brightnessLevel; diff --git a/apps/global_preferences.h b/apps/global_preferences.h index 4e266c63b..adf5e27fd 100644 --- a/apps/global_preferences.h +++ b/apps/global_preferences.h @@ -9,14 +9,18 @@ public: Unknown = -1, Off = 0, Standard = 1, - Dutch = 2 + NoSym = 2, + Dutch = 3, }; static GlobalPreferences * sharedGlobalPreferences(); I18n::Language language() const { return m_language; } void setLanguage(I18n::Language language) { m_language = language; } bool isInExamMode() const { return (int8_t)examMode() > 0; } + bool isInExamModeSymbolic() const { return !((int8_t)examMode() > 1); } ExamMode examMode() const; + ExamMode tempExamMode() const; void setExamMode(ExamMode examMode); + void setTempExamMode(ExamMode examMode); bool showPopUp() const { return m_showPopUp; } void setShowPopUp(bool showPopUp) { m_showPopUp = showPopUp; } int brightnessLevel() const { return m_brightnessLevel; } @@ -26,12 +30,14 @@ private: GlobalPreferences() : m_language(I18n::Language::EN), m_examMode(ExamMode::Unknown), + m_tempExamMode(ExamMode::Standard), m_showPopUp(true), m_brightnessLevel(Ion::Backlight::MaxBrightness) {} I18n::Language m_language; static_assert((int8_t)GlobalPreferences::ExamMode::Off == 0, "GlobalPreferences::isInExamMode() is not right"); static_assert((int8_t)GlobalPreferences::ExamMode::Unknown < 0, "GlobalPreferences::isInExamMode() is not right"); mutable ExamMode m_examMode; + mutable ExamMode m_tempExamMode; bool m_showPopUp; int m_brightnessLevel; }; diff --git a/apps/settings/base.de.i18n b/apps/settings/base.de.i18n index 048f88912..f52613c5e 100644 --- a/apps/settings/base.de.i18n +++ b/apps/settings/base.de.i18n @@ -9,7 +9,6 @@ ComplexFormat = "Komplex" ExamMode = "Testmodus" ActivateExamMode = "Starten Testmodus" ExamModeActive = "Wieder starten Testmodus" -ActivateDutchExamMode = "Activate Dutch exam mode" About = "Über" Degrees = "Grad " Gradians = "Gone " @@ -30,6 +29,10 @@ SerialNumber = "Seriennummer" UpdatePopUp = "Erinnerung: Update" BetaPopUp = "Beta pop-up" LEDColor = "LEDs farbe" +ExamModeMode = "Modus" +ExamModeModeStandard = "Standard " +ExamModeModeNoSym = "Ohne symbolisch " +ExamModeModeDutch = "Niederländisch " ColorWhite = "Weiss " ColorBlue = "Blau " ColorGreen = "Grün " @@ -48,4 +51,3 @@ SymbolMultiplicationCross = "Kreuz" SymbolMultiplicationMiddleDot = "Mittelpunkt" SymbolMultiplicationStar = "Stern" SymbolMultiplicationAutoSymbol = "automatisch" -SymbolicEnabled = "Symbolische Berechnung" diff --git a/apps/settings/base.en.i18n b/apps/settings/base.en.i18n index b9c411b26..94dd552f5 100644 --- a/apps/settings/base.en.i18n +++ b/apps/settings/base.en.i18n @@ -9,7 +9,6 @@ ComplexFormat = "Complex format" ExamMode = "Exam mode" ActivateExamMode = "Activate exam mode" ExamModeActive = "Reactivate exam mode" -ActivateDutchExamMode = "Activate Dutch exam mode" About = "About" Degrees = "Degrees " Gradians = "Gradians " @@ -30,6 +29,10 @@ SerialNumber = "Serial number" UpdatePopUp = "Update pop-up" BetaPopUp = "Beta pop-up" LEDColor = "LED color" +ExamModeMode = "Mode" +ExamModeModeStandard = "Standard " +ExamModeModeNoSym = "No sym " +ExamModeModeDutch = "Dutch " ColorWhite = "White " ColorBlue = "Blue " ColorGreen = "Green " @@ -48,4 +51,3 @@ SymbolMultiplicationCross = "Cross " SymbolMultiplicationMiddleDot = "Dot " SymbolMultiplicationStar = "Star " SymbolMultiplicationAutoSymbol = "Auto " -SymbolicEnabled = "Symbolic calculation" \ No newline at end of file diff --git a/apps/settings/base.es.i18n b/apps/settings/base.es.i18n index bd100e830..2391a98e1 100644 --- a/apps/settings/base.es.i18n +++ b/apps/settings/base.es.i18n @@ -9,7 +9,6 @@ ComplexFormat = "Forma compleja" ExamMode = "Modo examen" ActivateExamMode = "Activar el modo examen" ExamModeActive = "Reactivar el modo examen" -ActivateDutchExamMode = "Activate Dutch exam mode" About = "Acerca" Degrees = "Grados " Gradians = "Gradianes " @@ -30,6 +29,10 @@ SerialNumber = "Número serie" UpdatePopUp = "Pop-up de actualización" BetaPopUp = "Beta pop-up" LEDColor = "Color del LED" +ExamModeMode = "Modo" +ExamModeModeStandard = "Estándar " +ExamModeModeNoSym = "Sin simbólico " +ExamModeModeDutch = "Holandés " ColorWhite = "Blanco " ColorBlue = "Azul " ColorGreen = "Verde " @@ -48,4 +51,3 @@ SymbolMultiplicationCross = "Contrariar " SymbolMultiplicationMiddleDot = "Punto " SymbolMultiplicationStar = "Estrella " SymbolMultiplicationAutoSymbol = "Auto " -SymbolicEnabled = "Cálculo simbólico" \ No newline at end of file diff --git a/apps/settings/base.fr.i18n b/apps/settings/base.fr.i18n index 3e87a529c..775786ed3 100644 --- a/apps/settings/base.fr.i18n +++ b/apps/settings/base.fr.i18n @@ -9,7 +9,6 @@ ComplexFormat = "Forme complexe" ExamMode = "Mode examen" ActivateExamMode = "Activer le mode examen" ExamModeActive = "Réactiver le mode examen" -ActivateDutchExamMode = "Activate Dutch exam mode" About = "À propos" Degrees = "Degrés " Gradians = "Grades " @@ -30,6 +29,10 @@ SerialNumber = "Numéro série" UpdatePopUp = "Rappel mise à jour" BetaPopUp = "Rappel version bêta" LEDColor = "Couleur LED" +ExamModeMode = "Mode" +ExamModeModeStandard = "Standard " +ExamModeModeNoSym = "Sans symbolique " +ExamModeModeDutch = "Néerlandais " ColorWhite = "Blanc " ColorBlue = "Bleu " ColorGreen = "Vert " @@ -48,4 +51,3 @@ SymbolMultiplicationCross = "Croix" SymbolMultiplicationMiddleDot = "Point" SymbolMultiplicationStar = "Etoile" SymbolMultiplicationAutoSymbol = "Automatique" -SymbolicEnabled = "Calcul symbolique" diff --git a/apps/settings/base.pt.i18n b/apps/settings/base.pt.i18n index cfff892d8..c7f1f6419 100644 --- a/apps/settings/base.pt.i18n +++ b/apps/settings/base.pt.i18n @@ -9,7 +9,6 @@ ComplexFormat = "Complexos" ExamMode = "Modo de exame" ActivateExamMode = "Ativar o modo de exame" ExamModeActive = "Reativar o modo de exame" -ActivateDutchExamMode = "Activate Dutch exam mode" About = "Acerca" Degrees = "Graus " Gradians = "Grados " @@ -30,6 +29,10 @@ SerialNumber = "Número serie" UpdatePopUp = "Alertas de atualização" BetaPopUp = "Beta pop-up" LEDColor = "Cor LED" +ExamModeMode = "Modo" +ExamModeModeStandard = "Padrão " +ExamModeModeNoSym = "Sem simbólico " +ExamModeModeDutch = "Holandês " ColorWhite = "Branco " ColorBlue = "Azul " ColorGreen = "Verde " @@ -48,4 +51,3 @@ SymbolMultiplicationCross = "crómio" SymbolMultiplicationMiddleDot = "ponto médio" SymbolMultiplicationStar = "estrela" SymbolMultiplicationAutoSymbol = "automático" -SymbolicEnabled = "Cálculo simbólico" diff --git a/apps/settings/main_controller_prompt_beta.cpp b/apps/settings/main_controller_prompt_beta.cpp index d3528fafa..a0cd43ae2 100644 --- a/apps/settings/main_controller_prompt_beta.cpp +++ b/apps/settings/main_controller_prompt_beta.cpp @@ -5,16 +5,17 @@ namespace Settings { //sub-sub-menus constexpr SettingsMessageTree s_ledColorChildren[4] = {SettingsMessageTree(I18n::Message::ColorWhite), SettingsMessageTree(I18n::Message::ColorGreen), SettingsMessageTree(I18n::Message::ColorBlue), SettingsMessageTree(I18n::Message::ColorYellow)}; +constexpr SettingsMessageTree s_examModeMode[3] = {SettingsMessageTree(I18n::Message::ExamModeModeStandard), SettingsMessageTree(I18n::Message::ExamModeModeNoSym), SettingsMessageTree(I18n::Message::ExamModeModeDutch)}; constexpr SettingsMessageTree s_contributorsChildren[5] = {SettingsMessageTree(I18n::Message::QuentinGuidee), SettingsMessageTree(I18n::Message::DannySimmons), SettingsMessageTree(I18n::Message::JoachimLeFournis), SettingsMessageTree(I18n::Message::JeanBaptisteBoric), SettingsMessageTree(I18n::Message::MaximeFriess)}; constexpr SettingsMessageTree s_modelAngleChildren[3] = {SettingsMessageTree(I18n::Message::Degrees), SettingsMessageTree(I18n::Message::Radian), SettingsMessageTree(I18n::Message::Gradians)}; constexpr SettingsMessageTree s_modelEditionModeChildren[2] = {SettingsMessageTree(I18n::Message::Edition2D), SettingsMessageTree(I18n::Message::EditionLinear)}; constexpr SettingsMessageTree s_modelFloatDisplayModeChildren[4] = {SettingsMessageTree(I18n::Message::Decimal), SettingsMessageTree(I18n::Message::Scientific), SettingsMessageTree(I18n::Message::Engineering), SettingsMessageTree(I18n::Message::SignificantFigures)}; constexpr SettingsMessageTree s_modelComplexFormatChildren[3] = {SettingsMessageTree(I18n::Message::Real), SettingsMessageTree(I18n::Message::Cartesian), SettingsMessageTree(I18n::Message::Polar)}; -constexpr SettingsMessageTree s_symbolChildren[4] = {SettingsMessageTree(I18n::Message::SymbolMultiplicationCross), SettingsMessageTree(I18n::Message::SymbolMultiplicationMiddleDot), SettingsMessageTree(I18n::Message::SymbolMultiplicationStar), SettingsMessageTree(I18n::Message::SymbolMultiplicationAutoSymbol)}; +constexpr SettingsMessageTree s_symbolChildren[4] = {SettingsMessageTree(I18n::Message::SymbolMultiplicationCross),SettingsMessageTree(I18n::Message::SymbolMultiplicationMiddleDot),SettingsMessageTree(I18n::Message::SymbolMultiplicationStar),SettingsMessageTree(I18n::Message::SymbolMultiplicationAutoSymbol)}; //sub-menus constexpr SettingsMessageTree s_modelMathOptionsChildren[5] = {SettingsMessageTree(I18n::Message::AngleUnit, s_modelAngleChildren, 3), SettingsMessageTree(I18n::Message::DisplayMode, s_modelFloatDisplayModeChildren, 4), SettingsMessageTree(I18n::Message::EditionMode, s_modelEditionModeChildren, 2), SettingsMessageTree(I18n::Message::ComplexFormat, s_modelComplexFormatChildren, 3), SettingsMessageTree(I18n::Message::SymbolMultiplication, s_symbolChildren, 4)}; -constexpr SettingsMessageTree s_modelExamChildren[4] = {SettingsMessageTree(I18n::Message::LEDColor, s_ledColorChildren, 4), SettingsMessageTree(I18n::Message::SymbolicEnabled), SettingsMessageTree(I18n::Message::ActivateExamMode), SettingsMessageTree(I18n::Message::ActivateDutchExamMode)}; +constexpr SettingsMessageTree s_modelExamChildren[3] = {SettingsMessageTree(I18n::Message::LEDColor, s_ledColorChildren, 4), SettingsMessageTree(I18n::Message::ExamModeMode, s_examModeMode, 3), SettingsMessageTree(I18n::Message::ActivateExamMode)}; 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)}; #ifdef USERNAME constexpr SettingsMessageTree s_modelAboutChildren[7] = {SettingsMessageTree(I18n::Message::Username), SettingsMessageTree(I18n::Message::SoftwareVersion), SettingsMessageTree(I18n::Message::CustomSoftwareVersion), SettingsMessageTree(I18n::Message::MicroPythonVersion), SettingsMessageTree(I18n::Message::SerialNumber), SettingsMessageTree(I18n::Message::FccId), SettingsMessageTree(I18n::Message::Contributors, s_contributorsChildren, 5)}; diff --git a/apps/settings/main_controller_prompt_none.cpp b/apps/settings/main_controller_prompt_none.cpp index f9f4c2431..4c37fbf39 100644 --- a/apps/settings/main_controller_prompt_none.cpp +++ b/apps/settings/main_controller_prompt_none.cpp @@ -6,6 +6,7 @@ namespace Settings { // TODO: factorize most parts of the final models with main_controller_prompt_beta and main_controller_prompt_update //sub-sub-menus constexpr SettingsMessageTree s_ledColorChildren[4] = {SettingsMessageTree(I18n::Message::ColorWhite), SettingsMessageTree(I18n::Message::ColorGreen), SettingsMessageTree(I18n::Message::ColorBlue), SettingsMessageTree(I18n::Message::ColorYellow)}; +constexpr SettingsMessageTree s_examModeMode[3] = {SettingsMessageTree(I18n::Message::ExamModeModeStandard), SettingsMessageTree(I18n::Message::ExamModeModeNoSym), SettingsMessageTree(I18n::Message::ExamModeModeDutch)}; constexpr SettingsMessageTree s_contributorsChildren[5] = {SettingsMessageTree(I18n::Message::QuentinGuidee), SettingsMessageTree(I18n::Message::DannySimmons), SettingsMessageTree(I18n::Message::JoachimLeFournis), SettingsMessageTree(I18n::Message::JeanBaptisteBoric), SettingsMessageTree(I18n::Message::MaximeFriess)}; constexpr SettingsMessageTree s_modelAngleChildren[3] = {SettingsMessageTree(I18n::Message::Degrees), SettingsMessageTree(I18n::Message::Radian), SettingsMessageTree(I18n::Message::Gradians)}; constexpr SettingsMessageTree s_modelEditionModeChildren[2] = {SettingsMessageTree(I18n::Message::Edition2D), SettingsMessageTree(I18n::Message::EditionLinear)}; @@ -15,7 +16,7 @@ constexpr SettingsMessageTree s_symbolChildren[4] = {SettingsMessageTree(I18n::M //sub-menus constexpr SettingsMessageTree s_modelMathOptionsChildren[5] = {SettingsMessageTree(I18n::Message::AngleUnit, s_modelAngleChildren, 3), SettingsMessageTree(I18n::Message::DisplayMode, s_modelFloatDisplayModeChildren, 4), SettingsMessageTree(I18n::Message::EditionMode, s_modelEditionModeChildren, 2), SettingsMessageTree(I18n::Message::ComplexFormat, s_modelComplexFormatChildren, 3), SettingsMessageTree(I18n::Message::SymbolMultiplication, s_symbolChildren, 4)}; -constexpr SettingsMessageTree s_modelExamChildren[4] = {SettingsMessageTree(I18n::Message::LEDColor, s_ledColorChildren, 4), SettingsMessageTree(I18n::Message::SymbolicEnabled), SettingsMessageTree(I18n::Message::ActivateExamMode), SettingsMessageTree(I18n::Message::ActivateDutchExamMode)}; +constexpr SettingsMessageTree s_modelExamChildren[3] = {SettingsMessageTree(I18n::Message::LEDColor, s_ledColorChildren, 4), SettingsMessageTree(I18n::Message::ExamModeMode, s_examModeMode, 3), SettingsMessageTree(I18n::Message::ActivateExamMode)}; 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)}; #ifdef USERNAME constexpr SettingsMessageTree s_modelAboutChildren[7] = {SettingsMessageTree(I18n::Message::Username), SettingsMessageTree(I18n::Message::SoftwareVersion), SettingsMessageTree(I18n::Message::CustomSoftwareVersion), SettingsMessageTree(I18n::Message::MicroPythonVersion), SettingsMessageTree(I18n::Message::SerialNumber), SettingsMessageTree(I18n::Message::FccId), SettingsMessageTree(I18n::Message::Contributors, s_contributorsChildren, 5)}; @@ -27,7 +28,7 @@ constexpr SettingsMessageTree s_modelMenu[] = {SettingsMessageTree(I18n::Message::MathOptions, s_modelMathOptionsChildren, 5), SettingsMessageTree(I18n::Message::Brightness), SettingsMessageTree(I18n::Message::Language), - SettingsMessageTree(I18n::Message::ExamMode, s_modelExamChildren, 4), + SettingsMessageTree(I18n::Message::ExamMode, s_modelExamChildren, 3), SettingsMessageTree(I18n::Message::Accessibility, s_accessibilityChildren, 6), #ifdef USERNAME SettingsMessageTree(I18n::Message::About, s_modelAboutChildren, 7)}; diff --git a/apps/settings/main_controller_prompt_update.cpp b/apps/settings/main_controller_prompt_update.cpp index a929483b2..3e70547ff 100644 --- a/apps/settings/main_controller_prompt_update.cpp +++ b/apps/settings/main_controller_prompt_update.cpp @@ -5,6 +5,7 @@ namespace Settings { //sub-sub-menus constexpr SettingsMessageTree s_ledColorChildren[4] = {SettingsMessageTree(I18n::Message::ColorWhite), SettingsMessageTree(I18n::Message::ColorGreen), SettingsMessageTree(I18n::Message::ColorBlue), SettingsMessageTree(I18n::Message::ColorYellow)}; +constexpr SettingsMessageTree s_examModeMode[3] = {SettingsMessageTree(I18n::Message::ExamModeModeStandard), SettingsMessageTree(I18n::Message::ExamModeModeNoSym), SettingsMessageTree(I18n::Message::ExamModeModeDutch)}; constexpr SettingsMessageTree s_contributorsChildren[5] = {SettingsMessageTree(I18n::Message::QuentinGuidee), SettingsMessageTree(I18n::Message::DannySimmons), SettingsMessageTree(I18n::Message::JoachimLeFournis), SettingsMessageTree(I18n::Message::JeanBaptisteBoric), SettingsMessageTree(I18n::Message::MaximeFriess)}; constexpr SettingsMessageTree s_modelAngleChildren[3] = {SettingsMessageTree(I18n::Message::Degrees), SettingsMessageTree(I18n::Message::Radian), SettingsMessageTree(I18n::Message::Gradians)}; constexpr SettingsMessageTree s_modelEditionModeChildren[2] = {SettingsMessageTree(I18n::Message::Edition2D), SettingsMessageTree(I18n::Message::EditionLinear)}; @@ -14,7 +15,7 @@ constexpr SettingsMessageTree s_symbolChildren[4] = {SettingsMessageTree(I18n::M //sub-menus constexpr SettingsMessageTree s_modelMathOptionsChildren[5] = {SettingsMessageTree(I18n::Message::AngleUnit, s_modelAngleChildren, 3), SettingsMessageTree(I18n::Message::DisplayMode, s_modelFloatDisplayModeChildren, 4), SettingsMessageTree(I18n::Message::EditionMode, s_modelEditionModeChildren, 2), SettingsMessageTree(I18n::Message::ComplexFormat, s_modelComplexFormatChildren, 3), SettingsMessageTree(I18n::Message::SymbolMultiplication, s_symbolChildren, 4)}; -constexpr SettingsMessageTree s_modelExamChildren[4] = {SettingsMessageTree(I18n::Message::LEDColor, s_ledColorChildren, 4), SettingsMessageTree(I18n::Message::SymbolicEnabled), SettingsMessageTree(I18n::Message::ActivateExamMode), SettingsMessageTree(I18n::Message::ActivateDutchExamMode)}; +constexpr SettingsMessageTree s_modelExamChildren[3] = {SettingsMessageTree(I18n::Message::LEDColor, s_ledColorChildren, 4), SettingsMessageTree(I18n::Message::ExamModeMode, s_examModeMode, 3), SettingsMessageTree(I18n::Message::ActivateExamMode)}; 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)}; #ifdef USERNAME constexpr SettingsMessageTree s_modelAboutChildren[7] = {SettingsMessageTree(I18n::Message::Username), SettingsMessageTree(I18n::Message::SoftwareVersion), SettingsMessageTree(I18n::Message::CustomSoftwareVersion), SettingsMessageTree(I18n::Message::MicroPythonVersion), SettingsMessageTree(I18n::Message::SerialNumber), SettingsMessageTree(I18n::Message::FccId), SettingsMessageTree(I18n::Message::Contributors, s_contributorsChildren, 5)}; diff --git a/apps/settings/sub_menu/exam_mode_controller.cpp b/apps/settings/sub_menu/exam_mode_controller.cpp index e05056066..0909bc6f6 100644 --- a/apps/settings/sub_menu/exam_mode_controller.cpp +++ b/apps/settings/sub_menu/exam_mode_controller.cpp @@ -17,23 +17,12 @@ ExamModeController::ExamModeController(Responder * parentResponder) : m_preferencesController(this), m_examModeCell(I18n::Message::Default, KDFont::LargeFont), m_ledCell(KDFont::LargeFont, KDFont::SmallFont), - m_symbolicCell(I18n::Message::SymbolicEnabled, KDFont::LargeFont), - m_cell{ MessageTableCell(I18n::Message::ExamModeActive, KDFont::LargeFont), MessageTableCell(I18n::Message::ActivateDutchExamMode, KDFont::LargeFont) } + m_modeCell(KDFont::LargeFont, KDFont::SmallFont) { } -int ExamModeController::initialSelectedRow() const { - int row = selectedRow(); - if (row >= numberOfRows()) { - return numberOfRows()-1; - } else if (row < 0) { - return 0; - } - return row; -} - bool ExamModeController::handleEvent(Ion::Events::Event event) { - I18n::Message childLabel = m_messageTreeModel->children(selectedRow())->label(); +I18n::Message childLabel = m_messageTreeModel->children(selectedRow())->label(); if (event == Ion::Events::OK || event == Ion::Events::EXE || event == Ion::Events::Right) { if (GlobalPreferences::sharedGlobalPreferences()->isInExamMode()) { // If the exam mode is already on, this re-activate the same exam mode @@ -41,72 +30,43 @@ bool ExamModeController::handleEvent(Ion::Events::Event event) { if (childLabel == I18n::Message::ActivateExamMode || childLabel == I18n::Message::ExamModeActive) AppsContainer::sharedAppsContainer()->displayExamModePopUp(mode); return true; - } else if (childLabel == I18n::Message::ActivateDutchExamMode) { - GlobalPreferences::ExamMode mode = GlobalPreferences::ExamMode::Dutch; - if (childLabel == I18n::Message::ActivateExamMode || childLabel == I18n::Message::ExamModeActive) - AppsContainer::sharedAppsContainer()->displayExamModePopUp(mode); - return true; } + if (childLabel == I18n::Message::ActivateExamMode || childLabel == I18n::Message::ExamModeActive) { - AppsContainer::sharedAppsContainer()->displayExamModePopUp(GlobalPreferences::sharedGlobalPreferences()->examMode()); + GlobalPreferences::ExamMode mode = GlobalPreferences::ExamMode::Standard; + AppsContainer::sharedAppsContainer()->displayExamModePopUp(GlobalPreferences::sharedGlobalPreferences()->tempExamMode()); return true; } - if (childLabel == I18n::Message::LEDColor) { + if (childLabel == I18n::Message::LEDColor || childLabel == I18n::Message::ExamModeMode) { GenericSubController * subController = &m_preferencesController; subController->setMessageTreeModel(m_messageTreeModel->children(selectedRow())); StackViewController * stack = stackController(); stack->push(subController); return true; } - if (childLabel == I18n::Message::SymbolicEnabled) { - Preferences * preferences = Preferences::sharedPreferences(); - preferences->setExamSymbolic(!preferences->isExamSymbolic()); - m_selectableTableView.reloadData(); - return true; - } } return GenericSubController::handleEvent(event); } -int ExamModeController::numberOfRows() const { - if (GlobalPreferences::sharedGlobalPreferences()->language() != I18n::Language::EN || GlobalPreferences::sharedGlobalPreferences()->isInExamMode()) { - return 1; - } - return GenericSubController::numberOfRows(); -} - HighlightCell * ExamModeController::reusableCell(int index, int type) { - assert(index == 0); - if (type == 0) { - return &m_ledCell; + assert(type == 0); + assert(index >= 0 && index < 3); + + switch(index) { + case 0: + return &m_ledCell; + case 1: + return &m_modeCell; + case 2: + return &m_examModeCell; } - if (type == 1) { - return &m_symbolicCell; - } - return &m_examModeCell; } int ExamModeController::reusableCellCount(int type) { - switch (type) { - case 0: - return 1; - case 1: - return 1; - case 2: - return 1; - default: - assert(false); - return 0; - } - /*assert(type == 0); - assert(index >= 0 && index < k_maxNumberOfCells); - return &m_cell[index];*/ + assert(type == 0); + return 3; } -/*int ExamModeController::reusableCellCount(int type) { - return k_maxNumberOfCells; -}*/ - void ExamModeController::willDisplayCellForIndex(HighlightCell * cell, int index) { Preferences * preferences = Preferences::sharedPreferences(); GenericSubController::willDisplayCellForIndex(cell, index); @@ -121,24 +81,10 @@ void ExamModeController::willDisplayCellForIndex(HighlightCell * cell, int index I18n::Message message = (I18n::Message) m_messageTreeModel->children(index)->children((int)preferences->colorOfLED())->label(); myTextCell->setSubtitle(message); } - if (thisLabel == I18n::Message::SymbolicEnabled) { - MessageTableCellWithSwitch * mySwitchCell = (MessageTableCellWithSwitch *)cell; - SwitchView * mySwitch = (SwitchView *)mySwitchCell->accessoryView(); - mySwitch->setState(preferences->isExamSymbolic()); - } -} - -int ExamModeController::typeAtLocation(int i, int j) { - switch (j) { - case 0: - return 0; - case 1: - return 1; - case 2: - return 2; - default: - assert(false); - return 0; + if (thisLabel == I18n::Message::ExamModeMode) { + MessageTableCellWithChevronAndMessage * myTextCell = (MessageTableCellWithChevronAndMessage *)cell; + I18n::Message message = (I18n::Message) m_messageTreeModel->children(index)->children((uint8_t)GlobalPreferences::sharedGlobalPreferences()->tempExamMode() - 1)->label(); + myTextCell->setSubtitle(message); } } diff --git a/apps/settings/sub_menu/exam_mode_controller.h b/apps/settings/sub_menu/exam_mode_controller.h index 149799207..e2e7bb505 100644 --- a/apps/settings/sub_menu/exam_mode_controller.h +++ b/apps/settings/sub_menu/exam_mode_controller.h @@ -10,19 +10,14 @@ class ExamModeController : public GenericSubController { public: ExamModeController(Responder * parentResponder); bool handleEvent(Ion::Events::Event event) override; - int numberOfRows() const override; HighlightCell * reusableCell(int index, int type) override; int reusableCellCount(int type) override; void willDisplayCellForIndex(HighlightCell * cell, int index) override; - int typeAtLocation(int i, int j) override; private: MessageTableCell m_examModeCell; MessageTableCellWithChevronAndMessage m_ledCell; + MessageTableCellWithChevronAndMessage m_modeCell; PreferencesController m_preferencesController; - MessageTableCellWithSwitch m_symbolicCell; - int initialSelectedRow() const override; - static constexpr int k_maxNumberOfCells = 2; - MessageTableCell m_cell[k_maxNumberOfCells]; }; } diff --git a/apps/settings/sub_menu/preferences_controller.cpp b/apps/settings/sub_menu/preferences_controller.cpp index 11e6364c8..62921e49a 100644 --- a/apps/settings/sub_menu/preferences_controller.cpp +++ b/apps/settings/sub_menu/preferences_controller.cpp @@ -128,6 +128,24 @@ Layout PreferencesController::layoutForPreferences(I18n::Message message) { const char * text = " "; return LayoutHelper::String(text, strlen(text), k_layoutFont); } + + // Exam mode modes + case I18n::Message::ExamModeModeStandard: + { + const char * text = " "; + return LayoutHelper::String(text, strlen(text), k_layoutFont); + } + case I18n::Message::ExamModeModeNoSym: + { + const char * text = " "; + return LayoutHelper::String(text, strlen(text), k_layoutFont); + } + case I18n::Message::ExamModeModeDutch: + { + const char * text = " "; + return LayoutHelper::String(text, strlen(text), k_layoutFont); + } + // Symbol controller case I18n::Message::SymbolMultiplicationCross: // × and · aren't single characters, so they cannot be constructed into codepoints..? @@ -182,6 +200,8 @@ void PreferencesController::setPreferenceWithValueIndex(I18n::Message message, i preferences->setComplexFormat((Preferences::ComplexFormat)valueIndex); } else if (message == I18n::Message::LEDColor) { preferences->setColorOfLED((Preferences::LEDColor)valueIndex); + } else if (message == I18n::Message::ExamModeMode) { + GlobalPreferences::sharedGlobalPreferences()->setTempExamMode((GlobalPreferences::ExamMode)((uint8_t)valueIndex + 1)); } else if (message == I18n::Message::SymbolMultiplication) { preferences->setSymbolMultiplication((Preferences::SymbolMultiplication)valueIndex); } diff --git a/apps/title_bar_view.cpp b/apps/title_bar_view.cpp index f37e4f4ba..b818db873 100644 --- a/apps/title_bar_view.cpp +++ b/apps/title_bar_view.cpp @@ -85,7 +85,7 @@ void TitleBarView::refreshPreferences() { char buffer[bufferSize]; int numberOfChar = 0; Preferences * preferences = Preferences::sharedPreferences(); - if (GlobalPreferences::sharedGlobalPreferences()->isInExamMode() && Preferences::sharedPreferences()->isExamSymbolic()) { + if (GlobalPreferences::sharedGlobalPreferences()->isInExamModeSymbolic()) { // Display "cas" if in exam mode with symbolic computation enabled numberOfChar += strlcpy(buffer+numberOfChar, I18n::translate(I18n::Message::Sym), bufferSize - numberOfChar); assert(numberOfChar < bufferSize-1); diff --git a/ion/src/device/n0110/drivers/led.cpp b/ion/src/device/n0110/drivers/led.cpp index 9990bdc41..28d425096 100644 --- a/ion/src/device/n0110/drivers/led.cpp +++ b/ion/src/device/n0110/drivers/led.cpp @@ -9,7 +9,7 @@ namespace LED { KDColor updateColorWithPlugAndCharge() { KDColor ledColor = getColor(); - if (GlobalPreferences::sharedGlobalPreferences()->isInExamMode()) { // If exam mode is on, we do not update the LED with the plugged/charging state + if (!GlobalPreferences::sharedGlobalPreferences()->isInExamMode()) { // If exam mode is on, we do not update the LED with the plugged/charging state if (USB::isPlugged()) { ledColor = Battery::isCharging() ? KDColorOrange : KDColorGreen; } else { diff --git a/ion/src/device/shared/drivers/exam_mode.cpp b/ion/src/device/shared/drivers/exam_mode.cpp index a4aa20143..326480d5e 100644 --- a/ion/src/device/shared/drivers/exam_mode.cpp +++ b/ion/src/device/shared/drivers/exam_mode.cpp @@ -18,12 +18,13 @@ char ones[Config::ExamModeBufferSize] /* The exam mode is written in flash so that it is resilient to resets. * We erase the dedicated flash sector (all bits written to 1) and, upon - * deactivating or activating standard or Dutch exam mode we write one or two + * deactivating or activating standard, nosym or Dutch exam mode we write one, two or tree * bits to 0. To determine in which exam mode we are, we count the number of * leading 0 bits. If it is equal to: * - 0[3]: the exam mode is off; * - 1[3]: the standard exam mode is activated; - * - 2[3]: the Dutch exam mode is activated. */ + * - 2[3]: the NoSym exam mode is activated. + * - 3[3]: the Dutch exam mode is activated. */ /* significantExamModeAddress returns the first uint32_t * in the exam mode * flash sector that does not point to 0. If this flash sector has only 0s or @@ -76,14 +77,14 @@ uint8_t * SignificantExamModeAddress() { uint8_t FetchExamMode() { uint8_t * readingAddress = SignificantExamModeAddress(); // Count the number of 0[3] before reading address - uint32_t nbOfZerosBefore = ((readingAddress - (uint8_t *)&_exam_mode_buffer_start) * numberOfBitsInByte) % 3; + uint32_t nbOfZerosBefore = ((readingAddress - (uint8_t *)&_exam_mode_buffer_start) * numberOfBitsInByte) % 4; // Count the number of 0[3] at reading address - size_t numberOfLeading0 = (numberOfBitsInByte - numberOfBitsAfterLeadingZeroes(*readingAddress)) % 3; - return (nbOfZerosBefore + numberOfLeading0) % 3; + size_t numberOfLeading0 = (numberOfBitsInByte - numberOfBitsAfterLeadingZeroes(*readingAddress)) % 4; + return (nbOfZerosBefore + numberOfLeading0) % 4; } void IncrementExamMode(uint8_t delta) { - assert(delta == 1 || delta == 2); + assert(delta == 1 || delta == 2 || delta == 3); uint8_t * writingAddress = SignificantExamModeAddress(); assert(*writingAddress != 0); size_t nbOfTargetedOnes = numberOfBitsAfterLeadingZeroes(*writingAddress); diff --git a/poincare/include/poincare/preferences.h b/poincare/include/poincare/preferences.h index 32e60041d..95505cf55 100644 --- a/poincare/include/poincare/preferences.h +++ b/poincare/include/poincare/preferences.h @@ -64,8 +64,6 @@ public: void setColorOfLED(LEDColor color) { m_colorOfLED = color; } SymbolMultiplication symbolofMultiplication() const {return m_symbolMultiplication;} void setSymbolMultiplication(SymbolMultiplication symbolofMultiplication) {m_symbolMultiplication = symbolofMultiplication;} - bool isExamSymbolic() const {return m_examSymbolic;} - void setExamSymbolic(bool examSymbolic) {m_examSymbolic = examSymbolic;} private: AngleUnit m_angleUnit; PrintFloatMode m_displayMode; @@ -74,7 +72,6 @@ private: uint8_t m_numberOfSignificantDigits; LEDColor m_colorOfLED; SymbolMultiplication m_symbolMultiplication; - bool m_examSymbolic; }; } diff --git a/poincare/src/preferences.cpp b/poincare/src/preferences.cpp index 03ced1ee6..4cdb0613f 100644 --- a/poincare/src/preferences.cpp +++ b/poincare/src/preferences.cpp @@ -14,8 +14,7 @@ Preferences::Preferences() : m_complexFormat(Preferences::ComplexFormat::Real), m_numberOfSignificantDigits(PrintFloat::k_numberOfPrintedSignificantDigits), m_colorOfLED(Preferences::LEDColor::White), - m_symbolMultiplication(Preferences::SymbolMultiplication::Auto), - m_examSymbolic(true) + m_symbolMultiplication(Preferences::SymbolMultiplication::Auto) {} Preferences * Preferences::sharedPreferences() {