When building a subtree from a template, nodes are now unique until we find one with the "uri='...'" attribute set.

This commit is contained in:
rjc%netscape.com 1999-06-20 09:11:25 +00:00
Родитель 39dc776760
Коммит ab02b90827
4 изменённых файлов: 38 добавлений и 17 удалений

Просмотреть файл

@ -912,7 +912,7 @@ RDFGenericBuilderImpl::FindTemplateForResource(nsIRDFResource *aNode, nsIContent
NS_IMETHODIMP
RDFGenericBuilderImpl::PopulateWidgetItemSubtree(nsIContent *aTemplateRoot, nsIContent *aTemplate,
nsIContent *treeChildren, nsIContent* aElement, nsIRDFResource* aProperty,
nsIContent *treeChildren, nsIContent* aElement, PRBool isUnique, nsIRDFResource* aProperty,
nsIRDFResource* aValue, PRInt32 aNaturalOrderPos)
{
PRInt32 count;
@ -939,6 +939,7 @@ RDFGenericBuilderImpl::PopulateWidgetItemSubtree(nsIContent *aTemplateRoot, nsIC
if (idValue.EqualsIgnoreCase("..."))
{
isContainmentElement = PR_TRUE;
isUnique=PR_FALSE;
}
}
}
@ -947,7 +948,13 @@ RDFGenericBuilderImpl::PopulateWidgetItemSubtree(nsIContent *aTemplateRoot, nsIC
if (NS_SUCCEEDED(rv = aTemplateKid->GetTag(*getter_AddRefs(tag))))
{
nsCOMPtr<nsIContent> treeGrandchild;
if (isContainmentElement == PR_TRUE)
if (isUnique == PR_TRUE)
{
if (NS_FAILED(rv = EnsureElementHasGenericChild(treeChildren,
nameSpaceID, tag, getter_AddRefs(treeGrandchild))))
continue;
}
else if (isContainmentElement == PR_TRUE)
{
if (NS_FAILED(rv = CreateElement(nameSpaceID,
tag, aValue, getter_AddRefs(treeGrandchild))))
@ -1154,7 +1161,7 @@ RDFGenericBuilderImpl::PopulateWidgetItemSubtree(nsIContent *aTemplateRoot, nsIC
if (numTemplateKids > 0)
{
rv = PopulateWidgetItemSubtree(aTemplateRoot, aTemplateKid, treeGrandchild,
aElement, aProperty, aValue, aNaturalOrderPos);
aElement, isUnique, aProperty, aValue, aNaturalOrderPos);
}
}
@ -1244,8 +1251,8 @@ RDFGenericBuilderImpl::CreateWidgetItem(nsIContent *aElement, nsIRDFResource *aP
}
}
}
rv = PopulateWidgetItemSubtree(aTemplate, aTemplate, children,
aElement, aProperty, aValue, aNaturalOrderPos);
rv = PopulateWidgetItemSubtree(aTemplate, aTemplate, children, aElement,
PR_TRUE, aProperty, aValue, aNaturalOrderPos);
}
else
{

Просмотреть файл

@ -912,7 +912,7 @@ RDFGenericBuilderImpl::FindTemplateForResource(nsIRDFResource *aNode, nsIContent
NS_IMETHODIMP
RDFGenericBuilderImpl::PopulateWidgetItemSubtree(nsIContent *aTemplateRoot, nsIContent *aTemplate,
nsIContent *treeChildren, nsIContent* aElement, nsIRDFResource* aProperty,
nsIContent *treeChildren, nsIContent* aElement, PRBool isUnique, nsIRDFResource* aProperty,
nsIRDFResource* aValue, PRInt32 aNaturalOrderPos)
{
PRInt32 count;
@ -939,6 +939,7 @@ RDFGenericBuilderImpl::PopulateWidgetItemSubtree(nsIContent *aTemplateRoot, nsIC
if (idValue.EqualsIgnoreCase("..."))
{
isContainmentElement = PR_TRUE;
isUnique=PR_FALSE;
}
}
}
@ -947,7 +948,13 @@ RDFGenericBuilderImpl::PopulateWidgetItemSubtree(nsIContent *aTemplateRoot, nsIC
if (NS_SUCCEEDED(rv = aTemplateKid->GetTag(*getter_AddRefs(tag))))
{
nsCOMPtr<nsIContent> treeGrandchild;
if (isContainmentElement == PR_TRUE)
if (isUnique == PR_TRUE)
{
if (NS_FAILED(rv = EnsureElementHasGenericChild(treeChildren,
nameSpaceID, tag, getter_AddRefs(treeGrandchild))))
continue;
}
else if (isContainmentElement == PR_TRUE)
{
if (NS_FAILED(rv = CreateElement(nameSpaceID,
tag, aValue, getter_AddRefs(treeGrandchild))))
@ -1154,7 +1161,7 @@ RDFGenericBuilderImpl::PopulateWidgetItemSubtree(nsIContent *aTemplateRoot, nsIC
if (numTemplateKids > 0)
{
rv = PopulateWidgetItemSubtree(aTemplateRoot, aTemplateKid, treeGrandchild,
aElement, aProperty, aValue, aNaturalOrderPos);
aElement, isUnique, aProperty, aValue, aNaturalOrderPos);
}
}
@ -1244,8 +1251,8 @@ RDFGenericBuilderImpl::CreateWidgetItem(nsIContent *aElement, nsIRDFResource *aP
}
}
}
rv = PopulateWidgetItemSubtree(aTemplate, aTemplate, children,
aElement, aProperty, aValue, aNaturalOrderPos);
rv = PopulateWidgetItemSubtree(aTemplate, aTemplate, children, aElement,
PR_TRUE, aProperty, aValue, aNaturalOrderPos);
}
else
{

Просмотреть файл

@ -70,8 +70,8 @@ public:
NS_IMETHOD FindTemplateForResource(nsIRDFResource *aNode, nsIContent **theTemplate);
NS_IMETHOD IsTemplateRuleMatch(nsIRDFResource *aNode, nsIContent *aRule, PRBool *matchingRuleFound);
NS_IMETHOD PopulateWidgetItemSubtree(nsIContent *aTemplateRoot, nsIContent *aTemplate,
nsIContent *treeCell, nsIContent* aElement, nsIRDFResource* aProperty,
nsIRDFResource* aValue, PRInt32 aNaturalOrderPos);
nsIContent *treeCell, nsIContent* aElement, PRBool isUnique,
nsIRDFResource* aProperty, nsIRDFResource* aValue, PRInt32 aNaturalOrderPos);
NS_IMETHOD CreateWidgetItem(nsIContent* aElement, nsIRDFResource* aProperty,
nsIRDFResource* aValue, PRInt32 aNaturalOrderPos);

Просмотреть файл

@ -912,7 +912,7 @@ RDFGenericBuilderImpl::FindTemplateForResource(nsIRDFResource *aNode, nsIContent
NS_IMETHODIMP
RDFGenericBuilderImpl::PopulateWidgetItemSubtree(nsIContent *aTemplateRoot, nsIContent *aTemplate,
nsIContent *treeChildren, nsIContent* aElement, nsIRDFResource* aProperty,
nsIContent *treeChildren, nsIContent* aElement, PRBool isUnique, nsIRDFResource* aProperty,
nsIRDFResource* aValue, PRInt32 aNaturalOrderPos)
{
PRInt32 count;
@ -939,6 +939,7 @@ RDFGenericBuilderImpl::PopulateWidgetItemSubtree(nsIContent *aTemplateRoot, nsIC
if (idValue.EqualsIgnoreCase("..."))
{
isContainmentElement = PR_TRUE;
isUnique=PR_FALSE;
}
}
}
@ -947,7 +948,13 @@ RDFGenericBuilderImpl::PopulateWidgetItemSubtree(nsIContent *aTemplateRoot, nsIC
if (NS_SUCCEEDED(rv = aTemplateKid->GetTag(*getter_AddRefs(tag))))
{
nsCOMPtr<nsIContent> treeGrandchild;
if (isContainmentElement == PR_TRUE)
if (isUnique == PR_TRUE)
{
if (NS_FAILED(rv = EnsureElementHasGenericChild(treeChildren,
nameSpaceID, tag, getter_AddRefs(treeGrandchild))))
continue;
}
else if (isContainmentElement == PR_TRUE)
{
if (NS_FAILED(rv = CreateElement(nameSpaceID,
tag, aValue, getter_AddRefs(treeGrandchild))))
@ -1154,7 +1161,7 @@ RDFGenericBuilderImpl::PopulateWidgetItemSubtree(nsIContent *aTemplateRoot, nsIC
if (numTemplateKids > 0)
{
rv = PopulateWidgetItemSubtree(aTemplateRoot, aTemplateKid, treeGrandchild,
aElement, aProperty, aValue, aNaturalOrderPos);
aElement, isUnique, aProperty, aValue, aNaturalOrderPos);
}
}
@ -1244,8 +1251,8 @@ RDFGenericBuilderImpl::CreateWidgetItem(nsIContent *aElement, nsIRDFResource *aP
}
}
}
rv = PopulateWidgetItemSubtree(aTemplate, aTemplate, children,
aElement, aProperty, aValue, aNaturalOrderPos);
rv = PopulateWidgetItemSubtree(aTemplate, aTemplate, children, aElement,
PR_TRUE, aProperty, aValue, aNaturalOrderPos);
}
else
{