[apps] Use the shared language controller in the settings app

This commit is contained in:
Romain Goyet
2017-09-28 16:02:29 +02:00
committed by EmilieNumworks
parent cb097abe95
commit bcdad4a5f9
10 changed files with 67 additions and 17 deletions

View File

@@ -3,7 +3,7 @@
static GlobalPreferences s_globalPreferences;
GlobalPreferences::GlobalPreferences() :
m_language(I18n::Language::French),
m_language(I18n::Language::English),
m_examMode(ExamMode::Desactivate),
m_showUpdatePopUp(true),
m_brightnessLevel(Ion::Backlight::MaxBrightness)

View File

@@ -5,7 +5,7 @@
namespace OnBoarding {
LanguageController::LanguageController(Responder * parentResponder, LogoController * logoController, UpdateController * updateController) :
Shared::LanguageController(parentResponder),
Shared::LanguageController(parentResponder, (Ion::Display::Height - I18n::NumberOfLanguages*Metric::ParameterCellHeight)/2),
#if OS_WITH_SOFTWARE_UPDATE_PROMPT
m_updateController(updateController),
#endif

View File

@@ -3,6 +3,7 @@ snapshot_headers += apps/settings/app.h
app_objs += $(addprefix apps/settings/,\
app.o\
language_controller.o\
main_controller.o\
settings_node.o\
sub_controller.o\

View File

@@ -0,0 +1,13 @@
#include "language_controller.h"
namespace Settings {
bool LanguageController::handleEvent(Ion::Events::Event event) {
if (Shared::LanguageController::handleEvent(event)) {
static_cast<StackViewController *>(parentResponder())->pop();
return true;
}
return false;
}
}

View File

@@ -0,0 +1,17 @@
#ifndef SETTINGS_LANGUAGE_CONTROLLER_H
#define SETTINGS_LANGUAGE_CONTROLLER_H
#include <escher.h>
#include "../shared/language_controller.h"
namespace Settings {
class LanguageController : public Shared::LanguageController {
public:
using Shared::LanguageController::LanguageController;
bool handleEvent(Ion::Events::Event event) override;
};
}
#endif

View File

@@ -13,7 +13,6 @@ namespace Settings {
const SettingsNode angleChildren[2] = {SettingsNode(I18n::Message::Degres), SettingsNode(I18n::Message::Radian)};
const SettingsNode FloatDisplayModeChildren[2] = {SettingsNode(I18n::Message::Auto), SettingsNode(I18n::Message::Scientific)};
const SettingsNode complexFormatChildren[2] = {SettingsNode(I18n::Message::Default), SettingsNode(I18n::Message::Default)};
const SettingsNode languageChildren[I18n::NumberOfLanguages] = {SettingsNode(I18n::Message::English), SettingsNode(I18n::Message::French), SettingsNode(I18n::Message::Spanish), SettingsNode(I18n::Message::German), SettingsNode(I18n::Message::Portuguese)};
const SettingsNode examChildren[1] = {SettingsNode(I18n::Message::ActivateExamMode)};
const SettingsNode aboutChildren[3] = {SettingsNode(I18n::Message::SoftwareVersion), SettingsNode(I18n::Message::SerialNumber), SettingsNode(I18n::Message::FccId)};
@@ -23,7 +22,7 @@ const SettingsNode menu[8] =
const SettingsNode menu[7] =
#endif
{SettingsNode(I18n::Message::AngleUnit, angleChildren, 2), SettingsNode(I18n::Message::DisplayMode, FloatDisplayModeChildren, 2), SettingsNode(I18n::Message::ComplexFormat, complexFormatChildren, 2),
SettingsNode(I18n::Message::Brightness), SettingsNode(I18n::Message::Language, languageChildren, I18n::NumberOfLanguages), SettingsNode(I18n::Message::ExamMode, examChildren, 1),
SettingsNode(I18n::Message::Brightness), SettingsNode(I18n::Message::Language), SettingsNode(I18n::Message::ExamMode, examChildren, 1),
#if OS_WITH_SOFTWARE_UPDATE_PROMPT
SettingsNode(I18n::Message::UpdatePopUp),
#endif
@@ -45,7 +44,8 @@ MainController::MainController(Responder * parentResponder) :
m_selectableTableView(this, this, 0, 1, Metric::CommonTopMargin, Metric::CommonRightMargin,
Metric::CommonBottomMargin, Metric::CommonLeftMargin, this),
m_nodeModel((Node *)&model),
m_subController(this)
m_subController(this),
m_languageController(this, 13)
{
for (int i = 0; i < k_numberOfSimpleChevronCells; i++) {
m_cells[i].setMessageFontSize(KDText::FontSize::Large);
@@ -95,6 +95,13 @@ bool MainController::handleEvent(Ion::Events::Event event) {
}
return false;
}
if (m_nodeModel->children(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;
}
}
if (event == Ion::Events::OK || event == Ion::Events::EXE || event == Ion::Events::Right) {
m_subController.setNodeModel(m_nodeModel->children(selectedRow()));
@@ -188,6 +195,13 @@ void MainController::willDisplayCellForIndex(HighlightCell * cell, int index) {
myGauge->setLevel((float)GlobalPreferences::sharedGlobalPreferences()->brightnessLevel()/(float)Ion::Backlight::MaxBrightness);
return;
}
if (index == 4) {
I18n::Message languages[I18n::NumberOfLanguages] = {I18n::Message::English, I18n::Message::French, I18n::Message::Spanish, I18n::Message::German, I18n::Message::Portuguese};
int index = (int)GlobalPreferences::sharedGlobalPreferences()->language()-1;
MessageTableCellWithChevronAndMessage * myTextCell = static_cast<MessageTableCellWithChevronAndMessage *>(cell);
myTextCell->setSubtitle(languages[index]);
return;
}
#if OS_WITH_SOFTWARE_UPDATE_PROMPT
if (index == 6) {
MessageTableCellWithSwitch * mySwitchCell = (MessageTableCellWithSwitch *)cell;

View File

@@ -4,6 +4,7 @@
#include <escher.h>
#include "sub_controller.h"
#include "settings_node.h"
#include "language_controller.h"
namespace Settings {
@@ -44,6 +45,7 @@ private:
SelectableTableView m_selectableTableView;
Node * m_nodeModel;
SubController m_subController;
LanguageController m_languageController;
};
}

View File

@@ -193,11 +193,6 @@ void SubController::setPreferenceWithValueIndex(I18n::Message message, int value
if (message == I18n::Message::ComplexFormat) {
Preferences::sharedPreferences()->setComplexFormat((Expression::ComplexFormat)valueIndex);
}
if (message == I18n::Message::Language) {
GlobalPreferences::sharedGlobalPreferences()->setLanguage((I18n::Language)(valueIndex+1));
AppsContainer * appsContainer = (AppsContainer *)app()->container();
appsContainer->reloadTitleBar();
}
}
int SubController::valueIndexForPreference(I18n::Message message) {
@@ -210,9 +205,6 @@ int SubController::valueIndexForPreference(I18n::Message message) {
if (message == I18n::Message::ComplexFormat) {
return (int)Preferences::sharedPreferences()->complexFormat();
}
if (message == I18n::Message::Language) {
return (int)GlobalPreferences::sharedGlobalPreferences()->language()-1;
}
return 0;
}

View File

@@ -4,9 +4,9 @@
namespace Shared {
LanguageController::LanguageController(Responder * parentResponder) :
LanguageController::LanguageController(Responder * parentResponder, KDCoordinate topMargin) :
ViewController(parentResponder),
m_selectableTableView(this, this, 0, 1, (Ion::Display::Height - I18n::NumberOfLanguages*Metric::ParameterCellHeight)/2, Metric::CommonRightMargin, 0, Metric::CommonLeftMargin, this)
m_selectableTableView(this, this, 0, 1, topMargin, Metric::CommonRightMargin, 0, Metric::CommonLeftMargin, this)
{
for (int i = 0; i < I18n::NumberOfLanguages; i++) {
m_cells[i].setMessageFontSize(KDText::FontSize::Large);
@@ -15,7 +15,12 @@ LanguageController::LanguageController(Responder * parentResponder) :
void LanguageController::resetSelection() {
m_selectableTableView.deselectTable();
selectCellAtLocation(0, 0);
int index = (int)GlobalPreferences::sharedGlobalPreferences()->language()-1;
selectCellAtLocation(0, index);
}
const char * LanguageController::title() {
return I18n::translate(I18n::Message::Language);
}
View * LanguageController::view() {
@@ -26,6 +31,10 @@ void LanguageController::didBecomeFirstResponder() {
app()->setFirstResponder(&m_selectableTableView);
}
void LanguageController::viewWillAppear() {
resetSelection();
}
bool LanguageController::handleEvent(Ion::Events::Event event) {
if (event == Ion::Events::OK || event == Ion::Events::EXE) {
GlobalPreferences::sharedGlobalPreferences()->setLanguage((I18n::Language)(selectedRow()+1));

View File

@@ -8,11 +8,13 @@ namespace Shared {
class LanguageController : public ViewController, public SimpleListViewDataSource, public SelectableTableViewDataSource {
public:
LanguageController(Responder * parentResponder);
LanguageController(Responder * parentResponder, KDCoordinate topMargin);
void resetSelection();
View * view() override;
const char * title() override;
void didBecomeFirstResponder() override;
void viewWillAppear() override;
bool handleEvent(Ion::Events::Event event) override;
int numberOfRows() override;