#ifndef SHARED_EDITABLE_CELL_TABLE_VIEW_CONTROLLER_H #define SHARED_EDITABLE_CELL_TABLE_VIEW_CONTROLLER_H #include #include #include "text_field_delegate.h" #include "tab_table_controller.h" #include "regular_table_view_data_source.h" namespace Shared { class EditableCellTableViewController : public TabTableController , public RegularTableViewDataSource, public TextFieldDelegate { public: EditableCellTableViewController(Responder * parentResponder); bool textFieldShouldFinishEditing(TextField * textField, Ion::Events::Event event) override; bool textFieldDidFinishEditing(TextField * textField, const char * text, Ion::Events::Event event) override; int numberOfRows() override; void willDisplayCellAtLocationWithDisplayMode(HighlightCell * cell, int i, int j, Poincare::Preferences::PrintFloatMode mode); KDCoordinate rowHeight(int j) override; void viewWillAppear() override; void didBecomeFirstResponder() override; protected: static constexpr KDCoordinate k_cellHeight = 20; /* Editable cell might be not wide enough to display * LargeNumberOfSignificantDigits, we update the buffer to the column width. */ size_t cellBufferSize(int i) { return columnWidth(i)/KDFont::SmallFont->glyphSize().width()+1; } private: virtual bool cellAtLocationIsEditable(int columnIndex, int rowIndex) = 0; virtual bool setDataAtLocation(double floatBody, int columnIndex, int rowIndex) = 0; virtual double dataAtLocation(int columnIndex, int rowIndex) = 0; virtual int numberOfElementsInColumn(int columnIndex) = 0; virtual int maxNumberOfElements() const = 0; }; } #endif