From a695fec6ff1e02a3bbb4d23210b00be12b9ed71c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89milie=20Feral?= Date: Thu, 1 Dec 2016 17:51:43 +0100 Subject: [PATCH] [apps/probability] Improve the law controller Change-Id: Ic70cc03d70b1faa383a01c9c2e00136d483b114b --- apps/probability/Makefile | 4 +- apps/probability/app.cpp | 7 - apps/probability/app.h | 5 +- apps/probability/law/law_controller.cpp | 69 --------- apps/probability/law_controller.cpp | 137 ++++++++++++++++++ apps/probability/{law => }/law_controller.h | 13 +- .../parameters/parameters_controller.cpp | 19 --- apps/probability/parameters_controller.cpp | 29 ++++ .../{parameters => }/parameters_controller.h | 5 +- 9 files changed, 182 insertions(+), 106 deletions(-) delete mode 100644 apps/probability/law/law_controller.cpp create mode 100644 apps/probability/law_controller.cpp rename apps/probability/{law => }/law_controller.h (76%) delete mode 100644 apps/probability/parameters/parameters_controller.cpp create mode 100644 apps/probability/parameters_controller.cpp rename apps/probability/{parameters => }/parameters_controller.h (72%) diff --git a/apps/probability/Makefile b/apps/probability/Makefile index 0dca5ac2f..937b3a00e 100644 --- a/apps/probability/Makefile +++ b/apps/probability/Makefile @@ -2,8 +2,8 @@ app_objs += $(addprefix apps/probability/,\ app.o\ cell.o\ law.o\ - law/law_controller.o\ - parameters/parameters_controller.o\ + law_controller.o\ + parameters_controller.o\ ) app_images += $(addprefix apps/probability/,\ diff --git a/apps/probability/app.cpp b/apps/probability/app.cpp index fc2045a35..b8ae53ce1 100644 --- a/apps/probability/app.cpp +++ b/apps/probability/app.cpp @@ -4,13 +4,6 @@ Probability::App::App(Container * container) : ::App(container, &m_stackViewController, "Probability", ImageStore::ProbabilityIcon), m_lawController(LawController(nullptr)), - m_parametersController(ParametersController(nullptr)), m_stackViewController(&m_modalViewController, &m_lawController, true) { } - -void Probability::App::setLaw(Law l) { - //m_parametersController.setLaw(thePickedLaw); - m_stackViewController.push(&m_parametersController); -} - diff --git a/apps/probability/app.h b/apps/probability/app.h index 72fb47b77..9d9c11289 100644 --- a/apps/probability/app.h +++ b/apps/probability/app.h @@ -2,8 +2,7 @@ #define PROBABILITY_PROBABILITY_APP_H #include -#include "law/law_controller.h" -#include "parameters/parameters_controller.h" +#include "law_controller.h" namespace Probability { @@ -14,10 +13,8 @@ public: Student }; App(Container * container); - void setLaw(Law l); private: LawController m_lawController; - ParametersController m_parametersController; StackViewController m_stackViewController; }; diff --git a/apps/probability/law/law_controller.cpp b/apps/probability/law/law_controller.cpp deleted file mode 100644 index b608e1969..000000000 --- a/apps/probability/law/law_controller.cpp +++ /dev/null @@ -1,69 +0,0 @@ -#include "law_controller.h" -#include -#include "../app.h" - -static const char * sMessages[] = { - "Loi Normale", - "Exponentielle", - "Student", - "Khi 2", - "Binomiale", - "Poisson", - "Geometrique" -}; - -Probability::LawController::LawController(Responder * parentResponder) : - ViewController(parentResponder), - m_selectableTableView(SelectableTableView(this, this, Metric::TopMargin, Metric::RightMargin, - Metric::BottomMargin, Metric::LeftMargin)) -{ - m_messages = sMessages; -} - -View * Probability::LawController::view() { - return &m_selectableTableView; -} - -const char * Probability::LawController::title() const { - return "Type de Loi"; -} - -void Probability::LawController::didBecomeFirstResponder() { - if (m_selectableTableView.selectedRow() == -1) { - m_selectableTableView.selectCellAtLocation(0, 0); - } else { - m_selectableTableView.selectCellAtLocation(m_selectableTableView.selectedColumn(), m_selectableTableView.selectedRow()); - } - app()->setFirstResponder(&m_selectableTableView); -} - -bool Probability::LawController::handleEvent(Ion::Events::Event event) { - if (event == Ion::Events::OK) { - ((Probability::App *)app())->setLaw(App::Law::Normal); - return true; - } - return false; -} - -int Probability::LawController::numberOfRows() { - return k_totalNumberOfModels; -}; - -TableViewCell * Probability::LawController::reusableCell(int index) { - assert(index >= 0); - assert(index < k_maxNumberOfCells); - return &m_cells[index]; -} - -int Probability::LawController::reusableCellCount() { - return k_maxNumberOfCells; -} - -void Probability::LawController::willDisplayCellForIndex(TableViewCell * cell, int index) { - MenuListCell * myCell = (MenuListCell *)cell; - myCell->setText(m_messages[index]); -} - -KDCoordinate Probability::LawController::cellHeight() { - return 35; -} diff --git a/apps/probability/law_controller.cpp b/apps/probability/law_controller.cpp new file mode 100644 index 000000000..04fa2a18b --- /dev/null +++ b/apps/probability/law_controller.cpp @@ -0,0 +1,137 @@ +#include "law_controller.h" +#include +#include "app.h" +#include "binomial_icon.h" +#include "exponential_icon.h" +#include "normal_icon.h" +#include "poisson_icon.h" +#include "uniform_icon.h" +#include "focused_binomial_icon.h" +#include "focused_exponential_icon.h" +#include "focused_normal_icon.h" +#include "focused_poisson_icon.h" +#include "focused_uniform_icon.h" + +namespace Probability { + +static const char * sMessages[] = { + "Binomiale", + "Uniforme", + "Exponentielle", + "Normale", + "Poisson" +}; + +LawController::LawController(Responder * parentResponder) : + ViewController(parentResponder), + m_selectableTableView(SelectableTableView(this, this, Metric::TopMargin, Metric::RightMargin, + Metric::BottomMargin, Metric::LeftMargin)), + m_parametersController(ParametersController(nullptr, &m_law)) +{ + m_messages = sMessages; +} + +View * LawController::view() { + return &m_selectableTableView; +} + +const char * LawController::title() const { + switch (m_law.type()) { + case Law::Type::Binomial: + return "Loi binomiale"; + case Law::Type::Uniform: + return "Loi uniforme"; + case Law::Type::Exponential: + return "Loi exponentielle"; + case Law::Type::Normal: + return "Loi normale"; + case Law::Type::Poisson: + return "Loi Poisson"; + default: + return "Choisir le type de Loi"; + } +} + +void Probability::LawController::didBecomeFirstResponder() { + StackViewController * stack = (StackViewController *)parentResponder(); + stack->updateTitle(); + if (m_selectableTableView.selectedRow() == -1) { + m_selectableTableView.selectCellAtLocation(0, 0); + } else { + m_selectableTableView.selectCellAtLocation(m_selectableTableView.selectedColumn(), m_selectableTableView.selectedRow()); + } + app()->setFirstResponder(&m_selectableTableView); +} + +bool Probability::LawController::handleEvent(Ion::Events::Event event) { + if (event == Ion::Events::OK) { + StackViewController * stack = (StackViewController *)parentResponder(); + m_law.setType(typeAtIndex(m_selectableTableView.selectedRow())); + stack->updateTitle(); + stack->push(&m_parametersController); + return true; + } + return false; +} + +int Probability::LawController::numberOfRows() { + return k_totalNumberOfModels; +}; + +TableViewCell * Probability::LawController::reusableCell(int index) { + assert(index >= 0); + assert(index < k_totalNumberOfModels); + return &m_cells[index]; +} + +int Probability::LawController::reusableCellCount() { + return k_totalNumberOfModels; +} + +void Probability::LawController::willDisplayCellForIndex(TableViewCell * cell, int index) { + Cell * myCell = (Cell *)cell; + myCell->setLabel(m_messages[index]); + switch (typeAtIndex(index)) { + case Law::Type::Binomial: + myCell->setImage(ImageStore::BinomialIcon, ImageStore::FocusedBinomialIcon); + break; + case Law::Type::Uniform: + myCell->setImage(ImageStore::UniformIcon, ImageStore::FocusedUniformIcon); + break; + case Law::Type::Exponential: + myCell->setImage(ImageStore::ExponentialIcon, ImageStore::FocusedExponentialIcon); + break; + case Law::Type::Normal: + myCell->setImage(ImageStore::NormalIcon, ImageStore::FocusedNormalIcon); + break; + case Law::Type::Poisson: + myCell->setImage(ImageStore::PoissonIcon, ImageStore::FocusedPoissonIcon); + break; + default: + break; + } + myCell->reloadCell(); +} + +KDCoordinate Probability::LawController::cellHeight() { + return 35; +} + +Law::Type Probability::LawController::typeAtIndex(int index) { + switch (index) { + case 0: + return Law::Type::Binomial; + case 1: + return Law::Type::Uniform; + case 2: + return Law::Type::Exponential; + case 3: + return Law::Type::Normal; + case 4: + return Law::Type::Poisson; + default: + return Law::Type::NoType; + } +} + +} diff --git a/apps/probability/law/law_controller.h b/apps/probability/law_controller.h similarity index 76% rename from apps/probability/law/law_controller.h rename to apps/probability/law_controller.h index 4ec3eb512..af3d1c484 100644 --- a/apps/probability/law/law_controller.h +++ b/apps/probability/law_controller.h @@ -2,13 +2,15 @@ #define PROBABILITY_LAW_CONTROLLER_H #include +#include "cell.h" +#include "law.h" +#include "parameters_controller.h" namespace Probability { class LawController : public ViewController, public SimpleListViewDataSource { public: LawController(Responder * parentResponder); - View * view() override; const char * title() const override; bool handleEvent(Ion::Events::Event event) override; @@ -20,13 +22,16 @@ public: TableViewCell * reusableCell(int index) override; int reusableCellCount() override; private: - constexpr static int k_totalNumberOfModels = 7; - constexpr static int k_maxNumberOfCells = 10; + Law::Type typeAtIndex(int index); + constexpr static int k_totalNumberOfModels = 5; // !!! CAUTION: The order here is important // The cells should be initialized *before* the listview! - MenuListCell m_cells[k_maxNumberOfCells]; + Cell m_cells[k_totalNumberOfModels]; SelectableTableView m_selectableTableView; const char ** m_messages; + Law m_law; + ParametersController m_parametersController; + }; } diff --git a/apps/probability/parameters/parameters_controller.cpp b/apps/probability/parameters/parameters_controller.cpp deleted file mode 100644 index 03af7058c..000000000 --- a/apps/probability/parameters/parameters_controller.cpp +++ /dev/null @@ -1,19 +0,0 @@ -#include "parameters_controller.h" - -Probability::ParametersController::ParametersController(Responder * parentResponder) : - ViewController(parentResponder), - m_view(SolidColorView(KDColor::RGB24(0xF3619B))) -{ -} - -View * Probability::ParametersController::view() { - return &m_view; -} - -const char * Probability::ParametersController::title() const { - return "Parameters"; -} - -bool Probability::ParametersController::handleEvent(Ion::Events::Event event) { - return false; -} diff --git a/apps/probability/parameters_controller.cpp b/apps/probability/parameters_controller.cpp new file mode 100644 index 000000000..5a11d7c40 --- /dev/null +++ b/apps/probability/parameters_controller.cpp @@ -0,0 +1,29 @@ +#include "parameters_controller.h" + +namespace Probability { + +ParametersController::ParametersController(Responder * parentResponder, Law * law) : + ViewController(parentResponder), + m_view(SolidColorView(KDColor::RGB24(0xF3619B))), + m_law(law) +{ +} + +View * ParametersController::view() { + return &m_view; +} + +const char * ParametersController::title() const { + return "Parameters"; +} + +bool ParametersController::handleEvent(Ion::Events::Event event) { + return false; +} + +void ParametersController::didResignFirstResponder() { + m_law->setType(Law::Type::NoType); +} + +} + diff --git a/apps/probability/parameters/parameters_controller.h b/apps/probability/parameters_controller.h similarity index 72% rename from apps/probability/parameters/parameters_controller.h rename to apps/probability/parameters_controller.h index eb129d91d..543535fb8 100644 --- a/apps/probability/parameters/parameters_controller.h +++ b/apps/probability/parameters_controller.h @@ -2,18 +2,21 @@ #define PROBABILITY_PARAMETERS_CONTROLLER_H #include +#include "law.h" namespace Probability { class ParametersController : public ViewController { public: - ParametersController(Responder * parentResponder); + ParametersController(Responder * parentResponder, Law * law); View * view() override; const char * title() const override; bool handleEvent(Ion::Events::Event event) override; + void didResignFirstResponder() override; private: SolidColorView m_view; + Law * m_law; }; }