| /******************************************************************************* |
| * Copyright (c) 2008 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; |
| } |
| } |