diff --git a/apps/probability/Makefile b/apps/probability/Makefile index cb2420e41..a5d345437 100644 --- a/apps/probability/Makefile +++ b/apps/probability/Makefile @@ -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\ diff --git a/apps/probability/image_table_view.cpp b/apps/probability/image_table_view.cpp new file mode 100644 index 000000000..7cc01e860 --- /dev/null +++ b/apps/probability/image_table_view.cpp @@ -0,0 +1,154 @@ +#include "image_table_view.h" +#include +#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()); +} + +} diff --git a/apps/probability/image_table_view.h b/apps/probability/image_table_view.h new file mode 100644 index 000000000..394c8ea85 --- /dev/null +++ b/apps/probability/image_table_view.h @@ -0,0 +1,47 @@ +#ifndef PROBABILITY_IMAGE_TABLE_VIEW_H +#define PROBABILITY_IMAGE_TABLE_VIEW_H + +#include + +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