private void toolStripMenuItemDiagramFormatPageRef_Click(object sender, EventArgs e)
{
TreeNode tnSchema = this.treeView.SelectedNode;
DocDefinition docDefinition = (DocDefinition)tnSchema.Tag;
while (!(tnSchema.Tag is DocSchema) && tnSchema.Parent != null)
{
tnSchema = tnSchema.Parent;
}
if (tnSchema.Tag is DocSchema)
{
bool bCreate = true;
DocSchema docSchema = (DocSchema)tnSchema.Tag;
foreach (DocPageTarget docPageTarget in docSchema.PageTargets)
{
if (docPageTarget.Definition == docDefinition)
{
// already exists - delete it
foreach (DocPageSource docPageSource in docPageTarget.Sources)
{
RedirectReference(docSchema, docPageSource, docDefinition, true);
}
// delete the page target
int index = docSchema.PageTargets.IndexOf(docPageTarget);
docSchema.PageTargets.RemoveAt(index);
docPageTarget.Delete();
// remove from tree
tnSchema.Nodes[7].Nodes[index].Remove();
bCreate = false;
break;
}
}
if (bCreate)
{
// doesn't exist, so create one
DocPageTarget docTarget = new DocPageTarget();
docSchema.PageTargets.Add(docTarget);
docTarget.DiagramNumber = docDefinition.DiagramNumber;
docTarget.Definition = docDefinition;
docTarget.DiagramRectangle = new DocRectangle();
docTarget.DiagramRectangle.X = docDefinition.DiagramRectangle.X;
docTarget.DiagramRectangle.Y = docDefinition.DiagramRectangle.Y - 200.0;
docTarget.DiagramRectangle.Width = 400.0;
docTarget.DiagramRectangle.Height = 100.0;
docTarget.DiagramLine.Add(new DocPoint());
docTarget.DiagramLine.Add(new DocPoint());
docTarget.DiagramLine.Add(new DocPoint());
RedirectReference(docSchema, docDefinition, docTarget, false);
LoadNode(tnSchema.Nodes[7], docTarget, docTarget.Name, false);
this.ctlExpressG.LayoutDefinition(docDefinition);
}
// renumber page references
Dictionary<int, int> counters = new Dictionary<int, int>();
foreach (DocPageTarget docPageTarget in docSchema.PageTargets)
{
SortedList<int, int> listPages = new SortedList<int, int>();
if(!counters.ContainsKey(docPageTarget.DiagramNumber))
{
counters.Add(docPageTarget.DiagramNumber, 0);
}
counters[docPageTarget.DiagramNumber]++;
docPageTarget.Name = docPageTarget.DiagramNumber + "," + counters[docPageTarget.DiagramNumber];
foreach(DocPageSource docPageSource in docPageTarget.Sources)
{
if(!listPages.ContainsKey(docPageSource.DiagramNumber))
{
listPages.Add(docPageSource.DiagramNumber, docPageSource.DiagramNumber);
}
if (docPageTarget.Definition != null) // older files didn't have this
{
docPageSource.Name = docPageTarget.Name + " " + docPageTarget.Definition.Name;
}
}
docPageTarget.Name += "(";
foreach(int i in listPages.Keys)
{
if(!docPageTarget.Name.EndsWith("("))
{
docPageTarget.Name += ",";
}
docPageTarget.Name += i.ToString();
}
docPageTarget.Name += ")";
}
this.ctlExpressG.Redraw();
}
}