blob: bc0b6a6cb609a3d8b5336f0b2b7efdeb9ea0fd05 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2001, 2006 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:
* IBM Corporation - initial API and implementation
* Jens Lukowski/Innoopract - initial renaming/restructuring
*
*******************************************************************************/
package org.eclipse.wst.sse.ui.internal.preferences.ui;
import org.eclipse.core.runtime.Preferences;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.BusyIndicator;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.eclipse.wst.sse.core.internal.SSECorePlugin;
import org.eclipse.wst.sse.ui.internal.SSEUIMessages;
import org.eclipse.wst.sse.ui.internal.SSEUIPlugin;
/**
* (pa) why is this class abstract if there are no abstract methods?
*/
public abstract class AbstractPreferencePage extends PreferencePage implements ModifyListener, SelectionListener, IWorkbenchPreferencePage {
protected final static int WIDTH_VALIDATION_LOWER_LIMIT = 0; //$NON-NLS-1$
protected final static int WIDTH_VALIDATION_UPPER_LIMIT = 999; //$NON-NLS-1$
protected Button createCheckBox(Composite group, String label) {
Button button = new Button(group, SWT.CHECK | SWT.LEFT);
button.setText(label);
//GridData
GridData data = new GridData(GridData.FILL);
data.verticalAlignment = GridData.CENTER;
data.horizontalAlignment = GridData.FILL;
button.setLayoutData(data);
return button;
}
protected Composite createComposite(Composite parent, int numColumns) {
Composite composite = new Composite(parent, SWT.NULL);
//GridLayout
GridLayout layout = new GridLayout();
layout.numColumns = numColumns;
composite.setLayout(layout);
//GridData
GridData data = new GridData(GridData.FILL);
data.horizontalIndent = 0;
data.verticalAlignment = GridData.FILL;
data.horizontalAlignment = GridData.FILL;
composite.setLayoutData(data);
return composite;
}
protected Control createContents(Composite parent) {
return createScrolledComposite(parent);
}
protected Combo createDropDownBox(Composite parent) {
Combo comboBox = new Combo(parent, SWT.DROP_DOWN | SWT.READ_ONLY);
//GridData
GridData data = new GridData();
data.verticalAlignment = GridData.CENTER;
data.horizontalAlignment = GridData.FILL;
data.grabExcessHorizontalSpace = true;
comboBox.setLayoutData(data);
return comboBox;
}
protected Group createGroup(Composite parent, int numColumns) {
Group group = new Group(parent, SWT.NULL);
//GridLayout
GridLayout layout = new GridLayout();
layout.numColumns = numColumns;
group.setLayout(layout);
//GridData
GridData data = new GridData(GridData.FILL);
data.horizontalIndent = 0;
data.verticalAlignment = GridData.FILL;
data.horizontalAlignment = GridData.FILL;
data.grabExcessHorizontalSpace = true;
group.setLayoutData(data);
return group;
}
protected Label createLabel(Composite parent, String text) {
Label label = new Label(parent, SWT.LEFT);
label.setText(text);
//GridData
GridData data = new GridData(GridData.FILL);
data.verticalAlignment = GridData.CENTER;
data.horizontalAlignment = GridData.FILL;
label.setLayoutData(data);
return label;
}
protected Button createRadioButton(Composite group, String label) {
Button button = new Button(group, SWT.RADIO);
button.setText(label);
//GridData
GridData data = new GridData(GridData.FILL);
data.verticalAlignment = GridData.CENTER;
data.horizontalAlignment = GridData.FILL;
button.setLayoutData(data);
return button;
}
protected Composite createScrolledComposite(Composite parent) {
// create scrollbars for this parent when needed
final ScrolledComposite sc1 = new ScrolledComposite(parent, SWT.H_SCROLL | SWT.V_SCROLL);
sc1.setLayoutData(new GridData(GridData.FILL_BOTH));
Composite composite = createComposite(sc1, 1);
sc1.setContent(composite);
// not calling setSize for composite will result in a blank composite,
// so calling it here initially
// setSize actually needs to be called after all controls are created,
// so scrolledComposite
// has correct minSize
setSize(composite);
return composite;
}
protected Label createSeparator(Composite parent, int columnSpan) {
// Create a spacer line
Label separator = new Label(parent, SWT.SEPARATOR | SWT.HORIZONTAL);
//GridData
GridData data = new GridData(GridData.FILL);
data.verticalAlignment = GridData.CENTER;
data.horizontalAlignment = GridData.FILL;
data.horizontalSpan = columnSpan;
separator.setLayoutData(data);
return separator;
}
protected Text createTextField(Composite parent) {
Text text = new Text(parent, SWT.SINGLE | SWT.BORDER);
//GridData
GridData data = new GridData();
data.verticalAlignment = GridData.CENTER;
data.horizontalAlignment = GridData.FILL;
data.grabExcessHorizontalSpace = true;
text.setLayoutData(data);
return text;
}
protected void enableValues() {
}
protected Preferences getModelPreferences() {
return SSECorePlugin.getDefault().getPluginPreferences();
}
public void init(IWorkbench workbench) {
}
protected void initializeValues() {
}
protected boolean loadPreferences() {
BusyIndicator.showWhile(getControl().getDisplay(), new Runnable() {
public void run() {
initializeValues();
validateValues();
enableValues();
}
});
return true;
}
public void modifyText(ModifyEvent e) {
// If we are called too early, i.e. before the controls are created
// then return
// to avoid null pointer exceptions
if (e.widget != null && e.widget.isDisposed())
return;
validateValues();
enableValues();
}
protected void performDefaults() {
super.performDefaults();
}
public boolean performOk() {
savePreferences();
return true;
}
protected boolean savePreferences() {
BusyIndicator.showWhile(getControl().getDisplay(), new Runnable() {
public void run() {
storeValues();
}
});
return true;
}
protected void setInvalidInputMessage(String widthText) {
String msg = NLS.bind(SSEUIMessages._4concat, (new Object[]{widthText}));
setErrorMessage(msg);
}
protected void setSize(Composite composite) {
if (composite != null) {
// Note: The font is set here in anticipation that the class inheriting
// this base class may add widgets to the dialog. setSize
// is assumed to be called just before we go live.
applyDialogFont(composite);
Point minSize = composite.computeSize(SWT.DEFAULT, SWT.DEFAULT);
composite.setSize(minSize);
// set scrollbar composite's min size so page is expandable but
// has scrollbars when needed
if (composite.getParent() instanceof ScrolledComposite) {
ScrolledComposite sc1 = (ScrolledComposite) composite.getParent();
sc1.setMinSize(minSize);
sc1.setExpandHorizontal(true);
sc1.setExpandVertical(true);
}
}
}
protected void storeValues() {
SSEUIPlugin.getDefault().savePluginPreferences();
}
protected void validateValues() {
}
public void widgetDefaultSelected(SelectionEvent e) {
widgetSelected(e);
}
public void widgetSelected(SelectionEvent e) {
// If we are called too early, i.e. before the controls are created
// then return
// to avoid null pointer exceptions
if (e.widget != null && e.widget.isDisposed())
return;
validateValues();
enableValues();
}
}