mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-19 00:37:25 +01:00
[apps/settings] Enable to modify settings
Change-Id: Idd5e28a64d08d607f5bb2065a45ab4ecf5a26dca
This commit is contained in:
@@ -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))
|
||||
{
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user