mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-19 00:37:25 +01:00
Reworked exam mode, fixed #106
This commit is contained in:
@@ -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()) {
|
||||
|
||||
@@ -92,7 +92,7 @@ ExpiringPointer<Calculation> 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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
@@ -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"
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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)};
|
||||
|
||||
@@ -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)};
|
||||
|
||||
@@ -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)};
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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];
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user