mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-19 00:37:25 +01:00
[apps/probability] Improve the law controller
Change-Id: Ic70cc03d70b1faa383a01c9c2e00136d483b114b
This commit is contained in:
@@ -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/,\
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -2,8 +2,7 @@
|
||||
#define PROBABILITY_PROBABILITY_APP_H
|
||||
|
||||
#include <escher.h>
|
||||
#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;
|
||||
};
|
||||
|
||||
|
||||
@@ -1,69 +0,0 @@
|
||||
#include "law_controller.h"
|
||||
#include <assert.h>
|
||||
#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;
|
||||
}
|
||||
137
apps/probability/law_controller.cpp
Normal file
137
apps/probability/law_controller.cpp
Normal file
@@ -0,0 +1,137 @@
|
||||
#include "law_controller.h"
|
||||
#include <assert.h>
|
||||
#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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -2,13 +2,15 @@
|
||||
#define PROBABILITY_LAW_CONTROLLER_H
|
||||
|
||||
#include <escher.h>
|
||||
#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;
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
29
apps/probability/parameters_controller.cpp
Normal file
29
apps/probability/parameters_controller.cpp
Normal file
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -2,18 +2,21 @@
|
||||
#define PROBABILITY_PARAMETERS_CONTROLLER_H
|
||||
|
||||
#include <escher.h>
|
||||
#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;
|
||||
};
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user