protected Size2D arrangeNN(BlockContainer container, Graphics2D g2) {
        double x = 0.0;
        double width = 0.0;
        double maxHeight = 0.0;
        List blocks = container.getBlocks();
        int blockCount = blocks.size();
        if (blockCount > 0) {
            Size2D[] sizes = new Size2D[blocks.size()];
            for (int i = 0; i < blocks.size(); i++) {
                Block block = (Block) blocks.get(i);
                sizes[i] = block.arrange(g2, RectangleConstraint.NONE);
                width = width + sizes[i].getWidth();
                maxHeight = Math.max(sizes[i].height, maxHeight);
                block.setBounds(
                    new Rectangle2D.Double(
                        x, 0.0, sizes[i].width, sizes[i].height
                    )
                );
                x = x + sizes[i].width + this.horizontalGap;
            }
            if (blockCount > 1) {
                width = width + this.horizontalGap * (blockCount - 1);   
            }
            if (this.verticalAlignment != VerticalAlignment.TOP) {
                for (int i = 0; i < blocks.size(); i++) {
                    //Block b = (Block) blocks.get(i);
                    if (this.verticalAlignment == VerticalAlignment.CENTER) {
                        //TODO: shift block down by half
                    }
                    else if (this.verticalAlignment 
                            == VerticalAlignment.BOTTOM) {
                        //TODO: shift block down to bottom
                    }
                }            
            }
        }
        return new Size2D(width, maxHeight);
    }