blob: baa5c8dd6fe4034eaa9418ebd85b48f4dc81da6c [file] [log] [blame]
/*******************************************************************************
* 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;
}
}