void XULSortServiceImpl::SetSortColumnHints(nsIContent *content, const nsAString &sortResource, const nsAString &sortDirection) { // set sort info on current column. This ensures that the // column header sort indicator is updated properly. for (nsIContent* child = content->GetFirstChild(); child; child = child->GetNextSibling()) { if (child->IsXULElement(nsGkAtoms::treecols)) { SetSortColumnHints(child, sortResource, sortDirection); } else if (child->IsXULElement(nsGkAtoms::treecol)) { nsAutoString value; child->GetAttr(kNameSpaceID_None, nsGkAtoms::sort, value); // also check the resource attribute for older code if (value.IsEmpty()) child->GetAttr(kNameSpaceID_None, nsGkAtoms::resource, value); if (value == sortResource) { child->SetAttr(kNameSpaceID_None, nsGkAtoms::sortActive, NS_LITERAL_STRING("true"), true); child->SetAttr(kNameSpaceID_None, nsGkAtoms::sortDirection, sortDirection, true); // Note: don't break out of loop; want to set/unset // attribs on ALL sort columns } else if (!value.IsEmpty()) { child->UnsetAttr(kNameSpaceID_None, nsGkAtoms::sortActive, true); child->UnsetAttr(kNameSpaceID_None, nsGkAtoms::sortDirection, true); } } } }
void XULSortServiceImpl::SetSortColumnHints(nsIContent *content, const nsAString &sortResource, const nsAString &sortDirection) { // set sort info on current column. This ensures that the // column header sort indicator is updated properly. PRUint32 numChildren = content->GetChildCount(); for (PRUint32 childIndex = 0; childIndex < numChildren; ++childIndex) { nsIContent *child = content->GetChildAt(childIndex); if (child->IsNodeOfType(nsINode::eXUL)) { nsIAtom *tag = child->Tag(); if (tag == nsGkAtoms::treecols) { SetSortColumnHints(child, sortResource, sortDirection); } else if (tag == nsGkAtoms::treecol) { nsAutoString value; child->GetAttr(kNameSpaceID_None, nsGkAtoms::sort, value); // also check the resource attribute for older code if (value.IsEmpty()) child->GetAttr(kNameSpaceID_None, nsGkAtoms::resource, value); if (value == sortResource) { child->SetAttr(kNameSpaceID_None, nsGkAtoms::sortActive, NS_LITERAL_STRING("true"), PR_TRUE); child->SetAttr(kNameSpaceID_None, nsGkAtoms::sortDirection, sortDirection, PR_TRUE); // Note: don't break out of loop; want to set/unset // attribs on ALL sort columns } else if (!value.IsEmpty()) { child->UnsetAttr(kNameSpaceID_None, nsGkAtoms::sortActive, PR_TRUE); child->UnsetAttr(kNameSpaceID_None, nsGkAtoms::sortDirection, PR_TRUE); } } } } }
void XULSortServiceImpl::SetSortHints(nsIContent *aNode, nsSortState* aSortState) { // set sort and sortDirection attributes when is sort is done aNode->SetAttr(kNameSpaceID_None, nsGkAtoms::sort, aSortState->sort, true); nsAutoString direction; if (aSortState->direction == nsSortState_descending) direction.AssignLiteral("descending"); else if (aSortState->direction == nsSortState_ascending) direction.AssignLiteral("ascending"); aNode->SetAttr(kNameSpaceID_None, nsGkAtoms::sortDirection, direction, true); // for trees, also set the sort info on the currently sorted column if (aNode->NodeInfo()->Equals(nsGkAtoms::tree, kNameSpaceID_XUL)) { if (aSortState->sortKeys.Count() >= 1) { nsAutoString sortkey; aSortState->sortKeys[0]->ToString(sortkey); SetSortColumnHints(aNode, sortkey, direction); } } }