From d67ff874485f64ab0700c36bf428a3da3794469e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89milie=20Feral?= Date: Mon, 30 Jan 2017 11:38:24 +0100 Subject: [PATCH] [apps/settings] Enable to modify settings Change-Id: Idd5e28a64d08d607f5bb2065a45ab4ecf5a26dca --- apps/settings/app.cpp | 2 +- apps/settings/main_controller.cpp | 34 +++++++++++++----- apps/settings/main_controller.h | 8 +++-- apps/settings/preference.h | 20 +++++------ apps/settings/sub_controller.cpp | 60 ++++++++++++++++++++++++++++--- apps/settings/sub_controller.h | 10 ++++-- 6 files changed, 107 insertions(+), 27 deletions(-) diff --git a/apps/settings/app.cpp b/apps/settings/app.cpp index 52feb0ebe..785d46dd4 100644 --- a/apps/settings/app.cpp +++ b/apps/settings/app.cpp @@ -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)) { } diff --git a/apps/settings/main_controller.cpp b/apps/settings/main_controller.cpp index 9d5ef95e1..efd3c3ed7 100644 --- a/apps/settings/main_controller.cpp +++ b/apps/settings/main_controller.cpp @@ -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()); -} - } diff --git a/apps/settings/main_controller.h b/apps/settings/main_controller.h index 3db96dcda..09ffbd444 100644 --- a/apps/settings/main_controller.h +++ b/apps/settings/main_controller.h @@ -3,12 +3,15 @@ #include #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; }; diff --git a/apps/settings/preference.h b/apps/settings/preference.h index b1bf43f1a..1f5fc4e88 100644 --- a/apps/settings/preference.h +++ b/apps/settings/preference.h @@ -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; diff --git a/apps/settings/sub_controller.cpp b/apps/settings/sub_controller.cpp index 0c959f681..724365ef3 100644 --- a/apps/settings/sub_controller.cpp +++ b/apps/settings/sub_controller.cpp @@ -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; + } +} + + } diff --git a/apps/settings/sub_controller.h b/apps/settings/sub_controller.h index 1b0736f62..64ce4a13e 100644 --- a/apps/settings/sub_controller.h +++ b/apps/settings/sub_controller.h @@ -3,12 +3,13 @@ #include #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; }; }