From d5606367d7bc9c9e40bc9becd847238bd271e944 Mon Sep 17 00:00:00 2001 From: Romain Goyet Date: Tue, 14 Jun 2016 17:04:46 +0200 Subject: [PATCH] Escher: Add TableView::cellAtIndex Change-Id: I7b78b7fa05d4c1390dd7c58ef098b3708c972119 --- escher/include/escher/table_view.h | 6 +++++- escher/src/table_view.cpp | 20 ++++++++++++++++---- 2 files changed, 21 insertions(+), 5 deletions(-) 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(); +}