void updateVisibleArea (const bool makeSureItUpdatesContent) { hasUpdated = false; const int newX = getViewedComponent()->getX(); int newY = getViewedComponent()->getY(); const int newW = jmax (owner.minimumRowWidth, getMaximumVisibleWidth()); const int newH = owner.totalItems * owner.getRowHeight(); if (newY + newH < getMaximumVisibleHeight() && newH > getMaximumVisibleHeight()) newY = getMaximumVisibleHeight() - newH; getViewedComponent()->setBounds (newX, newY, newW, newH); if (makeSureItUpdatesContent && ! hasUpdated) updateContents(); }
void updateContents() { hasUpdated = true; const int rowHeight = owner.getRowHeight(); if (rowHeight > 0) { const int y = getViewPositionY(); const int w = getViewedComponent()->getWidth(); const int numNeeded = 2 + getMaximumVisibleHeight() / rowHeight; rows.removeRange (numNeeded, rows.size()); while (numNeeded > rows.size()) { ListBoxRowComponent* newRow = new ListBoxRowComponent (owner); rows.add (newRow); getViewedComponent()->addAndMakeVisible (newRow); } firstIndex = y / rowHeight; firstWholeIndex = (y + rowHeight - 1) / rowHeight; lastWholeIndex = (y + getMaximumVisibleHeight() - 1) / rowHeight; for (int i = 0; i < numNeeded; ++i) { const int row = i + firstIndex; ListBoxRowComponent* const rowComp = getComponentForRow (row); if (rowComp != nullptr) { rowComp->setBounds (0, row * rowHeight, w, rowHeight); rowComp->update (row, owner.isRowSelected (row)); } } } if (owner.headerComponent != nullptr) owner.headerComponent->setBounds (owner.outlineThickness + getViewedComponent()->getX(), owner.outlineThickness, jmax (owner.getWidth() - owner.outlineThickness * 2, getViewedComponent()->getWidth()), owner.headerComponent->getHeight()); }
int getRowNumberOfComponent (Component* const rowComponent) const noexcept { const int index = getViewedComponent()->getIndexOfChildComponent (rowComponent); const int num = rows.size(); for (int i = num; --i >= 0;) if (((firstIndex + i) % jmax (1, num)) == index) return firstIndex + i; return -1; }
void updateComponents (const bool triggerResize = false) { TreeViewContentComponent* const tvc = static_cast <TreeViewContentComponent*> (getViewedComponent()); if (tvc != 0) { if (triggerResize) tvc->resized(); else tvc->updateComponents(); } repaint(); }