#include "float_parameter_controller.h" #include "../constant.h" #include "../apps_container.h" #include "text_field_delegate_app.h" #include using namespace Poincare; namespace Shared { FloatParameterController::FloatParameterController(Responder * parentResponder) : ViewController(parentResponder), m_selectableTableView(SelectableTableView(this, this, Metric::CommonTopMargin, Metric::CommonRightMargin, Metric::CommonBottomMargin, Metric::CommonLeftMargin, this)) { } View * FloatParameterController::view() { return &m_selectableTableView; } void FloatParameterController::didBecomeFirstResponder() { m_selectableTableView.selectCellAtLocation(0, 0); app()->setFirstResponder(&m_selectableTableView); } void FloatParameterController::viewWillAppear() { m_selectableTableView.reloadData(); } int FloatParameterController::activeCell() { return m_selectableTableView.selectedRow(); } void FloatParameterController::willDisplayCellForIndex(HighlightCell * cell, int index) { PointerTableCellWithEditableText * myCell = (PointerTableCellWithEditableText *) cell; char buffer[Complex::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits)]; Complex::convertFloatToText(parameterAtIndex(index), buffer, Complex::bufferSizeForFloatsWithPrecision(Constant::LargeNumberOfSignificantDigits), Constant::LargeNumberOfSignificantDigits, Expression::FloatDisplayMode::Decimal); myCell->setAccessoryText(buffer); } bool FloatParameterController::textFieldDidFinishEditing(TextField * textField, const char * text) { AppsContainer * appsContainer = ((TextFieldDelegateApp *)app())->container(); Context * globalContext = appsContainer->globalContext(); float floatBody = Expression::parse(text)->approximate(*globalContext); if (isnan(floatBody)) { app()->displayWarning("Valeur non defini"); return false; } setParameterAtIndex(m_selectableTableView.selectedRow(), floatBody); willDisplayCellForIndex(m_selectableTableView.cellAtLocation(m_selectableTableView.selectedColumn(), m_selectableTableView.selectedRow()), activeCell()); return true; } void FloatParameterController::tableViewDidChangeSelection(SelectableTableView * t, int previousSelectedCellX, int previousSelectedCellY) { if (previousSelectedCellY >= 0) { PointerTableCellWithEditableText * myCell = (PointerTableCellWithEditableText *)t->cellAtLocation(previousSelectedCellX, previousSelectedCellY); myCell->setEditing(false); } if (t->selectedRow() >= 0) { PointerTableCellWithEditableText * myNewCell = (PointerTableCellWithEditableText *)t->cellAtLocation(t->selectedColumn(), t->selectedRow()); app()->setFirstResponder(myNewCell); } } TextFieldDelegateApp * FloatParameterController::textFieldDelegateApp() { return (TextFieldDelegateApp *)app(); } KDCoordinate FloatParameterController::cellHeight() { return Metric::ParameterCellHeight; } }