Files
Upsilon/apps/shared/store_selectable_table_view.cpp
Hugo Saint-Vignes 70830e0b74 [escher] Scroll speed increase for long repetition in selectable table
Change-Id: Idfc3edcedff5a933b6f2168b475e22ea56ea0ab0
2020-11-04 14:45:34 +01:00

44 lines
1.6 KiB
C++

#include "store_selectable_table_view.h"
namespace Shared {
StoreSelectableTableView::StoreSelectableTableView(DoublePairStore * store, Responder * parentResponder, TableViewDataSource * dataSource, SelectableTableViewDataSource * selectionDataSource, SelectableTableViewDelegate * delegate) :
SelectableTableView(parentResponder, dataSource, selectionDataSource, delegate),
m_store(store)
{
}
bool StoreSelectableTableView::handleEvent(Ion::Events::Event event) {
int step = Ion::Events::longRepetitionScrollSpeed();
if (event == Ion::Events::Down) {
return selectNonHiddenCellAtClippedLocation(selectedColumn(), selectedRow() + step);
}
if (event == Ion::Events::Up) {
return selectNonHiddenCellAtClippedLocation(selectedColumn(), selectedRow() - step);
}
if (event == Ion::Events::Left) {
return selectNonHiddenCellAtClippedLocation(selectedColumn() - step, selectedRow());
}
if (event == Ion::Events::Right) {
return selectNonHiddenCellAtClippedLocation(selectedColumn() + step, selectedRow());
}
return false;
}
bool StoreSelectableTableView::selectNonHiddenCellAtClippedLocation(int i, int j) {
// Clip i to retrieve a valid seriesIndex
if (i < 0) {
i = 0;
} else if (i >= dataSource()->numberOfColumns()) {
i = dataSource()->numberOfColumns() - 1;
}
int seriesIndex = i / DoublePairStore::k_numberOfColumnsPerSeries;
int numberOfPairsOfCurrentSeries = m_store->numberOfPairsOfSeries(seriesIndex);
if (j > 1 + numberOfPairsOfCurrentSeries) {
j = 1 + numberOfPairsOfCurrentSeries;
}
return selectCellAtClippedLocation(i, j);
}
}