blob: 6f85790a3eed3d4aa580439333f42d00e0067b17 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2018 SAP SE and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* SAP SE - initial version
* Simon Scholz <simon.scholz@vogella.com> - Bug 544471
******************************************************************************/
package org.eclipse.jface.widgets;
import java.util.function.Supplier;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
/**
* Abstract factory for controls. Factories for widgets that inherit from
* Control should extend this factory to handle the properties of Control
* itself, like enabled or tool tip.
*
* @param <F> factory
* @param <C> control
*
* @noextend this class is not intended to be subclassed by clients.
*
* @since 3.18
*
*/
public abstract class AbstractControlFactory<F extends AbstractControlFactory<?, ?>, C extends Control>
extends AbstractWidgetFactory<F, C, Composite> {
/**
* @param factoryClass
* @param controlCreator
*/
AbstractControlFactory(Class<F> factoryClass, WidgetSupplier<C, Composite> controlCreator) {
super(factoryClass, controlCreator);
}
/**
* Sets the receiver's tool tip text to the argument, which may be null
* indicating that the default tool tip for the control will be shown. For a
* control that has a default tool tip, such as the Tree control on Windows,
* setting the tool tip text to an empty string replaces the default, causing no
* tool tip text to be shown.
*
* The mnemonic indicator (character '&') is not displayed in a tool tip. To
* display a single '&' in the tool tip, the character '&' can be escaped by
* doubling it in the string.
*
* @param tooltipText the tool tip text
* @return this
*
* @see Control#setToolTipText(String)
*/
public F tooltip(String tooltipText) {
addProperty(c -> c.setToolTipText(tooltipText));
return cast(this);
}
/**
* Enables the receiver if the argument is true, and disables it otherwise. A
* disabled control is typically not selectable from the user interface and
* draws with an inactive or "grayed" look.
*
* @param enabled the enabled state
* @return this
*
* @see Control#setEnabled(boolean)
*/
public F enabled(boolean enabled) {
addProperty(c -> c.setEnabled(enabled));
return cast(this);
}
/**
* Sets a {@link Supplier} for the creation of layout data associated with the
* receiver. The supplier should always create a new instance of the layoutData
* in order to make this factory reusable, because each and every control needs
* its own unique layoutData.
*
* <pre>
* GridDataFactory gridDataFactory = GridDataFactory.fillDefaults().grab(true, false);
* ButtonFactory.newButton(SWT.PUSH).supplyLayoutData(gridDataFactory::create);
* </pre>
*
* or without GridDataFactory:
*
* <pre>
* ButtonFactory.newButton(SWT.PUSH).supplyLayoutData(GridData::new);
* </pre>
*
* @param layoutDataSupplier {@link Supplier} creating a new layout data
* instance on every call
* @return this
*
* @see Control#setLayoutData(Object)
* @see #layoutData(Object)
*/
public F supplyLayoutData(Supplier<?> layoutDataSupplier) {
addProperty(c -> c.setLayoutData(layoutDataSupplier.get()));
return cast(this);
}
/**
* Sets the layout data associated with the receiver to the argument.
*
* Sufficient for one time usage of this factory.
*
* <pre>
* GridData gd = new GridData(GridData.FILL_BOTH);
* ButtonFactory.newButton(SWT.PUSH).layoutData(gd);
* </pre>
*
* <p>
* In case this factory should be reused several time consider the usage of
* {@link #supplyLayoutData(Supplier)}.
* </p>
*
* @param layoutData the layout data for the receiver.
* @return this
*
* @see Control#setLayoutData(Object)
*/
public F layoutData(Object layoutData) {
addProperty(c -> c.setLayoutData(layoutData));
return cast(this);
}
/**
* Sets the font that the receiver will use to paint textual information to the
* font specified by the argument, or to the default font for that kind of
* control if the argument is null.
*
* @param font the font
* @return this
*
* @see Control#setFont(Font)
*/
public F font(Font font) {
addProperty(c -> c.setFont(font));
return cast(this);
}
/**
* Sets the receiver's foreground color to the color specified by the argument,
* or to the default system color for the control if the argument is null.
*
* @param color the color
* @return this
*
* @see Control#setForeground(Color)
*/
public F foreground(Color color) {
addProperty(c -> c.setForeground(color));
return cast(this);
}
/**
* Sets the receiver's background color to the color specified by the argument,
* or to the default system color for the control if the argument is null.
*
* @param color the color
* @return this
*
* @see Control#setBackground(Color)
*/
public F background(Color color) {
addProperty(c -> c.setBackground(color));
return cast(this);
}
/**
* Sets the orientation of the receiver, which must be one of the constants
* SWT.LEFT_TO_RIGHT or SWT.RIGHT_TO_LEFT.
*
* @param orientation the orientation style
* @return this
*
* @see Control#setOrientation(int)
*/
public F orientation(int orientation) {
addProperty(t -> t.setOrientation(orientation));
return cast(this);
}
}