public void actionPerformed(ActionEvent e) {
if (!isEnabled()) return;
caculateAffectedArea();
DrawingEditor drawingEditor = (DrawingEditor)getValue(ConstantDefinition.DRAWING_EDITOR);
Iterator iterator = drawingEditor.getCurrentView().getSelection().iterator();
int figureCount = 0;
arrayList.clear();
while (iterator.hasNext()) {
Figure figure = (Figure) iterator.next();
if (!(figure instanceof ConnectionFigure)) {
figureCount++;
Point center = figure.center();
if (arrayList.isEmpty()) {
arrayList.add(figure);
} else {
int i;
for (i = 0; i < arrayList.size(); i++) {
Figure fig = (Figure) arrayList.get(i);
if (center.y < fig.center().y) {
arrayList.add(i, figure);
break;
}
}
if (i == arrayList.size())
arrayList.add(figure);
}
}
}
int filled = 0;
for (int i = 0; i < arrayList.size(); i++) {
Figure fig = (Figure) arrayList.get(i);
if ((i == 0) || (i == arrayList.size() - 1)) {
filled += fig.getDisplayBox().height / 2;
} else {
filled += fig.getDisplayBox().height;
}
}
double unit = (rect.height * 1.0 - filled) / (figureCount - 1);
Rectangle r = ((Figure) arrayList.get(0)).getDisplayBox();
int base = r.y + r.height;
for (int i = 1; i < arrayList.size() - 1; i++) {
Figure fig = (Figure) arrayList.get(i);
fig.moveBy(0, (int) (base + unit * i - fig.getDisplayBox(r).y));
base += r.height;
}
drawingEditor.getCurrentView().repairDamage();
}