/******************************************************************************* * Copyright (c) 2013 RelationWare, Benno Luthiger * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * RelationWare, Benno Luthiger ******************************************************************************/ package org.ripla.rap.util; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; /** * Helper class for widgets using <code>GridLayout</code>. * * @author Luthiger */ public final class GridLayoutHelper { public static enum Fill { FILL_HORIZONTAL, FILL_VERTICAL, FILL_BOTH; } private GridLayoutHelper() { } /** * @return {@link GridLayout} with zero margin */ public static GridLayout createGridLayout() { final GridLayout layout = new GridLayout(); layout.marginWidth = 0; layout.marginHeight = 0; layout.verticalSpacing = 0; return layout; } /** * Creates a <code>Composite</code> with zero margin <code>GridLayout</code> * * @param inParent * {@link Composite} * @return {@link Composite} */ public static Composite createComposite(final Composite inParent) { final Composite out = new Composite(inParent, SWT.NONE); out.setLayout(createGridLayout()); return out; } /** * Creates a <code>Composite</code> with zero margin <code>GridLayout</code> * using the specified <code>GridData</code>. * * @param inParent * {@link Composite} * @param inGridData * {@link GridData} * @return {@link Composite} */ public static Composite createComposite(final Composite inParent, final GridData inGridData) { final Composite out = new Composite(inParent, SWT.NONE); out.setLayout(createGridLayout()); out.setLayoutData(inGridData); return out; } /** * Creates a <code>GridData</code> that fills a composite with the specified * height. * * @param inHeight * int a minimum height for the row * @return {@link GridData} */ public static GridData createFillLayoutData(final int inHeight) { final GridData out = new GridData(SWT.DEFAULT, inHeight); prepareGridData(out, Fill.FILL_HORIZONTAL); return out; } /** * Creates a <code>GridData</code> that fills a composite (in both * dimensions). * * @return {@link GridData} */ public static GridData createFillLayoutData() { return createFillLayoutData(Fill.FILL_BOTH); } /** * Creates a <code>GridData</code> that fills a composite. * * @param inFill * {@link Fill} the fill dimension * @return {@link GridData} */ public static GridData createFillLayoutData(final Fill inFill) { final GridData out = new GridData(); prepareGridData(out, inFill); return out; } private static void prepareGridData(final GridData inData, final Fill inFill) { inData.grabExcessHorizontalSpace = true; switch (inFill) { case FILL_HORIZONTAL: inData.horizontalAlignment = GridData.FILL; break; case FILL_VERTICAL: inData.verticalAlignment = GridData.FILL; break; case FILL_BOTH: // default default: inData.horizontalAlignment = GridData.FILL; inData.verticalAlignment = GridData.FILL; } } }