From 22601fd8a3dbb7e8faf98362ea2db1b51f5c7faa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9a=20Saviot?= Date: Wed, 15 Jan 2020 16:08:41 +0100 Subject: [PATCH] [apps/settings/exam_mode] "How to deactivate" messages --- apps/settings/base.de.i18n | 3 + apps/settings/base.en.i18n | 3 + apps/settings/base.es.i18n | 3 + apps/settings/base.fr.i18n | 3 + apps/settings/base.pt.i18n | 3 + .../sub_menu/exam_mode_controller.cpp | 55 +++++++++++++++++++ apps/settings/sub_menu/exam_mode_controller.h | 17 ++++++ 7 files changed, 87 insertions(+) diff --git a/apps/settings/base.de.i18n b/apps/settings/base.de.i18n index 24153f83b..bc43d793f 100644 --- a/apps/settings/base.de.i18n +++ b/apps/settings/base.de.i18n @@ -10,6 +10,9 @@ ExamMode = "Testmodus" ActivateExamMode = "Starten Testmodus" ExamModeActive = "Wieder starten Testmodus" ActivateDutchExamMode = "Activate Dutch exam mode" +ToDeactivateExamMode1 = "Um den Testmodus auszuschalten," +ToDeactivateExamMode2 = "schließen Sie den Rechner an einen" +ToDeactivateExamMode3 = "Computer oder eine Steckdose an." About = "Über" Degrees = "Grad " Gradians = "Gone " diff --git a/apps/settings/base.en.i18n b/apps/settings/base.en.i18n index b3cfa8804..70dc01573 100644 --- a/apps/settings/base.en.i18n +++ b/apps/settings/base.en.i18n @@ -10,6 +10,9 @@ ExamMode = "Exam mode" ActivateExamMode = "Activate exam mode" ExamModeActive = "Reactivate exam mode" ActivateDutchExamMode = "Activate Dutch exam mode" +ToDeactivateExamMode1 = "To deactivate the exam mode," +ToDeactivateExamMode2 = "plug the calculator to a computer" +ToDeactivateExamMode3 = "or to a power socket." About = "About" Degrees = "Degrees " Gradians = "Gradians " diff --git a/apps/settings/base.es.i18n b/apps/settings/base.es.i18n index 72318ace0..bad802efe 100644 --- a/apps/settings/base.es.i18n +++ b/apps/settings/base.es.i18n @@ -10,6 +10,9 @@ ExamMode = "Modo examen" ActivateExamMode = "Activar el modo examen" ExamModeActive = "Reactivar el modo examen" ActivateDutchExamMode = "Activate Dutch exam mode" +ToDeactivateExamMode1 = "Para desactivar el modo examen," +ToDeactivateExamMode2 = "conecte la calculadora a un ordenador" +ToDeactivateExamMode3 = "o a un enchufe eléctrico." About = "Acerca" Degrees = "Grados " Gradians = "Gradianes " diff --git a/apps/settings/base.fr.i18n b/apps/settings/base.fr.i18n index 629984364..3814f6c60 100644 --- a/apps/settings/base.fr.i18n +++ b/apps/settings/base.fr.i18n @@ -10,6 +10,9 @@ ExamMode = "Mode examen" ActivateExamMode = "Activer le mode examen" ExamModeActive = "Réactiver le mode examen" ActivateDutchExamMode = "Activate Dutch exam mode" +ToDeactivateExamMode1 = "Pour désactiver le mode examen," +ToDeactivateExamMode2 = "brancher la calculatrice à un" +ToDeactivateExamMode3 = "ordinateur ou à une prise de courant." About = "À propos" Degrees = "Degrés " Gradians = "Grades " diff --git a/apps/settings/base.pt.i18n b/apps/settings/base.pt.i18n index 08d5e4b9e..2107861d5 100644 --- a/apps/settings/base.pt.i18n +++ b/apps/settings/base.pt.i18n @@ -10,6 +10,9 @@ ExamMode = "Modo de exame" ActivateExamMode = "Ativar o modo de exame" ExamModeActive = "Reativar o modo de exame" ActivateDutchExamMode = "Activate Dutch exam mode" +ToDeactivateExamMode1 = "Para desativar o modo de exame," +ToDeactivateExamMode2 = "ligue a calculadora a um computador" +ToDeactivateExamMode3 = "ou a uma tomada eléctrica." About = "Acerca" Degrees = "Graus " Gradians = "Grados " diff --git a/apps/settings/sub_menu/exam_mode_controller.cpp b/apps/settings/sub_menu/exam_mode_controller.cpp index 03a30422e..0ecb20e2e 100644 --- a/apps/settings/sub_menu/exam_mode_controller.cpp +++ b/apps/settings/sub_menu/exam_mode_controller.cpp @@ -10,8 +10,58 @@ using namespace Shared; namespace Settings { +ExamModeController::ContentView::ContentView(SelectableTableView * selectableTableView) : + m_selectableTableView(selectableTableView), + m_deactivateLine1(KDFont::SmallFont, I18n::Message::ToDeactivateExamMode1, 0.5f, 0.5f, KDColorBlack, Palette::WallScreen), + m_deactivateLine2(KDFont::SmallFont, I18n::Message::ToDeactivateExamMode2, 0.5f, 0.5f, KDColorBlack, Palette::WallScreen), + m_deactivateLine3(KDFont::SmallFont, I18n::Message::ToDeactivateExamMode3, 0.5f, 0.5f, KDColorBlack, Palette::WallScreen) +{ +} + +void ExamModeController::ContentView::drawRect(KDContext * ctx, KDRect rect) const { + ctx->fillRect(bounds(), Palette::WallScreen); +} + +View * ExamModeController::ContentView::subviewAtIndex(int index) { + assert(index >= 0 && index < 4); + if (index == 0) { + return m_selectableTableView; + } + assert(shouldDisplayDeactivateMessages()); + if (index == 1) { + return &m_deactivateLine1; + } + if (index == 2) { + return &m_deactivateLine2; + } + return &m_deactivateLine3; +} + +void ExamModeController::ContentView::layoutSubviews(bool force) { + // Layout the table view + KDCoordinate tableHeight = m_selectableTableView->minimalSizeForOptimalDisplay().height(); + m_selectableTableView->setFrame(KDRect(0, 0, bounds().width(), tableHeight), force); + + if (!shouldDisplayDeactivateMessages()) { + return; + } + + // Layout the text + KDCoordinate textHeight = KDFont::SmallFont->glyphSize().height(); + KDCoordinate defOrigin = tableHeight + (bounds().height() - tableHeight - 3*textHeight - Metric::CommonTopMargin)/2; + + m_deactivateLine1.setFrame(KDRect(0, defOrigin, bounds().width(), textHeight), force); + m_deactivateLine2.setFrame(KDRect(0, defOrigin + textHeight, bounds().width(), textHeight), force); + m_deactivateLine3.setFrame(KDRect(0, defOrigin + 2 * textHeight, bounds().width(), textHeight), force); +} + +bool ExamModeController::ContentView::shouldDisplayDeactivateMessages() const { + return GlobalPreferences::sharedGlobalPreferences()->isInExamMode(); +} + ExamModeController::ExamModeController(Responder * parentResponder) : GenericSubController(parentResponder), + m_contentView(&m_selectableTableView), m_cell{MessageTableCell(I18n::Message::ExamModeActive, KDFont::LargeFont), MessageTableCell(I18n::Message::ActivateDutchExamMode, KDFont::LargeFont)} { } @@ -41,6 +91,11 @@ bool ExamModeController::handleEvent(Ion::Events::Event event) { return GenericSubController::handleEvent(event); } +void ExamModeController::didEnterResponderChain(Responder * previousFirstResponder) { + GenericSubController::didEnterResponderChain(previousFirstResponder); + m_contentView.layoutSubviews(true); +} + int ExamModeController::numberOfRows() const { if (GlobalPreferences::sharedGlobalPreferences()->language() != I18n::Language::EN || GlobalPreferences::sharedGlobalPreferences()->isInExamMode()) { return 1; diff --git a/apps/settings/sub_menu/exam_mode_controller.h b/apps/settings/sub_menu/exam_mode_controller.h index 2627c7f29..2e184cbe9 100644 --- a/apps/settings/sub_menu/exam_mode_controller.h +++ b/apps/settings/sub_menu/exam_mode_controller.h @@ -8,14 +8,31 @@ namespace Settings { class ExamModeController : public GenericSubController { public: ExamModeController(Responder * parentResponder); + View * view() override { return &m_contentView; } bool handleEvent(Ion::Events::Event event) override; + void didEnterResponderChain(Responder * previousFirstResponder) override; int numberOfRows() const override; HighlightCell * reusableCell(int index, int type) override; int reusableCellCount(int type) override; void willDisplayCellForIndex(HighlightCell * cell, int index) override; private: + class ContentView : public View { + public: + ContentView(SelectableTableView * selectableTableView); + void drawRect(KDContext * ctx, KDRect rect) const override; + void layoutSubviews(bool force = false) override; + private: + bool shouldDisplayDeactivateMessages() const; + int numberOfSubviews() const override { return 1 + (shouldDisplayDeactivateMessages() ? 3 : 0); } + View * subviewAtIndex(int index) override; + SelectableTableView * m_selectableTableView; + MessageTextView m_deactivateLine1; + MessageTextView m_deactivateLine2; + MessageTextView m_deactivateLine3; + }; int initialSelectedRow() const override; static constexpr int k_maxNumberOfCells = 2; + ContentView m_contentView; MessageTableCell m_cell[k_maxNumberOfCells]; };