[calculation] Get rid of DynamicViewController in HistoryController

This commit is contained in:
Émilie Feral
2018-09-10 12:59:15 +02:00
parent 6ff7e02df5
commit 27064d00f7
3 changed files with 27 additions and 44 deletions

View File

@@ -8,30 +8,34 @@ using namespace Shared;
namespace Calculation {
HistoryController::HistoryController(Responder * parentResponder, CalculationStore * calculationStore) :
DynamicViewController(parentResponder),
ViewController(parentResponder),
m_selectableTableView(this, this, this, this),
m_calculationHistory{},
m_calculationStore(calculationStore)
{
for (int i = 0; i < k_maxNumberOfDisplayedRows; i++) {
m_calculationHistory[i].setParentResponder(&m_selectableTableView);
}
}
void HistoryController::reload() {
selectableTableView()->reloadData();
m_selectableTableView.reloadData();
}
void HistoryController::didBecomeFirstResponder() {
selectCellAtLocation(0, numberOfRows()-1);
app()->setFirstResponder(selectableTableView());
app()->setFirstResponder(&m_selectableTableView);
}
void HistoryController::willExitResponderChain(Responder * nextFirstResponder) {
if (nextFirstResponder == parentResponder()) {
selectableTableView()->deselectTable();
m_selectableTableView.deselectTable();
}
}
bool HistoryController::handleEvent(Ion::Events::Event event) {
if (event == Ion::Events::Down) {
selectableTableView()->deselectTable();
m_selectableTableView.deselectTable();
app()->setFirstResponder(parentResponder());
return true;
}
@@ -40,10 +44,10 @@ bool HistoryController::handleEvent(Ion::Events::Event event) {
}
if (event == Ion::Events::OK || event == Ion::Events::EXE) {
int focusRow = selectedRow();
HistoryViewCell * selectedCell = (HistoryViewCell *)selectableTableView()->selectedCell();
HistoryViewCell * selectedCell = (HistoryViewCell *)m_selectableTableView.selectedCell();
HistoryViewCell::SubviewType subviewType = selectedCell->selectedSubviewType();
EditExpressionController * editController = (EditExpressionController *)parentResponder();
selectableTableView()->deselectTable();
m_selectableTableView.deselectTable();
app()->setFirstResponder(editController);
Calculation * calculation = m_calculationStore->calculationAtIndex(focusRow);
if (subviewType == HistoryViewCell::SubviewType::Input) {
@@ -60,9 +64,9 @@ bool HistoryController::handleEvent(Ion::Events::Event event) {
}
if (event == Ion::Events::Backspace) {
int focusRow = selectedRow();
HistoryViewCell * selectedCell = (HistoryViewCell *)selectableTableView()->selectedCell();
HistoryViewCell * selectedCell = (HistoryViewCell *)m_selectableTableView.selectedCell();
HistoryViewCell::SubviewType subviewType = selectedCell->selectedSubviewType();
selectableTableView()->deselectTable();
m_selectableTableView.deselectTable();
EditExpressionController * editController = (EditExpressionController *)parentResponder();
m_calculationStore->deleteCalculationAtIndex(focusRow);
reload();
@@ -71,20 +75,20 @@ bool HistoryController::handleEvent(Ion::Events::Event event) {
return true;
}
if (focusRow > 0) {
selectableTableView()->selectCellAtLocation(0, focusRow-1);
m_selectableTableView.selectCellAtLocation(0, focusRow-1);
} else {
selectableTableView()->selectCellAtLocation(0, 0);
m_selectableTableView.selectCellAtLocation(0, 0);
}
if (subviewType == HistoryViewCell::SubviewType::Input) {
tableViewDidChangeSelection(selectableTableView(), 0, selectedRow());
tableViewDidChangeSelection(&m_selectableTableView, 0, selectedRow());
} else {
tableViewDidChangeSelection(selectableTableView(), 0, -1);
tableViewDidChangeSelection(&m_selectableTableView, 0, -1);
}
selectableTableView()->scrollToCell(0, selectedRow());
m_selectableTableView.scrollToCell(0, selectedRow());
return true;
}
if (event == Ion::Events::Clear) {
selectableTableView()->deselectTable();
m_selectableTableView.deselectTable();
m_calculationStore->deleteAll();
reload();
app()->setFirstResponder(parentResponder());
@@ -92,7 +96,7 @@ bool HistoryController::handleEvent(Ion::Events::Event event) {
}
if (event == Ion::Events::Back) {
EditExpressionController * editController = (EditExpressionController *)parentResponder();
selectableTableView()->deselectTable();
m_selectableTableView.deselectTable();
app()->setFirstResponder(editController);
return true;
}
@@ -123,7 +127,7 @@ HighlightCell * HistoryController::reusableCell(int index, int type) {
assert(type == 0);
assert(index >= 0);
assert(index < k_maxNumberOfDisplayedRows);
return m_calculationHistory[index];
return &m_calculationHistory[index];
}
int HistoryController::reusableCellCount(int type) {
@@ -152,27 +156,7 @@ int HistoryController::typeAtLocation(int i, int j) {
}
void HistoryController::scrollToCell(int i, int j) {
selectableTableView()->scrollToCell(i, j);
}
CalculationSelectableTableView * HistoryController::selectableTableView() {
return (CalculationSelectableTableView *)view();
}
View * HistoryController::loadView() {
CalculationSelectableTableView * tableView = new CalculationSelectableTableView(this, this, this, this);
for (int i = 0; i < k_maxNumberOfDisplayedRows; i++) {
m_calculationHistory[i] = new HistoryViewCell(tableView);
}
return tableView;
}
void HistoryController::unloadView(View * view) {
for (int i = 0; i < k_maxNumberOfDisplayedRows; i++) {
delete m_calculationHistory[i];
m_calculationHistory[i] = nullptr;
}
delete view;
m_selectableTableView.scrollToCell(i, j);
}
}

View File

@@ -11,10 +11,10 @@ namespace Calculation {
class App;
class HistoryController : public DynamicViewController, public ListViewDataSource, public SelectableTableViewDataSource, public SelectableTableViewDelegate {
class HistoryController : public ViewController, public ListViewDataSource, public SelectableTableViewDataSource, public SelectableTableViewDelegate {
public:
HistoryController(Responder * parentResponder, CalculationStore * calculationStore);
View * view() override { return &m_selectableTableView; }
bool handleEvent(Ion::Events::Event event) override;
void didBecomeFirstResponder() override;
void willExitResponderChain(Responder * nextFirstResponder) override;
@@ -27,12 +27,11 @@ public:
int typeAtLocation(int i, int j) override;
void tableViewDidChangeSelection(SelectableTableView * t, int previousSelectedCellX, int previousSelectedCellY) override;
void scrollToCell(int i, int j);
View * loadView() override;
void unloadView(View * view) override;
private:
CalculationSelectableTableView * selectableTableView();
constexpr static int k_maxNumberOfDisplayedRows = 5;
HistoryViewCell * m_calculationHistory[k_maxNumberOfDisplayedRows];
CalculationSelectableTableView m_selectableTableView;
HistoryViewCell m_calculationHistory[k_maxNumberOfDisplayedRows];
CalculationStore * m_calculationStore;
};

View File

@@ -14,7 +14,7 @@ public:
Input,
Output
};
HistoryViewCell(Responder * parentResponder);
HistoryViewCell(Responder * parentResponder = nullptr);
void reloadCell() override;
void reloadScroll();
void setEven(bool even) override;