private void SpaceHorz(double offset, bool absolute)
{
if (!(this.ctlExpressG.Selection is DocDefinition))
return;
// find extents
DocRectangle dc = ((DocDefinition)this.ctlExpressG.Selection).DiagramRectangle;
double min = dc.X;
double max = dc.X + dc.Width;
double thick = 0.0;
SortedList<double, DocDefinition> sortlist = new SortedList<double, DocDefinition>();
foreach (DocDefinition docDef in this.ctlExpressG.Multiselection)
{
DocRectangle rcEach = docDef.DiagramRectangle;
if (min > rcEach.X)
min = rcEach.X;
if (max < rcEach.X + rcEach.Width)
max = rcEach.X + rcEach.Width;
thick += rcEach.Width;
if (!sortlist.ContainsKey(rcEach.X))
{
sortlist.Add(rcEach.X, docDef);
}
}
double spacing = (max - min - thick) / (this.ctlExpressG.Multiselection.Count - 1);
if (absolute)
{
spacing = offset;
}
else
{
spacing += offset;
}
double pos = min;
foreach (DocDefinition docDef in sortlist.Values)
{
if (pos != min) // skip the first one
{
docDef.DiagramRectangle.X = pos;
}
pos += docDef.DiagramRectangle.Width + spacing;
this.ctlExpressG.LayoutDefinition(docDef);
}
this.ctlExpressG.Redraw();
}