[apps/settings] Enable to modify settings

Change-Id: Idd5e28a64d08d607f5bb2065a45ab4ecf5a26dca
This commit is contained in:
Émilie Feral
2017-01-30 11:38:24 +01:00
parent f89c770bbc
commit d67ff87448
6 changed files with 107 additions and 27 deletions

View File

@@ -6,7 +6,7 @@ namespace Settings {
App::App(Container * container) :
::App(container, &m_stackViewController, "Parametre", "PARAMETRE", ImageStore::SettingsIcon),
m_preference(),
m_mainController(MainController(nullptr)),
m_mainController(MainController(nullptr, &m_preference)),
m_stackViewController(StackViewController(&m_modalViewController, &m_mainController))
{
}

View File

@@ -14,12 +14,13 @@ const SettingsNode menu[5] = {SettingsNode("Unite d'angles", angleChildren, 2),
SettingsNode("Langue", languageChildren, 2)};
const SettingsNode model = SettingsNode("Parametres", menu, 5);
MainController::MainController(Responder * parentResponder) :
MainController::MainController(Responder * parentResponder, Preference * preference) :
ViewController(parentResponder),
m_selectableTableView(SelectableTableView(this, this, Metric::TopMargin, Metric::RightMargin,
Metric::BottomMargin, Metric::LeftMargin)),
m_nodeModel((Node *)&model),
m_subController(this)
m_preference(preference),
m_subController(this, m_preference)
{
}
@@ -40,7 +41,7 @@ void MainController::didBecomeFirstResponder() {
bool MainController::handleEvent(Ion::Events::Event event) {
if (event == Ion::Events::OK) {
m_subController.setNodeModel(m_nodeModel->children(m_selectableTableView.selectedRow()));
m_subController.setNodeModel(m_nodeModel->children(m_selectableTableView.selectedRow()), m_selectableTableView.selectedRow());
StackViewController * stack = stackController();
stack->push(&m_subController);
}
@@ -65,13 +66,30 @@ KDCoordinate MainController::cellHeight() {
return Metric::ParameterCellHeight;
}
void MainController::willDisplayCellForIndex(TableViewCell * cell, int index) {
MenuCell * myCell = (MenuCell *)cell;
myCell->setText(m_nodeModel->children(index)->label());
switch (index) {
case 0:
myCell->setSubtitle(m_nodeModel->children(index)->children((int)m_preference->angleUnit())->label());
break;
case 1:
myCell->setSubtitle(m_nodeModel->children(index)->children((int)m_preference->displayMode())->label());
break;
case 2:
myCell->setSubtitle(m_nodeModel->children(index)->children((int)m_preference->numberType())->label());
break;
case 3:
myCell->setSubtitle(m_nodeModel->children(index)->children((int)m_preference->complexFormat())->label());
break;
case 4:
myCell->setSubtitle(m_nodeModel->children(index)->children((int)m_preference->language())->label());
break;
}
}
StackViewController * MainController::stackController() const {
return (StackViewController *)parentResponder();
}
void MainController::willDisplayCellForIndex(TableViewCell * cell, int index) {
ChevronMenuListCell * myCell = (ChevronMenuListCell *)cell;
myCell->setText(m_nodeModel->children(index)->label());
}
}

View File

@@ -3,12 +3,15 @@
#include <escher.h>
#include "sub_controller.h"
#include "settings_node.h"
#include "menu_cell.h"
#include "preference.h"
namespace Settings {
class MainController : public ViewController, public SimpleListViewDataSource {
public:
MainController(Responder * parentResponder);
MainController(Responder * parentResponder, Preference * preference);
View * view() override;
const char * title() const override;
@@ -22,9 +25,10 @@ public:
private:
StackViewController * stackController() const;
constexpr static int k_totalNumberOfCell = 5;
ChevronMenuListCell m_cells[k_totalNumberOfCell];
MenuCell m_cells[k_totalNumberOfCell];
SelectableTableView m_selectableTableView;
Node * m_nodeModel;
Preference * m_preference;
SubController m_subController;
};

View File

@@ -6,24 +6,24 @@ namespace Settings {
class Preference {
public:
enum class AngleUnit {
Degree,
Radian
Degree = 0,
Radian = 1
};
enum class DisplayMode {
Auto,
Scientific
Auto = 0,
Scientific = 1
};
enum class NumberType {
Reel,
Complex
Reel = 0,
Complex = 1
};
enum class ComplexFormat {
Cartesian,
Polar
Cartesian = 0,
Polar = 1
};
enum class Language {
French,
English
French = 0,
English = 1
};
Preference();
AngleUnit angleUnit() const;

View File

@@ -3,11 +3,14 @@
namespace Settings {
SubController::SubController(Responder * parentResponder) :
SubController::SubController(Responder * parentResponder, Preference * preference) :
ViewController(parentResponder),
m_cells{MenuListCell(nullptr, KDText::FontSize::Large), MenuListCell(nullptr, KDText::FontSize::Large)},
m_selectableTableView(SelectableTableView(this, this, Metric::TopMargin, Metric::RightMargin,
Metric::BottomMargin, Metric::LeftMargin)),
m_nodeModel(nullptr)
m_nodeModel(nullptr),
m_preferenceIndex(0),
m_preference(preference)
{
}
@@ -23,11 +26,16 @@ View * SubController::view() {
}
void SubController::didBecomeFirstResponder() {
m_selectableTableView.selectCellAtLocation(0, 0);
m_selectableTableView.selectCellAtLocation(0, valueIndexAtPreferenceIndex(m_preferenceIndex));
app()->setFirstResponder(&m_selectableTableView);
}
bool SubController::handleEvent(Ion::Events::Event event) {
if (event == Ion::Events::OK) {
setPreferenceAtIndexWithValueIndex(m_preferenceIndex, m_selectableTableView.selectedRow());
StackViewController * stack = stackController();
stack->pop();
}
return false;
}
@@ -57,8 +65,52 @@ void SubController::willDisplayCellForIndex(TableViewCell * cell, int index) {
myCell->setText(m_nodeModel->children(index)->label());
}
void SubController::setNodeModel(const Node * nodeModel) {
void SubController::setNodeModel(const Node * nodeModel, int preferenceIndex) {
m_nodeModel = (Node *)nodeModel;
m_preferenceIndex = preferenceIndex;
}
StackViewController * SubController::stackController() const {
return (StackViewController *)parentResponder();
}
void SubController::setPreferenceAtIndexWithValueIndex(int preferenceIndex, int valueIndex) {
switch (preferenceIndex) {
case 0:
m_preference->setAngleUnit((Preference::AngleUnit)valueIndex);
break;
case 1:
m_preference->setDisplayMode((Preference::DisplayMode)valueIndex);
break;
case 2:
m_preference->setNumberType((Preference::NumberType)valueIndex);
break;
case 3:
m_preference->setComplexFormat((Preference::ComplexFormat)valueIndex);
break;
case 4:
m_preference->setLanguage((Preference::Language)valueIndex);
break;
}
}
int SubController::valueIndexAtPreferenceIndex(int preferenceIndex) {
switch (preferenceIndex) {
case 0:
return (int)m_preference->angleUnit();
case 1:
return (int)m_preference->displayMode();
case 2:
return (int)m_preference->numberType();
case 3:
return (int)m_preference->complexFormat();
case 4:
return (int)m_preference->language();
default:
assert(false);
return 0;
}
}
}

View File

@@ -3,12 +3,13 @@
#include <escher.h>
#include "settings_node.h"
#include "preference.h"
namespace Settings {
class SubController : public ViewController, public SimpleListViewDataSource {
public:
SubController(Responder * parentResponder);
SubController(Responder * parentResponder, Preference * preference);
View * view() override;
const char * title() const override;
bool handleEvent(Ion::Events::Event event) override;
@@ -18,12 +19,17 @@ public:
TableViewCell * reusableCell(int index) override;
int reusableCellCount() override;
void willDisplayCellForIndex(TableViewCell * cell, int index) override;
void setNodeModel(const Node * nodeModel);
void setNodeModel(const Node * nodeModel, int preferenceIndex);
private:
StackViewController * stackController() const;
void setPreferenceAtIndexWithValueIndex(int preferenceIndex, int valueIndex);
int valueIndexAtPreferenceIndex(int preferenceIndex);
constexpr static int k_totalNumberOfCell = 2;
MenuListCell m_cells[k_totalNumberOfCell];
SelectableTableView m_selectableTableView;
Node * m_nodeModel;
int m_preferenceIndex;
Preference * m_preference;
};
}