[apps/probability] Create a class image table view

Change-Id: I96b90988226f29a5aef167c9d5fc2ffb7a9c28b9
This commit is contained in:
Émilie Feral
2016-12-06 15:54:37 +01:00
parent 067ee84242
commit e25d5fe794
3 changed files with 202 additions and 0 deletions

View File

@@ -3,6 +3,7 @@ app_objs += $(addprefix apps/probability/,\
calculation_controller.o\
cell.o\
evaluate_context.o\
image_table_view.o\
law.o\
law_controller.o\
law_curve_view.o\

View File

@@ -0,0 +1,154 @@
#include "image_table_view.h"
#include <assert.h>
#include "app.h"
#include "images/calcul1_icon.h"
#include "images/calcul2_icon.h"
#include "images/calcul3_icon.h"
#include "images/focused_calcul1_icon.h"
#include "images/focused_calcul2_icon.h"
#include "images/focused_calcul3_icon.h"
namespace Probability {
ImageTableView::ImageCell::ImageCell() :
TableViewCell()
{
}
int ImageTableView::ImageCell::numberOfSubviews() const {
return 1;
}
View * ImageTableView::ImageCell::subviewAtIndex(int index) {
assert(index == 0);
return &m_iconView;
}
void ImageTableView::ImageCell::layoutSubviews() {
m_iconView.setFrame(bounds());
}
void ImageTableView::ImageCell::reloadCell() {
TableViewCell::reloadCell();
if (isHighlighted()) {
m_iconView.setImage(m_focusedIcon);
} else {
m_iconView.setImage(m_icon);
}
}
void ImageTableView::ImageCell::setImage(const Image * image, const Image * focusedImage) {
m_icon = image;
m_focusedIcon = focusedImage;
}
ImageTableView::ImageTableView(Responder * parentResponder) :
View(),
Responder(parentResponder),
m_selectableTableView(SelectableTableView(this, this, 0, 0, 0, 0, nullptr, false, false)),
m_selectedCalcul(0),
m_isSelected(false)
{
}
void ImageTableView::didBecomeFirstResponder() {
m_isSelected = true;
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 ImageTableView::handleEvent(Ion::Events::Event event) {
if (event == Ion::Events::OK) {
m_selectedCalcul = m_selectableTableView.selectedRow();
select(false);
m_selectableTableView.reloadData();
app()->setFirstResponder(parentResponder());
return true;
}
return false;
}
void ImageTableView::select(bool select) {
if (!select) {
m_selectableTableView.deselectTable();
m_isSelected = select;
} else {
m_isSelected = select;
m_selectableTableView.selectCellAtLocation(0, m_selectedCalcul);
}
}
int ImageTableView::numberOfRows() {
if (m_isSelected) {
return k_numberOfImages;
}
return 1;
}
TableViewCell * ImageTableView::reusableCell(int index) {
assert(index >= 0);
assert(index < k_numberOfImages);
return &m_imageCells[index];
}
int ImageTableView::reusableCellCount() {
return k_numberOfImages;
}
void ImageTableView::willDisplayCellForIndex(TableViewCell * cell, int index) {
ImageCell * myCell = (ImageCell *)cell;
if (!m_isSelected) {
switch (m_selectedCalcul) {
case 0:
myCell->setImage(ImageStore::Calcul1Icon, ImageStore::FocusedCalcul1Icon);
break;
case 1:
myCell->setImage(ImageStore::Calcul2Icon, ImageStore::FocusedCalcul2Icon);
break;
case 2:
myCell->setImage(ImageStore::Calcul3Icon, ImageStore::FocusedCalcul3Icon);
break;
default:
break;
}
} else {
switch (index) {
case 0:
myCell->setImage(ImageStore::Calcul1Icon, ImageStore::FocusedCalcul1Icon);
break;
case 1:
myCell->setImage(ImageStore::Calcul2Icon, ImageStore::FocusedCalcul2Icon);
break;
case 2:
myCell->setImage(ImageStore::Calcul3Icon, ImageStore::FocusedCalcul3Icon);
break;
default:
break;
}
}
myCell->reloadCell();
}
KDCoordinate ImageTableView::cellHeight() {
return k_imageHeight;
}
int ImageTableView::numberOfSubviews() const {
return 1;
}
View * ImageTableView::subviewAtIndex(int index) {
assert(index == 0);
return &m_selectableTableView;
}
void ImageTableView::layoutSubviews() {
m_selectableTableView.setFrame(bounds());
}
}

View File

@@ -0,0 +1,47 @@
#ifndef PROBABILITY_IMAGE_TABLE_VIEW_H
#define PROBABILITY_IMAGE_TABLE_VIEW_H
#include <escher.h>
namespace Probability {
class ImageTableView : public View, public Responder, public SimpleListViewDataSource {
public:
ImageTableView(Responder * parentResponder);
bool handleEvent(Ion::Events::Event event) override;
void didBecomeFirstResponder() override;
void select(bool select);
int numberOfRows() override;
void willDisplayCellForIndex(TableViewCell * cell, int index) override;
KDCoordinate cellHeight() override;
TableViewCell * reusableCell(int index) override;
int reusableCellCount() override;
constexpr static KDCoordinate k_imageWidth = 35;
constexpr static KDCoordinate k_imageHeight = 19;
private:
int numberOfSubviews() const override;
View * subviewAtIndex(int index) override;
void layoutSubviews() override;
class ImageCell : public TableViewCell {
public:
ImageCell();
void reloadCell() override;
void setImage(const Image * image, const Image * focusedImage);
private:
int numberOfSubviews() const override;
View * subviewAtIndex(int index) override;
void layoutSubviews() override;
ImageView m_iconView;
const Image * m_icon;
const Image * m_focusedIcon;
};
constexpr static int k_numberOfImages = 3;
ImageCell m_imageCells[k_numberOfImages];
SelectableTableView m_selectableTableView;
int m_selectedCalcul;
bool m_isSelected;
};
}
#endif