mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-19 00:37:25 +01:00
[apps/settings] Create a class SelectableViewWithMessages used in
ExamModeController for future factorization
This commit is contained in:
@@ -12,6 +12,7 @@ app_settings_src = $(addprefix apps/settings/,\
|
||||
sub_menu/generic_sub_controller.cpp \
|
||||
sub_menu/language_controller.cpp \
|
||||
sub_menu/preferences_controller.cpp \
|
||||
sub_menu/selectable_view_with_messages.cpp \
|
||||
)
|
||||
|
||||
app_src += $(app_settings_src)
|
||||
|
||||
@@ -10,59 +10,6 @@ using namespace Shared;
|
||||
|
||||
namespace Settings {
|
||||
|
||||
ExamModeController::ContentView::ContentView(SelectableTableView * selectableTableView) :
|
||||
m_selectableTableView(selectableTableView)
|
||||
{
|
||||
for (int i = 0; i < k_maxNumberOfLines; i++) {
|
||||
m_messageLines[i].setFont(KDFont::SmallFont);
|
||||
m_messageLines[i].setAlignment(0.5f, 0.5f);
|
||||
m_messageLines[i].setBackgroundColor(Palette::WallScreen);
|
||||
}
|
||||
}
|
||||
|
||||
void ExamModeController::ContentView::drawRect(KDContext * ctx, KDRect rect) const {
|
||||
ctx->fillRect(bounds(), Palette::WallScreen);
|
||||
}
|
||||
|
||||
void ExamModeController::ContentView::setMessages(I18n::Message m[k_maxNumberOfLines]) {
|
||||
for (int i = 0; i < k_maxNumberOfLines; i++) {
|
||||
m_messageLines[i].setMessage(m[i]);
|
||||
}
|
||||
layoutSubviews();
|
||||
}
|
||||
|
||||
View * ExamModeController::ContentView::subviewAtIndex(int index) {
|
||||
assert(index >= 0 && index < numberOfSubviews());
|
||||
if (index == 0) {
|
||||
return m_selectableTableView;
|
||||
}
|
||||
return &m_messageLines[index-1];
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
int nbOfMessages = numberOfMessages();
|
||||
|
||||
// Layout the text
|
||||
KDCoordinate textHeight = KDFont::SmallFont->glyphSize().height();
|
||||
KDCoordinate defOrigin = tableHeight + (bounds().height() - tableHeight - nbOfMessages*textHeight - Metric::CommonTopMargin)/2;
|
||||
|
||||
for (int i = 0; i < nbOfMessages; i++) {
|
||||
m_messageLines[i].setFrame(KDRect(0, defOrigin, bounds().width(), textHeight), force);
|
||||
defOrigin += textHeight;
|
||||
}
|
||||
for (int i = nbOfMessages; i < k_maxNumberOfLines; i++) {
|
||||
m_messageLines[i].setFrame(KDRectZero, force);
|
||||
}
|
||||
}
|
||||
|
||||
int ExamModeController::ContentView::numberOfMessages() const {
|
||||
return GlobalPreferences::sharedGlobalPreferences()->isInExamMode() ? k_numberOfDeactivationMessageLines : numberOfCautionLines();
|
||||
}
|
||||
|
||||
ExamModeController::ExamModeController(Responder * parentResponder) :
|
||||
GenericSubController(parentResponder),
|
||||
m_contentView(&m_selectableTableView),
|
||||
@@ -86,11 +33,11 @@ void ExamModeController::didEnterResponderChain(Responder * previousFirstRespond
|
||||
m_selectableTableView.reloadData();
|
||||
// We add a message when the mode exam is on
|
||||
if (GlobalPreferences::sharedGlobalPreferences()->isInExamMode()) {
|
||||
I18n::Message deactivateMessages[] = {I18n::Message::ToDeactivateExamMode1, I18n::Message::ToDeactivateExamMode2, I18n::Message::ToDeactivateExamMode3, I18n::Message::Default, I18n::Message::Default, I18n::Message::Default};
|
||||
m_contentView.setMessages(deactivateMessages);
|
||||
} else if (m_contentView.numberOfCautionLines() > 0) {
|
||||
I18n::Message deactivateMessages[] = {I18n::Message::ToDeactivateExamMode1, I18n::Message::ToDeactivateExamMode2, I18n::Message::ToDeactivateExamMode3};
|
||||
m_contentView.setMessages(deactivateMessages, k_numberOfDeactivationMessageLines);
|
||||
} else if (numberOfCautionLines() > 0) {
|
||||
I18n::Message cautionMessages[] = {I18n::Message::ExamModeWarning1, I18n::Message::ExamModeWarning2, I18n::Message::ExamModeWarning3, I18n::Message::ExamModeWarning4, I18n::Message::ExamModeWarning5, I18n::Message::ExamModeWarning6};
|
||||
m_contentView.setMessages(cautionMessages);
|
||||
m_contentView.setMessages(cautionMessages, numberOfCautionLines());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#define SETTINGS_EXAM_MODE_CONTROLLER_H
|
||||
|
||||
#include "generic_sub_controller.h"
|
||||
#include "selectable_view_with_messages.h"
|
||||
#include "../../global_preferences.h"
|
||||
|
||||
namespace Settings {
|
||||
@@ -17,26 +18,13 @@ public:
|
||||
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;
|
||||
static constexpr int k_maxNumberOfLines = 6;
|
||||
static constexpr int k_numberOfDeactivationMessageLines = 3;
|
||||
void setMessages(I18n::Message m[k_maxNumberOfLines]);
|
||||
int numberOfCautionLines() const;
|
||||
private:
|
||||
int numberOfMessages() const;
|
||||
int numberOfSubviews() const override { return 1 + numberOfMessages(); }
|
||||
View * subviewAtIndex(int index) override;
|
||||
void layoutSubviews(bool force = false) override;
|
||||
SelectableTableView * m_selectableTableView;
|
||||
MessageTextView m_messageLines[k_maxNumberOfLines];
|
||||
};
|
||||
static constexpr int k_numberOfDeactivationMessageLines = 3;
|
||||
static constexpr int k_numberOfCautionMessageLines = 6;
|
||||
int numberOfCautionLines() const;
|
||||
int initialSelectedRow() const override;
|
||||
GlobalPreferences::ExamMode examMode();
|
||||
static constexpr int k_maxNumberOfCells = 2;
|
||||
ContentView m_contentView;
|
||||
SelectableViewWithMessages m_contentView;
|
||||
MessageTableCell m_cell[k_maxNumberOfCells];
|
||||
};
|
||||
|
||||
|
||||
@@ -5,10 +5,6 @@ using namespace Shared;
|
||||
|
||||
namespace Settings {
|
||||
|
||||
int ExamModeController::ContentView::numberOfCautionLines() const {
|
||||
return k_maxNumberOfLines;
|
||||
}
|
||||
|
||||
GlobalPreferences::ExamMode ExamModeController::examMode() {
|
||||
return GlobalPreferences::ExamMode::Standard;
|
||||
}
|
||||
@@ -17,4 +13,8 @@ int ExamModeController::numberOfRows() const {
|
||||
return 1;
|
||||
}
|
||||
|
||||
int ExamModeController::numberOfCautionLines() const {
|
||||
return k_numberOfCautionMessageLines;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -5,10 +5,6 @@ using namespace Shared;
|
||||
|
||||
namespace Settings {
|
||||
|
||||
int ExamModeController::ContentView::numberOfCautionLines() const {
|
||||
return 0;
|
||||
}
|
||||
|
||||
GlobalPreferences::ExamMode ExamModeController::examMode() {
|
||||
GlobalPreferences::ExamMode mode = GlobalPreferences::ExamMode::Standard;
|
||||
if (GlobalPreferences::sharedGlobalPreferences()->isInExamMode()) {
|
||||
@@ -27,4 +23,8 @@ int ExamModeController::numberOfRows() const {
|
||||
return GenericSubController::numberOfRows();
|
||||
}
|
||||
|
||||
int ExamModeController::numberOfCautionLines() const {
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
58
apps/settings/sub_menu/selectable_view_with_messages.cpp
Normal file
58
apps/settings/sub_menu/selectable_view_with_messages.cpp
Normal file
@@ -0,0 +1,58 @@
|
||||
#include "selectable_view_with_messages.h"
|
||||
#include <apps/i18n.h>
|
||||
#include <assert.h>
|
||||
|
||||
using namespace Shared;
|
||||
|
||||
namespace Settings {
|
||||
|
||||
SelectableViewWithMessages::SelectableViewWithMessages(SelectableTableView * selectableTableView) :
|
||||
m_selectableTableView(selectableTableView)
|
||||
{
|
||||
for (int i = 0; i < k_maxNumberOfLines; i++) {
|
||||
m_messageLines[i].setFont(KDFont::SmallFont);
|
||||
m_messageLines[i].setAlignment(0.5f, 0.5f);
|
||||
m_messageLines[i].setBackgroundColor(Palette::WallScreen);
|
||||
}
|
||||
}
|
||||
|
||||
void SelectableViewWithMessages::drawRect(KDContext * ctx, KDRect rect) const {
|
||||
ctx->fillRect(bounds(), Palette::WallScreen);
|
||||
}
|
||||
|
||||
void SelectableViewWithMessages::setMessages(I18n::Message * m, int numberOfMessages) {
|
||||
assert(numberOfMessages <= k_maxNumberOfLines);
|
||||
m_numberOfMessages = numberOfMessages;
|
||||
for (int i = 0; i < m_numberOfMessages; i++) {
|
||||
m_messageLines[i].setMessage(m[i]);
|
||||
}
|
||||
layoutSubviews();
|
||||
}
|
||||
|
||||
View * SelectableViewWithMessages::subviewAtIndex(int index) {
|
||||
assert(index >= 0 && index < numberOfSubviews());
|
||||
if (index == 0) {
|
||||
return m_selectableTableView;
|
||||
}
|
||||
return &m_messageLines[index-1];
|
||||
}
|
||||
|
||||
void SelectableViewWithMessages::layoutSubviews(bool force) {
|
||||
// Layout the table view
|
||||
KDCoordinate tableHeight = m_selectableTableView->minimalSizeForOptimalDisplay().height();
|
||||
m_selectableTableView->setFrame(KDRect(0, 0, bounds().width(), tableHeight), force);
|
||||
|
||||
// Layout the text
|
||||
KDCoordinate textHeight = KDFont::SmallFont->glyphSize().height();
|
||||
KDCoordinate defOrigin = tableHeight + (bounds().height() - tableHeight - m_numberOfMessages*textHeight - Metric::CommonTopMargin)/2;
|
||||
|
||||
for (int i = 0; i < m_numberOfMessages; i++) {
|
||||
m_messageLines[i].setFrame(KDRect(0, defOrigin, bounds().width(), textHeight), force);
|
||||
defOrigin += textHeight;
|
||||
}
|
||||
for (int i = m_numberOfMessages; i < k_maxNumberOfLines; i++) {
|
||||
m_messageLines[i].setFrame(KDRectZero, force);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
26
apps/settings/sub_menu/selectable_view_with_messages.h
Normal file
26
apps/settings/sub_menu/selectable_view_with_messages.h
Normal file
@@ -0,0 +1,26 @@
|
||||
#ifndef SETTINGS_SELECTABLE_VIEW_WITH_MESSAGES_H
|
||||
#define SETTINGS_SELECTABLE_VIEW_WITH_MESSAGES_H
|
||||
|
||||
#include <escher/selectable_table_view.h>
|
||||
#include <apps/i18n.h>
|
||||
|
||||
namespace Settings {
|
||||
|
||||
class SelectableViewWithMessages : public View {
|
||||
public:
|
||||
SelectableViewWithMessages(SelectableTableView * selectableTableView);
|
||||
void drawRect(KDContext * ctx, KDRect rect) const override;
|
||||
void setMessages(I18n::Message * messages, int numberOfMessages);
|
||||
private:
|
||||
int numberOfSubviews() const override { return 1 + m_numberOfMessages; }
|
||||
View * subviewAtIndex(int index) override;
|
||||
void layoutSubviews(bool force = false) override;
|
||||
SelectableTableView * m_selectableTableView;
|
||||
static constexpr int k_maxNumberOfLines = 6;
|
||||
MessageTextView m_messageLines[k_maxNumberOfLines];
|
||||
int m_numberOfMessages;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user