mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-19 00:37:25 +01:00
[apps/probability] Create a class image table view
Change-Id: I96b90988226f29a5aef167c9d5fc2ffb7a9c28b9
This commit is contained in:
@@ -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\
|
||||
|
||||
154
apps/probability/image_table_view.cpp
Normal file
154
apps/probability/image_table_view.cpp
Normal 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());
|
||||
}
|
||||
|
||||
}
|
||||
47
apps/probability/image_table_view.h
Normal file
47
apps/probability/image_table_view.h
Normal 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
|
||||
Reference in New Issue
Block a user