From aebc8d33306e31c1a661a5ade55c03cdfa67f33e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9a=20Saviot?= Date: Wed, 25 Jul 2018 16:57:31 +0200 Subject: [PATCH] [poincare] GridLayoutNode keep track of its number of children Before, the number of children was only computed with the number of rows and columns, but we might need to know the real number of added children during construction. --- poincare/include/poincare/grid_layout_node.h | 17 ++++++++++++++++- poincare/src/grid_layout_node.cpp | 2 +- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/poincare/include/poincare/grid_layout_node.h b/poincare/include/poincare/grid_layout_node.h index db0ba9a69..956f5ba49 100644 --- a/poincare/include/poincare/grid_layout_node.h +++ b/poincare/include/poincare/grid_layout_node.h @@ -17,12 +17,14 @@ class GridLayoutNode : public LayoutNode { public: GridLayoutNode() : LayoutNode(), + m_numberOfChildren(0), m_numberOfRows(0), m_numberOfColumns(0) {} void setNumberOfRows(int numberOfRows) { m_numberOfRows = numberOfRows; } void setNumberOfColumns(int numberOfColumns) { m_numberOfColumns = numberOfColumns; } + KDSize gridSize() const { return KDSize(width(), height()); } // LayoutNode void moveCursorLeft(LayoutCursor * cursor, bool * shouldRecomputeLayout) override; @@ -38,8 +40,20 @@ public: // TreeNode size_t size() const override { return sizeof(GridLayoutNode); } - int numberOfChildren() const override { return m_numberOfRows * m_numberOfColumns; } + int numberOfChildren() const override { return m_numberOfChildren; } + void incrementNumberOfChildren(int increment = 1) override { + assert(increment >= 0); + m_numberOfChildren += increment; + } + void decrementNumberOfChildren(int decrement = 1) override { + m_numberOfChildren -= decrement; + if (m_numberOfChildren < 0) { + m_numberOfChildren = 0; + } + } + void eraseNumberOfChildren() override { + m_numberOfChildren = 0; m_numberOfRows = 0; m_numberOfColumns = 0; } @@ -62,6 +76,7 @@ protected: int rowAtChildIndex(int index) const; int columnAtChildIndex(int index) const; int indexAtRowColumn(int rowIndex, int columnIndex) const; + int m_numberOfChildren; int m_numberOfRows; int m_numberOfColumns; diff --git a/poincare/src/grid_layout_node.cpp b/poincare/src/grid_layout_node.cpp index f55612979..9f011d295 100644 --- a/poincare/src/grid_layout_node.cpp +++ b/poincare/src/grid_layout_node.cpp @@ -162,7 +162,7 @@ int GridLayoutNode::indexAtRowColumn(int rowIndex, int columnIndex) const { } void GridLayoutNode::computeSize() { - m_frame.setSize(KDSize(width(), height())); + m_frame.setSize(gridSize()); m_sized = true; }