mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-03-18 21:30:38 +01:00
[apps/settings] Added country to settings
Refactored Settings::MainController::handleEvent Change-Id: Id8ad604183a64520dd785356514e87fddc50354c
This commit is contained in:
committed by
Émilie Feral
parent
1642276678
commit
51747d3d36
@@ -12,9 +12,10 @@ app_settings_src = $(addprefix apps/settings/,\
|
||||
sub_menu/about_controller.cpp \
|
||||
sub_menu/about_controller_official.cpp:+official \
|
||||
sub_menu/about_controller_non_official.cpp:-official \
|
||||
sub_menu/country_controller.cpp \
|
||||
sub_menu/display_mode_controller.cpp \
|
||||
sub_menu/exam_mode_controller_official.cpp:+official \
|
||||
sub_menu/exam_mode_controller_non_official.cpp:-official \
|
||||
sub_menu/display_mode_controller.cpp \
|
||||
sub_menu/exam_mode_controller.cpp \
|
||||
sub_menu/generic_sub_controller.cpp \
|
||||
sub_menu/language_controller.cpp \
|
||||
|
||||
@@ -23,6 +23,7 @@ MainController::MainController(Responder * parentResponder, InputEventHandlerDel
|
||||
m_preferencesController(this),
|
||||
m_displayModeController(this, inputEventHandlerDelegate),
|
||||
m_languageController(this, Metric::CommonTopMargin),
|
||||
m_countryController(this, Metric::CommonTopMargin),
|
||||
m_examModeController(this),
|
||||
m_aboutController(this)
|
||||
{
|
||||
@@ -44,52 +45,54 @@ void MainController::didBecomeFirstResponder() {
|
||||
|
||||
bool MainController::handleEvent(Ion::Events::Event event) {
|
||||
GlobalPreferences * globalPreferences = GlobalPreferences::sharedGlobalPreferences();
|
||||
if (model()->childAtIndex(selectedRow())->numberOfChildren() == 0) {
|
||||
if (model()->childAtIndex(selectedRow())->label() == promptMessage()) {
|
||||
if (event == Ion::Events::OK || event == Ion::Events::EXE) {
|
||||
globalPreferences->setShowPopUp(!globalPreferences->showPopUp());
|
||||
m_selectableTableView.reloadCellAtLocation(m_selectableTableView.selectedColumn(), m_selectableTableView.selectedRow());
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
if (model()->childAtIndex(selectedRow())->label() == I18n::Message::Brightness) {
|
||||
if (event == Ion::Events::Right || event == Ion::Events::Left || event == Ion::Events::Plus || event == Ion::Events::Minus) {
|
||||
int delta = Ion::Backlight::MaxBrightness/GlobalPreferences::NumberOfBrightnessStates;
|
||||
int direction = (event == Ion::Events::Right || event == Ion::Events::Plus) ? delta : -delta;
|
||||
globalPreferences->setBrightnessLevel(globalPreferences->brightnessLevel()+direction);
|
||||
m_selectableTableView.reloadCellAtLocation(m_selectableTableView.selectedColumn(), m_selectableTableView.selectedRow());
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
if (model()->childAtIndex(selectedRow())->label() == I18n::Message::Language) {
|
||||
if (event == Ion::Events::OK || event == Ion::Events::EXE || event == Ion::Events::Right) {
|
||||
stackController()->push(&m_languageController);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
int rowIndex = selectedRow();
|
||||
|
||||
if (hasPrompt() && rowIndex == k_indexOfPopUpCell) {
|
||||
if (event == Ion::Events::OK || event == Ion::Events::EXE) {
|
||||
globalPreferences->setShowPopUp(!globalPreferences->showPopUp());
|
||||
m_selectableTableView.reloadCellAtLocation(m_selectableTableView.selectedColumn(), m_selectableTableView.selectedRow());
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
if (event == Ion::Events::OK || event == Ion::Events::EXE || event == Ion::Events::Right) {
|
||||
GenericSubController * subController = nullptr;
|
||||
int rowIndex = selectedRow();
|
||||
if (rowIndex == k_indexOfDisplayModeCell) {
|
||||
subController = &m_displayModeController;
|
||||
} else if (rowIndex == k_indexOfBrightnessCell || rowIndex == k_indexOfLanguageCell) {
|
||||
assert(false);
|
||||
} else if (rowIndex == k_indexOfExamModeCell) {
|
||||
subController = &m_examModeController;
|
||||
} else if (rowIndex == k_indexOfAboutCell + hasPrompt()) {
|
||||
subController = &m_aboutController;
|
||||
} else {
|
||||
subController = &m_preferencesController;
|
||||
}
|
||||
subController->setMessageTreeModel(model()->childAtIndex(selectedRow()));
|
||||
StackViewController * stack = stackController();
|
||||
stack->push(subController);
|
||||
|
||||
if (rowIndex == k_indexOfBrightnessCell
|
||||
&& (event == Ion::Events::Left || event == Ion::Events::Right || event == Ion::Events::Minus || event == Ion::Events::Plus)) {
|
||||
int delta = Ion::Backlight::MaxBrightness/GlobalPreferences::NumberOfBrightnessStates;
|
||||
int direction = (event == Ion::Events::Right || event == Ion::Events::Plus) ? delta : -delta;
|
||||
globalPreferences->setBrightnessLevel(globalPreferences->brightnessLevel()+direction);
|
||||
m_selectableTableView.reloadCellAtLocation(m_selectableTableView.selectedColumn(), m_selectableTableView.selectedRow());
|
||||
return true;
|
||||
}
|
||||
|
||||
if (event == Ion::Events::OK || event == Ion::Events::EXE || event == Ion::Events::Right) {
|
||||
assert(rowIndex != k_indexOfBrightnessCell);
|
||||
/* The About cell can either be found at index k_indexOfExamModeCell + 1 or
|
||||
* k_indexOfExamModeCell + 2, depending on whether there is a Pop-Up cell.
|
||||
* Since the Pop-Up cell has been handled above, we can use those two
|
||||
* indices for the About cell. */
|
||||
ViewController * subControllers[k_indexOfAboutCell + 2] = {
|
||||
&m_preferencesController,
|
||||
&m_displayModeController,
|
||||
&m_preferencesController,
|
||||
&m_preferencesController,
|
||||
nullptr, //&m_brightnessController
|
||||
&m_preferencesController,
|
||||
&m_languageController,
|
||||
&m_countryController,
|
||||
&m_examModeController,
|
||||
&m_aboutController,
|
||||
&m_aboutController
|
||||
};
|
||||
ViewController * selectedSubController = subControllers[rowIndex];
|
||||
assert(selectedSubController);
|
||||
if (model()->childAtIndex(rowIndex)->numberOfChildren() != 0) {
|
||||
static_cast<GenericSubController *>(selectedSubController)->setMessageTreeModel(model()->childAtIndex(rowIndex));
|
||||
}
|
||||
stackController()->push(selectedSubController);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -168,6 +171,11 @@ void MainController::willDisplayCellForIndex(HighlightCell * cell, int index) {
|
||||
static_cast<MessageTableCellWithChevronAndMessage *>(cell)->setSubtitle(I18n::LanguageNames[index]);
|
||||
return;
|
||||
}
|
||||
if (index == k_indexOfCountryCell) {
|
||||
int index = (int)(globalPreferences->country());
|
||||
static_cast<MessageTableCellWithChevronAndMessage *>(cell)->setSubtitle(I18n::CountryNames[index]);
|
||||
return;
|
||||
}
|
||||
if (hasPrompt() && index == k_indexOfPopUpCell) {
|
||||
MessageTableCellWithSwitch * mySwitchCell = (MessageTableCellWithSwitch *)cell;
|
||||
SwitchView * mySwitch = (SwitchView *)mySwitchCell->accessoryView();
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include <apps/shared/settings_message_tree.h>
|
||||
#include "message_table_cell_with_gauge_with_separator.h"
|
||||
#include "sub_menu/about_controller.h"
|
||||
#include "sub_menu/country_controller.h"
|
||||
#include "sub_menu/display_mode_controller.h"
|
||||
#include "sub_menu/exam_mode_controller.h"
|
||||
#include "sub_menu/language_controller.h"
|
||||
@@ -45,7 +46,8 @@ private:
|
||||
constexpr static int k_indexOfBrightnessCell = k_indexOfComplexFormatCell + 1;
|
||||
constexpr static int k_indexOfFontCell = k_indexOfBrightnessCell + 1;
|
||||
constexpr static int k_indexOfLanguageCell = k_indexOfFontCell + 1;
|
||||
constexpr static int k_indexOfExamModeCell = k_indexOfLanguageCell + 1;
|
||||
constexpr static int k_indexOfCountryCell = k_indexOfLanguageCell + 1;
|
||||
constexpr static int k_indexOfExamModeCell = k_indexOfCountryCell + 1;
|
||||
/* Pop-up cell and About cell are located at the same index because pop-up
|
||||
* cell is optional. We must always correct k_indexOfAboutCell with
|
||||
* hasPrompt() (TODO: make hasPrompt() constexpr and correct
|
||||
@@ -56,7 +58,7 @@ private:
|
||||
StackViewController * stackController() const;
|
||||
I18n::Message promptMessage() const;
|
||||
bool hasPrompt() const { return promptMessage() != I18n::Message::Default; }
|
||||
constexpr static int k_numberOfSimpleChevronCells = 7;
|
||||
constexpr static int k_numberOfSimpleChevronCells = (Ion::Display::Height - Metric::TitleBarHeight) / Metric::ParameterCellHeight + 1;
|
||||
MessageTableCellWithChevronAndMessage m_cells[k_numberOfSimpleChevronCells];
|
||||
MessageTableCellWithGaugeWithSeparator m_brightnessCell;
|
||||
MessageTableCellWithSwitch m_popUpCell;
|
||||
@@ -64,6 +66,7 @@ private:
|
||||
PreferencesController m_preferencesController;
|
||||
DisplayModeController m_displayModeController;
|
||||
LanguageController m_languageController;
|
||||
CountryController m_countryController;
|
||||
ExamModeController m_examModeController;
|
||||
AboutController m_aboutController;
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@ constexpr SettingsMessageTree s_modelMenu[] =
|
||||
SettingsMessageTree(I18n::Message::Brightness),
|
||||
SettingsMessageTree(I18n::Message::FontSizes, s_modelFontChildren),
|
||||
SettingsMessageTree(I18n::Message::Language),
|
||||
SettingsMessageTree(I18n::Message::Country),
|
||||
SettingsMessageTree(I18n::Message::ExamMode, ExamModeConfiguration::s_modelExamChildren),
|
||||
SettingsMessageTree(I18n::Message::BetaPopUp),
|
||||
SettingsMessageTree(I18n::Message::About, s_modelAboutChildren)};
|
||||
|
||||
@@ -14,6 +14,7 @@ constexpr SettingsMessageTree s_modelMenu[] =
|
||||
SettingsMessageTree(I18n::Message::Brightness),
|
||||
SettingsMessageTree(I18n::Message::FontSizes, s_modelFontChildren),
|
||||
SettingsMessageTree(I18n::Message::Language),
|
||||
SettingsMessageTree(I18n::Message::Country),
|
||||
SettingsMessageTree(I18n::Message::ExamMode, ExamModeConfiguration::s_modelExamChildren),
|
||||
SettingsMessageTree(I18n::Message::About, s_modelAboutChildren)};
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@ constexpr SettingsMessageTree s_modelMenu[] =
|
||||
SettingsMessageTree(I18n::Message::Brightness),
|
||||
SettingsMessageTree(I18n::Message::FontSizes, s_modelFontChildren),
|
||||
SettingsMessageTree(I18n::Message::Language),
|
||||
SettingsMessageTree(I18n::Message::Country),
|
||||
SettingsMessageTree(I18n::Message::ExamMode, ExamModeConfiguration::s_modelExamChildren),
|
||||
SettingsMessageTree(I18n::Message::UpdatePopUp),
|
||||
SettingsMessageTree(I18n::Message::About, s_modelAboutChildren)};
|
||||
|
||||
13
apps/settings/sub_menu/country_controller.cpp
Normal file
13
apps/settings/sub_menu/country_controller.cpp
Normal file
@@ -0,0 +1,13 @@
|
||||
#include "country_controller.h"
|
||||
|
||||
namespace Settings {
|
||||
|
||||
bool CountryController::handleEvent(Ion::Events::Event event) {
|
||||
if (Shared::CountryController::handleEvent(event) || event == Ion::Events::Left) {
|
||||
static_cast<StackViewController *>(parentResponder())->pop();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
17
apps/settings/sub_menu/country_controller.h
Normal file
17
apps/settings/sub_menu/country_controller.h
Normal file
@@ -0,0 +1,17 @@
|
||||
#ifndef SETTING_COUNTRY_CONTROLLER_H
|
||||
#define SETTING_COUNTRY_CONTROLLER_H
|
||||
|
||||
#include <escher.h>
|
||||
#include "../../shared/country_controller.h"
|
||||
|
||||
namespace Settings {
|
||||
|
||||
class CountryController : public Shared::CountryController {
|
||||
public:
|
||||
using Shared::CountryController::CountryController;
|
||||
bool handleEvent(Ion::Events::Event event) override;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user