/* * Copyright (c) 2011, Nikolaus Moll * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the jo-widgets.org nor the * names of its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL jo-widgets.org BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * DAMAGE. */ package org.jowidgets.impl.layout.tablelayout; import org.jowidgets.api.layout.tablelayout.ITableLayoutBuilder; import org.jowidgets.util.Assert; public final class TableLayoutBuilder implements ITableLayoutBuilder { private int columnCount; private int[] widths; private int[] gaps; private ColumnMode[] modes; private Alignment[] alignments; private int verticalGap; private int layoutMinRows; public TableLayoutBuilder() { layoutMinRows = 1; } @Override public TableLayoutBuilder verticalGap(final int verticalGap) { this.verticalGap = verticalGap; return this; } @Override public TableLayoutBuilder layoutMinRows(final int layoutMinRows) { this.layoutMinRows = layoutMinRows; return this; } @Override public TableLayoutBuilder columnCount(final int columnCount) { this.columnCount = columnCount; initializeArrays(); return this; } private void initializeArrays() { if (widths == null) { widths = new int[columnCount]; } if (gaps == null) { gaps = new int[columnCount + 1]; } if (modes == null) { modes = new ColumnMode[columnCount]; for (int i = 0; i < modes.length; i++) { modes[i] = ColumnMode.PREFERRED; } } if (alignments == null) { alignments = new Alignment[columnCount]; for (int i = 0; i < alignments.length; i++) { alignments[i] = Alignment.LEFT; } } } @Override public TableLayoutBuilder widths(final int[] widths) { Assert.paramNotNull(widths, "widths"); if ((columnCount > 0) && (widths.length != columnCount)) { throw new IllegalArgumentException("Column count does not match."); } if (columnCount == 0) { columnCount = widths.length; initializeArrays(); } this.widths = widths; return this; } @Override public TableLayoutBuilder gaps(final int[] gaps) { Assert.paramNotNull(gaps, "gaps"); if ((columnCount > 0) && (gaps.length != columnCount + 1)) { throw new IllegalArgumentException("Column count does not match."); } if (columnCount == 0) { columnCount = gaps.length - 1; initializeArrays(); } this.gaps = gaps; return this; } @Override public TableLayoutBuilder modes(final ColumnMode[] modes) { Assert.paramNotNull(modes, "modes"); if ((columnCount > 0) && (modes.length != columnCount)) { throw new IllegalArgumentException("Column count does not match."); } if (columnCount == 0) { columnCount = modes.length; initializeArrays(); } this.modes = modes; return this; } @Override public TableLayoutBuilder alignments(final Alignment[] alignments) { Assert.paramNotNull(alignments, "alignments"); if ((columnCount > 0) && (alignments.length != columnCount)) { throw new IllegalArgumentException("Column count does not match."); } if (columnCount == 0) { columnCount = alignments.length; initializeArrays(); } this.alignments = alignments; return this; } @Override public TableLayoutBuilder fixedColumnWidth(final int column, final int width) { widths[column] = width; modes[column] = ColumnMode.FIXED; return this; } @Override public TableLayoutBuilder columnMode(final int column, final ColumnMode mode) { modes[column] = mode; return this; } @Override public TableLayoutBuilder columnAlignment(final int column, final Alignment alignment) { alignments[column] = alignment; return this; } @Override public TableLayoutBuilder gap(final int gap) { for (int i = 0; i < gaps.length; i++) { gaps[i] = gap; } return this; } @Override public TableLayoutBuilder gapBeforeColumn(final int column, final int gap) { gaps[column] = gap; return this; } @Override public TableLayoutBuilder gapAfterColumn(final int column, final int gap) { gaps[column + 1] = gap; return this; } @Override public TableLayoutBuilder alignment(final int index, final Alignment alignment) { alignments[index] = alignment; return this; } @Override public TableLayoutImpl build() { return new TableLayoutImpl(widths, gaps, modes, alignments, verticalGap, layoutMinRows); } }