org.eclipse.jface.preference.ScaleFieldEditor Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of org.eclipse.jface Show documentation
Show all versions of org.eclipse.jface Show documentation
This is org.eclipse.jface jar used by Scout SDK
The newest version!
/*******************************************************************************
* Copyright (c) 2003, 2015 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
* Wedia - Joel DRIGO ([email protected]): Bug 470866
*******************************************************************************/
package org.eclipse.jface.preference;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Scale;
/**
* A field editor for an integer type preference. This class may be used as is,
* or subclassed as required.
*
* @since 3.0
*/
public class ScaleFieldEditor extends FieldEditor {
/**
* Value that will feed Scale.setIncrement(int).
*/
private int incrementValue;
/**
* Value that will feed Scale.setMaximum(int).
*/
private int maxValue;
/**
* Value that will feed Scale.setMinimum(int).
*/
private int minValue;
/**
* Old integer value.
*/
private int oldValue;
/**
* Value that will feed Scale.setPageIncrement(int).
*/
private int pageIncrementValue;
/**
* The scale, or null
if none.
*/
protected Scale scale;
/**
* Creates a scale field editor.
*
* @param name
* the name of the preference this field editor works on
* @param labelText
* the label text of the field editor
* @param parent
* the parent of the field editor's control
*/
public ScaleFieldEditor(String name, String labelText, Composite parent) {
super(name, labelText, parent);
setDefaultValues();
}
/**
* Creates a scale field editor with particular scale values.
*
* @param name
* the name of the preference this field editor works on
* @param labelText
* the label text of the field editor
* @param parent
* the parent of the field editor's control
* @param min
* the value used for Scale.setMinimum(int).
* @param max
* the value used for Scale.setMaximum(int).
* @param increment
* the value used for Scale.setIncrement(int).
* @param pageIncrement
* the value used for Scale.setPageIncrement(int).
*/
public ScaleFieldEditor(String name, String labelText, Composite parent,
int min, int max, int increment, int pageIncrement) {
super(name, labelText, parent);
setValues(min, max, increment, pageIncrement);
}
@Override
protected void adjustForNumColumns(int numColumns) {
((GridData) scale.getLayoutData()).horizontalSpan = numColumns - 1;
}
@Override
protected void doFillIntoGrid(Composite parent, int numColumns) {
Control control = getLabelControl(parent);
GridData gd = new GridData();
control.setLayoutData(gd);
scale = getScaleControl(parent);
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.verticalAlignment = GridData.FILL;
gd.horizontalSpan = numColumns - 1;
gd.grabExcessHorizontalSpace = true;
scale.setLayoutData(gd);
updateScale();
}
@Override
protected void doLoad() {
if (scale != null) {
int value = getPreferenceStore().getInt(getPreferenceName());
scale.setSelection(value);
oldValue = value;
}
}
@Override
protected void doLoadDefault() {
if (scale != null) {
int value = getPreferenceStore().getDefaultInt(getPreferenceName());
scale.setSelection(value);
}
valueChanged();
}
@Override
protected void doStore() {
getPreferenceStore()
.setValue(getPreferenceName(), scale.getSelection());
}
/**
* Returns the value that will be used for Scale.setIncrement(int).
*
* @return the value.
* @see org.eclipse.swt.widgets.Scale#setIncrement(int)
*/
public int getIncrement() {
return incrementValue;
}
/**
* Returns the value that will be used for Scale.setMaximum(int).
*
* @return the value.
* @see org.eclipse.swt.widgets.Scale#setMaximum(int)
*/
public int getMaximum() {
return maxValue;
}
/**
* Returns the value that will be used for Scale.setMinimum(int).
*
* @return the value.
* @see org.eclipse.swt.widgets.Scale#setMinimum(int)
*/
public int getMinimum() {
return minValue;
}
@Override
public int getNumberOfControls() {
return 2;
}
/**
* Returns the value that will be used for Scale.setPageIncrement(int).
*
* @return the value.
* @see org.eclipse.swt.widgets.Scale#setPageIncrement(int)
*/
public int getPageIncrement() {
return pageIncrementValue;
}
/**
* Returns this field editor's scale control.
*
* @return the scale control, or null
if no scale field is
* created yet
*/
public Scale getScaleControl() {
return scale;
}
/**
* Returns this field editor's scale control. The control is created if it
* does not yet exist.
*
* @param parent
* the parent
* @return the scale control
*/
private Scale getScaleControl(Composite parent) {
if (scale == null) {
scale = new Scale(parent, SWT.HORIZONTAL);
scale.setFont(parent.getFont());
scale.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent event) {
valueChanged();
}
});
scale.addDisposeListener(event -> scale = null);
} else {
checkParent(scale, parent);
}
return scale;
}
/**
* Set default values for the various scale fields. These defaults are:
*
* - Minimum = 0
*
- Maximim = 10
*
- Increment = 1
*
- Page Increment = 1
*
*/
private void setDefaultValues() {
setValues(0, 10, 1, 1);
}
@Override
public void setFocus() {
if (scale != null && !scale.isDisposed()) {
scale.setFocus();
}
}
/**
* Set the value to be used for Scale.setIncrement(int) and update the
* scale.
*
* @param increment
* a value greater than 0.
* @see org.eclipse.swt.widgets.Scale#setIncrement(int)
*/
public void setIncrement(int increment) {
this.incrementValue = increment;
updateScale();
}
/**
* Set the value to be used for Scale.setMaximum(int) and update the
* scale.
*
* @param max
* a value greater than 0.
* @see org.eclipse.swt.widgets.Scale#setMaximum(int)
*/
public void setMaximum(int max) {
this.maxValue = max;
updateScale();
}
/**
* Set the value to be used for Scale.setMinumum(int) and update the
* scale.
*
* @param min
* a value greater than 0.
* @see org.eclipse.swt.widgets.Scale#setMinimum(int)
*/
public void setMinimum(int min) {
this.minValue = min;
updateScale();
}
/**
* Set the value to be used for Scale.setPageIncrement(int) and update the
* scale.
*
* @param pageIncrement
* a value greater than 0.
* @see org.eclipse.swt.widgets.Scale#setPageIncrement(int)
*/
public void setPageIncrement(int pageIncrement) {
this.pageIncrementValue = pageIncrement;
updateScale();
}
/**
* Set all Scale values.
*
* @param min
* the value used for Scale.setMinimum(int).
* @param max
* the value used for Scale.setMaximum(int).
* @param increment
* the value used for Scale.setIncrement(int).
* @param pageIncrement
* the value used for Scale.setPageIncrement(int).
*/
private void setValues(int min, int max, int increment, int pageIncrement) {
this.incrementValue = increment;
this.maxValue = max;
this.minValue = min;
this.pageIncrementValue = pageIncrement;
updateScale();
}
/**
* Update the scale particulars with set values.
*/
private void updateScale() {
if (scale != null && !scale.isDisposed()) {
scale.setMinimum(getMinimum());
scale.setMaximum(getMaximum());
scale.setIncrement(getIncrement());
scale.setPageIncrement(getPageIncrement());
}
}
/**
* Informs this field editor's listener, if it has one, about a change to
* the value (VALUE
property) provided that the old and new
* values are different.
*
* This hook is not called when the scale is initialized (or
* reset to the default value) from the preference store.
*
*/
protected void valueChanged() {
setPresentsDefaultValue(false);
int newValue = scale.getSelection();
if (newValue != oldValue) {
fireStateChanged(IS_VALID, false, true);
fireValueChanged(VALUE, Integer.valueOf(oldValue), Integer.valueOf(newValue));
oldValue = newValue;
}
}
/**
* Bug 470866 fix
*/
@Override
public void setEnabled(boolean enabled, Composite parent) {
super.setEnabled(enabled, parent);
getScaleControl().setEnabled(enabled);
}
}