private void DeleteReferencesForSchemaDefinition(DocSchema docSchema, DocDefinition docDef)
{
// delete attribute(s) referencing the definition
foreach (DocEntity docEnt in docSchema.Entities)
{
for (int iAttr = docEnt.Attributes.Count - 1; iAttr >= 0; iAttr--)
{
DocAttribute docAttr = docEnt.Attributes[iAttr];
if (docAttr.Definition == docDef)
{
docAttr.Delete();
docEnt.Attributes.RemoveAt(iAttr);
}
}
}
for(int iType = docSchema.Types.Count-1; iType >= 0; iType--)
{
DocType docType = docSchema.Types[iType];
if (docType is DocDefined)
{
DocDefined docDefined = (DocDefined)docType;
if (docDefined.Definition == docDef)
{
docDefined.Delete();
docSchema.Types.RemoveAt(iType);
}
}
}
// delete page refs referencing the definition
for (int iPage = docSchema.PageTargets.Count - 1; iPage >= 0; iPage--)
{
DocPageTarget docPageTarget = docSchema.PageTargets[iPage];
if(docPageTarget.Definition == docDef)
{
// cascade deletion of sources
foreach(DocPageSource docPageSource in docPageTarget.Sources)
{
DeleteReferencesForSchemaDefinition(docSchema, docPageSource);
}
docPageTarget.Delete();
docSchema.PageTargets.RemoveAt(iPage);
}
}
this.ctlExpressG.Schema = docSchema; // redraw
}