/*******************************************************************************
* Copyright (c) 2014 Bruno Medeiros and other Contributors.
* 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:
* Bruno Medeiros - initial API and implementation
*******************************************************************************/
package melnorme.util.swt;
import static melnorme.util.swt.SWTLayoutUtil.setLayoutData;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.layout.PixelConverter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Link;
import org.eclipse.swt.widgets.Text;
public class SWTFactory {
/** A version of {@link SelectionAdapter} that works better for Java 8 lambdas */
public static interface WidgetSelectedListener extends SelectionListener {
@Override
default void widgetDefaultSelected(SelectionEvent e) {
}
}
/** A version of {@link SelectionAdapter} that works better for Java 8 lambdas */
public static interface WidgetDefaultSelectedListener extends SelectionListener {
@Override
default void widgetSelected(SelectionEvent e) {
}
}
/* ----------------- ----------------- */
public static Composite createComposite(Composite parent, GridData gridData) {
Composite composite = new Composite(parent, SWT.NONE);
return setLayoutData(composite, gridData);
}
public static Composite createComposite(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
return composite;
}
public static Composite createGridComposite(Composite parent, int columns, GridData gridData) {
Composite composite = new Composite(parent, SWT.NONE);
composite.setLayout(GridLayoutFactory.fillDefaults().numColumns(columns).create());
if(gridData != null) {
composite.setLayoutData(gridData);
}
return composite;
}
/* ----------------- ----------------- */
public static Group createGroup(Composite parent, String label, GridData gridData) {
Group group = createGroup(parent, label);
return setLayoutData(group, gridData);
}
public static Group createGroup(Composite parent, String label) {
return createGroup(parent, label, SWT.SHADOW_NONE);
}
public static Group createGroup(Composite parent, String label, int style) {
Group group = new Group(parent, style);
group.setText(label);
return group;
}
/* ----------------- ----------------- */
public static Label createIconLabel(Composite parent, Image image, GridData gridData) {
Label label = createLabel(parent, SWT.LEFT, "");
label.setImage(image);
return setLayoutData(label, gridData);
}
public static Label createLabel(Composite parent, int style, String labelText, GridData gridData) {
Label label = createLabel(parent, style, labelText);
return setLayoutData(label, gridData);
}
public static Label createLabel(Composite parent, int style, String labelText) {
Label label = new Label(parent, style);
label.setText(labelText);
return label;
}
public static Link createLink(Composite parent, int style, String labelText, GridData gridData) {
Link link = createLink(parent, style, labelText);
return setLayoutData(link, gridData);
}
public static Link createLink(Composite parent, int style, String labelText) {
Link link = new Link(parent, style);
link.setText(labelText);
return link;
}
public static Button createButton(Composite parent, int style, String label, GridData gridData) {
return createButton(parent, style, label, null, gridData);
}
public static Button createButton(Composite parent, int style, String label, Image image, GridData gridData) {
Button button = createButton(parent, style, label, image);
return setLayoutData(button, gridData);
}
public static Button createButton(Composite parent, int style, String label) {
return createButton(parent, style, label, (Image) null);
}
public static Button createButton(Composite parent, int style, String label, Image image) {
Button button = new Button(parent, style);
if(image != null) {
button.setImage(image);
}
if(label != null) {
button.setText(label);
}
return button;
}
public static Button createPushButton(Composite parent, String label, Image image) {
return createPushButton(parent, label, image, new GridData());
}
public static Button createPushButton(Composite parent, String label, Image image, GridData gridData) {
Button button = createButton(parent, SWT.PUSH, label, image, gridData);
if(gridData != null) {
gridData.minimumWidth = getButtonWidthHint(button);
setLayoutData(button, gridData);
}
return button;
}
public static int getButtonWidthHint(Button button) {
PixelConverter converter = new PixelConverter(button);
int widthHint = converter.convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH);
return Math.max(widthHint, button.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x);
}
public static Button createPushButton(Composite parent, String label, Image image, GridData gridData,
WidgetSelectedListener listener) {
Button button = createPushButton(parent, label, image);
button.addSelectionListener(listener);
return setLayoutData(button, gridData);
}
/* ----------------- ----------------- */
public static Text createText(Composite parent, int style) {
return new Text(parent, style);
}
public static Text createText(Composite parent, int style, GridData gridData) {
Text text = createText(parent, style);
return setLayoutData(text, gridData);
}
public static Text createReadonlyText(Composite dialogArea, String initialText) {
int style = SWT.BORDER | SWT.READ_ONLY;
if(true) {
style |= SWT.MULTI | SWT.WRAP;
}
Text text = createText(dialogArea, style);
text.setText(initialText);
return text;
}
public static Text createReadonlyText(Composite dialogArea, String initialText, GridData gridData) {
Text text = createReadonlyText(dialogArea, initialText);
return setLayoutData(text, gridData);
}
/* ----------------- ----------------- */
public static Combo createCombo(Composite parent, int style) {
Combo combo = new Combo(parent, style);
return combo;
}
public static Combo createCombo(Composite parent, int style, GridData gridData) {
Combo combo = createCombo(parent, style);
return setLayoutData(combo, gridData);
}
}