void nsTreeContentView::SerializeItem(Element* aContent, int32_t aParentIndex, int32_t* aIndex, nsTArray<UniquePtr<Row>>& aRows) { if (aContent->AttrValueIs(kNameSpaceID_None, nsGkAtoms::hidden, nsGkAtoms::_true, eCaseMatters)) return; aRows.AppendElement(MakeUnique<Row>(aContent, aParentIndex)); Row* row = aRows.LastElement().get(); if (aContent->AttrValueIs(kNameSpaceID_None, nsGkAtoms::container, nsGkAtoms::_true, eCaseMatters)) { row->SetContainer(true); if (aContent->AttrValueIs(kNameSpaceID_None, nsGkAtoms::open, nsGkAtoms::_true, eCaseMatters)) { row->SetOpen(true); nsIContent* child = nsTreeUtils::GetImmediateChild(aContent, nsGkAtoms::treechildren); if (child && child->IsXULElement()) { // Now, recursively serialize our child. int32_t count = aRows.Length(); int32_t index = 0; Serialize(child, aParentIndex + *aIndex + 1, &index, aRows); row->mSubtreeSize += aRows.Length() - count; } else row->SetEmpty(true); } else if (aContent->AttrValueIs(kNameSpaceID_None, nsGkAtoms::empty, nsGkAtoms::_true, eCaseMatters)) { row->SetEmpty(true); } } }
void nsTreeContentView::CloseContainer(int32_t aIndex) { Row* row = mRows[aIndex].get(); row->SetOpen(false); int32_t count = RemoveSubtree(aIndex); if (mBoxObject) { mBoxObject->InvalidateRow(aIndex); mBoxObject->RowCountChanged(aIndex + 1, -count); } }
void nsTreeContentView::OpenContainer(int32_t aIndex) { Row* row = mRows[aIndex].get(); row->SetOpen(true); int32_t count = EnsureSubtree(aIndex); if (mBoxObject) { mBoxObject->InvalidateRow(aIndex); mBoxObject->RowCountChanged(aIndex + 1, count); } }