if (token instanceof PixelLayoutToken && head.isRendered()) {
int pixel = ((PixelLayoutToken) token).getPixel();
heads[i].setCurrent(Measure.valueOf(pixel)); // XXX refactor
}
IntervalList intervalList = new IntervalList();
for (int j = 0; j < heads2.length; j++) {
Cell cell = grid.getCell(i, j, orientation);
if (cell instanceof OriginCell) {
OriginCell origin = (OriginCell) cell;
LayoutComponent component = cell.getComponent();
if (component instanceof LayoutContainer) {
((LayoutContainer) component).getLayoutManager().preProcessing(orientation);
}
if (token instanceof AutoLayoutToken || token instanceof RelativeLayoutToken) {
if (origin.getSpan(orientation) == 1 && component.isRendered()) {
intervalList.add(new Interval(component, orientation));
} else {
if (LOG.isDebugEnabled()) {
LOG.debug("Components with span > 1 will be ignored in 'auto' layout rows/columns.");
// todo: give this information to the developer
}
}
}
}
}
intervalList.evaluate();
if (token instanceof AutoLayoutToken || token instanceof RelativeLayoutToken) {
heads[i].setIntervalList(intervalList);
}
if (token instanceof AutoLayoutToken) {
heads[i].setCurrent(intervalList.getCurrent());
}
i++;
}
IntervalList relatives = new IntervalList();
for (BankHead head : heads) {
LayoutToken token = head.getToken();
if (token instanceof RelativeLayoutToken) {
final int factor = ((RelativeLayoutToken) token).getFactor();
for (Interval interval : head.getIntervalList()) {
relatives.add(new Interval(interval, factor));
}
}
}
relatives.evaluate();
// set the size if all sizes of the grid are set
Measure sum = Measure.ZERO;
for (BankHead head : heads) {
Measure size;
final LayoutToken token = head.getToken();
if (token instanceof RelativeLayoutToken) {
final int factor = ((RelativeLayoutToken) token).getFactor();
size = relatives.getCurrent().multiply(factor);
} else {
size = head.getCurrent();
}
if (size == null) {
LOG.error("TODO: Should not happen!");