diff --git a/escher/include/escher/table_view.h b/escher/include/escher/table_view.h index 06b7c7ff0..e67da825c 100644 --- a/escher/include/escher/table_view.h +++ b/escher/include/escher/table_view.h @@ -15,9 +15,10 @@ public: class TableView : public ScrollView { public: TableView(TableViewDataSource * dataSource); + void layoutSubviews() override; void scrollToRow(int index); - void layoutSubviews() override; + View * cellAtIndex(int index); protected: #if ESCHER_VIEW_LOGGING const char * className() const override; @@ -31,12 +32,15 @@ private: View * subview(int index) override; void storeSubviewAtIndex(View * view, int index) override; void layoutSubviews() override; + + View * cellAtIndex(int index); protected: #if ESCHER_VIEW_LOGGING const char * className() const override; #endif private: int numberOfDisplayableCells() const; + int cellScrollingOffset() const; TableViewDataSource * m_dataSource; }; diff --git a/escher/src/table_view.cpp b/escher/src/table_view.cpp index 1c278a4f8..0cd0dfe57 100644 --- a/escher/src/table_view.cpp +++ b/escher/src/table_view.cpp @@ -30,6 +30,10 @@ void TableView::scrollToRow(int index) { setContentOffset(contentOffset); } +View * TableView::cellAtIndex(int index) { + return m_contentView.cellAtIndex(index); +} + #if ESCHER_VIEW_LOGGING const char * TableView::className() const { return "TableView"; @@ -62,10 +66,7 @@ void TableView::ContentView::storeSubviewAtIndex(View * view, int index) { } void TableView::ContentView::layoutSubviews() { - /* Here, we want to translate the offset at which our superview is displaying - * us into an integer offset we can use to ask cells to our data source. */ - KDCoordinate pixelScrollingOffset = m_frame.y; - int cellOffset = pixelScrollingOffset / m_dataSource->cellHeight(); + int cellOffset = cellScrollingOffset(); for (int i=0; ireusableCell(index - cellScrollingOffset()); +} + #if ESCHER_VIEW_LOGGING const char * TableView::ContentView::className() const { return "TableView::ContentView"; @@ -94,3 +99,10 @@ int TableView::ContentView::numberOfDisplayableCells() const { assert(result <= m_dataSource->reusableCellCount()); return result; } + +int TableView::ContentView::cellScrollingOffset() const { + /* Here, we want to translate the offset at which our superview is displaying + * us into an integer offset we can use to ask cells to our data source. */ + KDCoordinate pixelScrollingOffset = m_frame.y; + return pixelScrollingOffset / m_dataSource->cellHeight(); +}