/******************************************************************************* * Copyright (c) 2008, 2015 IBM Corporation and others. * 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: * Stefan Xenos, IBM Corporation - initial API and implementation ******************************************************************************/ package org.eclipse.jface.layout; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.RowData; import org.eclipse.swt.widgets.Control; /** * This class provides a convenient shorthand for creating and initialising * RowData. This offers several benefits over creating RowData the normal way: * * <ul> * <li>The same factory can be used many times to create several RowData * instances</li> * <li>The setters on RowDataFactory all return "this", allowing them to be * chained</li> * </ul> * * @since 3.5 */ public final class RowDataFactory { private RowData data; /** * Creates a RowDataFactory that creates copies of the given RowData. * * @param data * object to be copied */ private RowDataFactory(RowData data) { this.data = data; } /** * Creates a new RowDataFactory initialized with the SWT defaults. * * <p> * Initial values are: * </p> * * <ul> * <li>exclude(false)</li> * <li>hint(SWT.DEFAULT, SWT.DEFAULT)</li> * </ul> * * @return a new GridDataFactory instance */ public static RowDataFactory swtDefaults() { return new RowDataFactory(new RowData()); } /** * Creates a new RowDataFactory that creates copies of the given RowData by * default. * * @param data * RowData to copy * @return a new RowDataFactory that creates copies of the argument by * default */ public static RowDataFactory createFrom(RowData data) { return new RowDataFactory(copyData(data)); } /** * Returns a copy of the given RowData * * @param data * RowData to copy * @return a copy of the argument */ public static RowData copyData(RowData data) { RowData newData = new RowData(data.width, data.height); newData.exclude = data.exclude; return newData; } /** * Instructs the GridLayout to ignore this control when performing layouts. * * @param shouldExclude * true iff the control should be excluded from layouts * @return this */ public RowDataFactory exclude(boolean shouldExclude) { data.exclude = shouldExclude; return this; } /** * Creates a new GridData instance. All attributes of the GridData instance * will be initialised by the factory. * * @return a new GridData instance */ public RowData create() { return copyData(data); } /** * Creates a copy of the receiver. * * @return a copy of the receiver */ public RowDataFactory copy() { return new RowDataFactory(create()); } /** * Sets the layout data on the given control. Creates a new RowData instance * and assigns it to the control by calling control.setLayoutData. * * @param control * control whose layout data will be initialised */ public void applyTo(Control control) { control.setLayoutData(create()); } /** * Sets the width and height hints. The width and height hints override the * control's preferred size. If either hint is set to SWT.DEFAULT, the * control's preferred size is used. * * @param xHint * horizontal hint (pixels), or SWT.DEFAULT to use the control's * preferred size * @param yHint * vertical hint (pixels), or SWT.DEFAULT to use the control's * preferred size * @return this */ public RowDataFactory hint(int xHint, int yHint) { data.width = xHint; data.height = yHint; return this; } /** * Sets the width and height hints. The width and height hints override the * control's preferred size. If either hint is set to SWT.DEFAULT, the * control's preferred size is used. * * @param hint * size (pixels) to be used instead of the control's preferred * size. If the x or y values are set to SWT.DEFAULT, the * control's computeSize() method will be used to obtain that * dimension of the preferred size. * @return this */ public RowDataFactory hint(Point hint) { data.width = hint.x; data.height = hint.y; return this; } }