1113 lines
34 KiB
Java
1113 lines
34 KiB
Java
package com.minres.scviewer.database.ui.swt.internal;
|
|
|
|
import java.text.DecimalFormatSymbols;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
import org.eclipse.swt.SWT;
|
|
import org.eclipse.swt.SWTException;
|
|
import org.eclipse.swt.events.ModifyListener;
|
|
import org.eclipse.swt.events.SelectionEvent;
|
|
import org.eclipse.swt.events.SelectionListener;
|
|
import org.eclipse.swt.graphics.Color;
|
|
import org.eclipse.swt.graphics.Cursor;
|
|
import org.eclipse.swt.graphics.Font;
|
|
import org.eclipse.swt.graphics.Image;
|
|
import org.eclipse.swt.layout.GridData;
|
|
import org.eclipse.swt.layout.GridLayout;
|
|
import org.eclipse.swt.widgets.Button;
|
|
import org.eclipse.swt.widgets.Composite;
|
|
import org.eclipse.swt.widgets.Menu;
|
|
import org.eclipse.swt.widgets.Text;
|
|
|
|
/**
|
|
* Instances of this class are selectable user interface objects that allow the
|
|
* user to enter and modify numeric values.
|
|
* <p>
|
|
* <dl>
|
|
* <dt><b>Styles:</b></dt>
|
|
* <dd>READ_ONLY, FLAT</dd>
|
|
* <dt><b>Events:</b></dt>
|
|
* <dd>Selection, Modify</dd>
|
|
* </dl>
|
|
* </p>
|
|
*/
|
|
public class HorizontalSpinner extends Composite {
|
|
|
|
private enum ALIGNMENT {
|
|
LEFT, RIGHT, BOTH
|
|
};
|
|
|
|
private final List<ModifyListener> modifyListeners = new ArrayList<ModifyListener>();
|
|
|
|
private Button leftButton;
|
|
private Button rightButton;
|
|
private Text text;
|
|
private int digits = 0;
|
|
private int increment = 1;
|
|
private int maximum = 0;
|
|
private int minimum = 255;
|
|
private int pageIncrement = 10;
|
|
private int storedValue = 0;
|
|
private ALIGNMENT alignment = ALIGNMENT.BOTH;
|
|
|
|
private final char decimalFormatSeparator;
|
|
|
|
/**
|
|
* Constructs a new instance of this class given its parent and a style
|
|
* value describing its behavior and appearance.
|
|
* <p>
|
|
* The style value is either one of the style constants defined in class
|
|
* <code>SWT</code> which is applicable to instances of this class, or must
|
|
* be built by <em>bitwise OR</em>'ing together (that is, using the
|
|
* <code>int</code> "|" operator) two or more of those <code>SWT</code>
|
|
* style constants. The class description lists the style constants that are
|
|
* applicable to the class. Style bits are also inherited from superclasses.
|
|
* </p>
|
|
*
|
|
* @param parent a composite control which will be the parent of the new
|
|
* instance (cannot be null)
|
|
* @param style the style of control to construct
|
|
*
|
|
* @exception IllegalArgumentException
|
|
* <ul>
|
|
* <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
|
|
* </ul>
|
|
* @exception SWTException
|
|
* <ul>
|
|
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
|
|
* thread that created the parent</li>
|
|
* <li>ERROR_INVALID_SUBCLASS - if this class is not an
|
|
* allowed subclass</li>
|
|
* </ul>
|
|
*
|
|
* @see SWT#READ_ONLY
|
|
* @see SWT#FLAT
|
|
*/
|
|
public HorizontalSpinner(final Composite parent, final int style) {
|
|
super(parent, style);
|
|
|
|
if ((style & SWT.LEFT) == SWT.LEFT) {
|
|
alignment = ALIGNMENT.LEFT;
|
|
}
|
|
|
|
if ((style & SWT.RIGHT) == SWT.RIGHT) {
|
|
alignment = ALIGNMENT.RIGHT;
|
|
}
|
|
|
|
final GridLayout gd = new GridLayout(3, false);
|
|
gd.horizontalSpacing = gd.verticalSpacing = 0;
|
|
gd.marginWidth = gd.marginHeight = 0;
|
|
setLayout(gd);
|
|
|
|
createContent(style);
|
|
addTextListeners();
|
|
addButtonsListener();
|
|
addModifyListeners();
|
|
|
|
decimalFormatSeparator = new DecimalFormatSymbols().getDecimalSeparator();
|
|
}
|
|
|
|
/**
|
|
* Create the content of the widget
|
|
*
|
|
* @param style style of the widget
|
|
*/
|
|
private void createContent(final int style) {
|
|
final boolean readOnly = (style & SWT.READ_ONLY) == SWT.READ_ONLY;
|
|
final boolean flat = (style & SWT.FLAT) == SWT.FLAT;
|
|
final int buttonStyle = SWT.ARROW | (flat ? SWT.FLAT : SWT.NONE);
|
|
|
|
if (alignment == ALIGNMENT.BOTH) {
|
|
createMinusButton(buttonStyle);
|
|
createText(readOnly);
|
|
createPlusButton(buttonStyle);
|
|
} else if (alignment == ALIGNMENT.LEFT) {
|
|
createMinusButton(buttonStyle);
|
|
createPlusButton(buttonStyle);
|
|
createText(readOnly);
|
|
} else {
|
|
createText(readOnly);
|
|
createMinusButton(buttonStyle);
|
|
createPlusButton(buttonStyle);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Create minus button
|
|
*
|
|
* @param buttonStyle button style
|
|
*/
|
|
private void createMinusButton(final int buttonStyle) {
|
|
leftButton = new Button(this, buttonStyle | SWT.LEFT);
|
|
leftButton.setFont(getFont());
|
|
leftButton.setBackground(getBackground());
|
|
leftButton.setCursor(getCursor());
|
|
leftButton.setEnabled(getEnabled());
|
|
leftButton.setFont(getFont());
|
|
leftButton.setForeground(getForeground());
|
|
leftButton.setLayoutData(new GridData(GridData.FILL, GridData.FILL, false, false));
|
|
}
|
|
|
|
/**
|
|
* Create the text zone
|
|
*
|
|
* @param readOnly if <code>true</code>, the text is read only
|
|
*/
|
|
private void createText(final boolean readOnly) {
|
|
text = new Text(this, readOnly ? SWT.READ_ONLY : SWT.NONE);
|
|
final GridData gd = new GridData(GridData.FILL, GridData.CENTER, true, false);
|
|
gd.minimumWidth = 40;
|
|
text.setLayoutData(gd);
|
|
}
|
|
|
|
/**
|
|
* Create plus button
|
|
*
|
|
* @param buttonStyle button style
|
|
*/
|
|
private void createPlusButton(final int buttonStyle) {
|
|
rightButton = new Button(this, buttonStyle | SWT.RIGHT);
|
|
rightButton.setFont(getFont());
|
|
rightButton.setBackground(getBackground());
|
|
rightButton.setCursor(getCursor());
|
|
rightButton.setEnabled(getEnabled());
|
|
rightButton.setFont(getFont());
|
|
rightButton.setForeground(getForeground());
|
|
rightButton.setLayoutData(new GridData(GridData.FILL, GridData.FILL, false, false));
|
|
}
|
|
|
|
/**
|
|
* Add the text listeners
|
|
*/
|
|
private void addTextListeners() {
|
|
text.addListener(SWT.Verify, e -> {
|
|
if (e.character != 0 && !(Character.isDigit(e.character) || e.character == '-') && e.keyCode != SWT.BS && e.keyCode != SWT.DEL) {
|
|
e.doit = false;
|
|
return;
|
|
}
|
|
e.doit = verifyEntryAndStoreValue(e.text, e.keyCode);
|
|
});
|
|
|
|
text.addListener(SWT.KeyUp, e -> {
|
|
if (e.keyCode == SWT.ARROW_UP) {
|
|
increaseValue(increment);
|
|
}
|
|
if (e.keyCode == SWT.ARROW_DOWN) {
|
|
decreaseValue(increment);
|
|
}
|
|
if (e.keyCode == SWT.PAGE_UP) {
|
|
increaseValue(pageIncrement);
|
|
}
|
|
if (e.keyCode == SWT.PAGE_DOWN) {
|
|
decreaseValue(pageIncrement);
|
|
}
|
|
|
|
});
|
|
|
|
text.addListener(SWT.FocusOut, e -> {
|
|
if (text.getText().trim().equals("")) {
|
|
setSelection(storedValue);
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Verify the entry and store the value in the field storedValue
|
|
*
|
|
* @param entry entry to check
|
|
* @param keyCode code of the typed key
|
|
* @return <code>true</code> if the entry if correct, <code>false</code>
|
|
* otherwise
|
|
*/
|
|
private boolean verifyEntryAndStoreValue(final String entry, final int keyCode) {
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Add the listener to the buttons
|
|
*/
|
|
private void addButtonsListener() {
|
|
leftButton.addListener(SWT.Selection, e -> {
|
|
decreaseValue(increment);
|
|
});
|
|
|
|
rightButton.addListener(SWT.Selection, e -> {
|
|
increaseValue(increment);
|
|
});
|
|
|
|
}
|
|
|
|
/**
|
|
* Increase the value stored in this snippet
|
|
*
|
|
* @param value value to increase
|
|
*/
|
|
private void increaseValue(final int value) {
|
|
setSelection(getSelection() + value);
|
|
|
|
}
|
|
|
|
/**
|
|
* Decrease the value stored in this snippet
|
|
*
|
|
* @param value value to decrease
|
|
*/
|
|
private void decreaseValue(final int value) {
|
|
setSelection(getSelection() - value);
|
|
}
|
|
|
|
/**
|
|
* Add the modify listeners
|
|
*/
|
|
private void addModifyListeners() {
|
|
text.addModifyListener(e -> {
|
|
for (final ModifyListener m : modifyListeners) {
|
|
m.modifyText(e);
|
|
}
|
|
});
|
|
|
|
}
|
|
|
|
/**
|
|
* Adds the listener to the collection of listeners who will be notified
|
|
* when the receiver's text is modified, by sending it one of the messages
|
|
* defined in the <code>ModifyListener</code> interface.
|
|
*
|
|
* @param listener the listener which should be notified
|
|
*
|
|
* @exception IllegalArgumentException
|
|
* <ul>
|
|
* <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
|
|
* </ul>
|
|
* @exception SWTException
|
|
* <ul>
|
|
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
|
|
* disposed</li>
|
|
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
|
|
* thread that created the receiver</li>
|
|
* </ul>
|
|
*
|
|
* @see ModifyListener
|
|
* @see #removeModifyListener
|
|
* @see org.eclipse.swt.widgets.Spinner#addModifyListener(org.eclipse.swt.events.ModifyListener)
|
|
*/
|
|
|
|
public void addModifyListener(final ModifyListener listener) {
|
|
checkWidget();
|
|
modifyListeners.add(listener);
|
|
}
|
|
|
|
/**
|
|
* Adds the listener to the collection of listeners who will be notified
|
|
* when the control is selected by the user, by sending it one of the
|
|
* messages defined in the <code>SelectionListener</code> interface.
|
|
* <p>
|
|
* <code>widgetSelected</code> is not called for texts.
|
|
* <code>widgetDefaultSelected</code> is typically called when ENTER is
|
|
* pressed in a single-line text.
|
|
* </p>
|
|
*
|
|
* @param listener the listener which should be notified when the control is
|
|
* selected by the user
|
|
*
|
|
* @exception IllegalArgumentException
|
|
* <ul>
|
|
* <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
|
|
* </ul>
|
|
* @exception SWTException
|
|
* <ul>
|
|
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
|
|
* disposed</li>
|
|
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
|
|
* thread that created the receiver</li>
|
|
* </ul>
|
|
*
|
|
* @see SelectionListener
|
|
* @see #removeSelectionListener
|
|
* @see SelectionEvent
|
|
*/
|
|
public void addSelectionListener(final SelectionListener listener) {
|
|
checkWidget();
|
|
}
|
|
|
|
/**
|
|
* Copies the selected text.
|
|
* <p>
|
|
* The current selection is copied to the clipboard.
|
|
* </p>
|
|
*
|
|
* @exception SWTException
|
|
* <ul>
|
|
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
|
|
* disposed</li>
|
|
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
|
|
* thread that created the receiver</li>
|
|
* </ul>
|
|
*/
|
|
public void copy() {
|
|
checkWidget();
|
|
text.copy();
|
|
}
|
|
|
|
/**
|
|
* Cuts the selected text.
|
|
* <p>
|
|
* The current selection is first copied to the clipboard and then deleted
|
|
* from the widget.
|
|
* </p>
|
|
*
|
|
* @exception SWTException
|
|
* <ul>
|
|
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
|
|
* disposed</li>
|
|
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
|
|
* thread that created the receiver</li>
|
|
* </ul>
|
|
*/
|
|
public void cut() {
|
|
checkWidget();
|
|
text.cut();
|
|
}
|
|
|
|
/**
|
|
* Returns the number of decimal places used by the receiver.
|
|
*
|
|
* @return the digits
|
|
*
|
|
* @exception SWTException
|
|
* <ul>
|
|
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
|
|
* disposed</li>
|
|
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
|
|
* thread that created the receiver</li>
|
|
* </ul>
|
|
*/
|
|
public int getDigits() {
|
|
checkWidget();
|
|
return digits;
|
|
}
|
|
|
|
/**
|
|
* Returns the amount that the receiver's value will be modified by when the
|
|
* up/down arrows are pressed.
|
|
*
|
|
* @return the increment
|
|
*
|
|
* @exception SWTException
|
|
* <ul>
|
|
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
|
|
* disposed</li>
|
|
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
|
|
* thread that created the receiver</li>
|
|
* </ul>
|
|
*/
|
|
public int getIncrement() {
|
|
checkWidget();
|
|
return increment;
|
|
}
|
|
|
|
/**
|
|
* Returns the maximum value which the receiver will allow.
|
|
*
|
|
* @return the maximum
|
|
*
|
|
* @exception SWTException
|
|
* <ul>
|
|
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
|
|
* disposed</li>
|
|
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
|
|
* thread that created the receiver</li>
|
|
* </ul>
|
|
*/
|
|
public int getMaximum() {
|
|
checkWidget();
|
|
return maximum;
|
|
}
|
|
|
|
/**
|
|
* Returns the minimum value which the receiver will allow.
|
|
*
|
|
* @return the minimum
|
|
*
|
|
* @exception SWTException
|
|
* <ul>
|
|
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
|
|
* disposed</li>
|
|
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
|
|
* thread that created the receiver</li>
|
|
* </ul>
|
|
*/
|
|
public int getMinimum() {
|
|
checkWidget();
|
|
return minimum;
|
|
}
|
|
|
|
/**
|
|
* Returns the amount that the receiver's position will be modified by when
|
|
* the page up/down keys are pressed.
|
|
*
|
|
* @return the page increment
|
|
*
|
|
* @exception SWTException
|
|
* <ul>
|
|
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
|
|
* disposed</li>
|
|
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
|
|
* thread that created the receiver</li>
|
|
* </ul>
|
|
*/
|
|
public int getPageIncrement() {
|
|
checkWidget();
|
|
return pageIncrement;
|
|
}
|
|
|
|
/**
|
|
* Returns the <em>selection</em>, which is the receiver's position.
|
|
*
|
|
* @return the selection
|
|
*
|
|
* @exception SWTException
|
|
* <ul>
|
|
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
|
|
* disposed</li>
|
|
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
|
|
* thread that created the receiver</li>
|
|
* </ul>
|
|
*/
|
|
public int getSelection() {
|
|
checkWidget();
|
|
return storedValue;
|
|
}
|
|
|
|
/**
|
|
* Returns a string containing a copy of the contents of the receiver's text
|
|
* field, or an empty string if there are no contents.
|
|
*
|
|
* @return the receiver's text
|
|
*
|
|
* @exception SWTException
|
|
* <ul>
|
|
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
|
|
* disposed</li>
|
|
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
|
|
* thread that created the receiver</li>
|
|
* </ul>
|
|
*
|
|
*/
|
|
public String getText() {
|
|
checkWidget();
|
|
return text.getText();
|
|
}
|
|
|
|
/**
|
|
* Returns the maximum number of characters that the receiver's text field
|
|
* is capable of holding. If this has not been changed by
|
|
* <code>setTextLimit()</code>, it will be the constant
|
|
* <code>Spinner.LIMIT</code>.
|
|
*
|
|
* @return the text limit
|
|
*
|
|
* @exception SWTException
|
|
* <ul>
|
|
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
|
|
* disposed</li>
|
|
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
|
|
* thread that created the receiver</li>
|
|
* </ul>
|
|
*
|
|
* @see #LIMIT
|
|
*/
|
|
public int getTextLimit() {
|
|
checkWidget();
|
|
return text.getTextLimit();
|
|
}
|
|
|
|
/**
|
|
* Pastes text from clipboard.
|
|
* <p>
|
|
* The selected text is deleted from the widget and new text inserted from
|
|
* the clipboard.
|
|
* </p>
|
|
*
|
|
* @exception SWTException
|
|
* <ul>
|
|
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
|
|
* disposed</li>
|
|
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
|
|
* thread that created the receiver</li>
|
|
* </ul>
|
|
*/
|
|
public void paste() {
|
|
checkWidget();
|
|
text.paste();
|
|
}
|
|
|
|
/**
|
|
* Removes the listener from the collection of listeners who will be
|
|
* notified when the receiver's text is modified.
|
|
*
|
|
* @param listener the listener which should no longer be notified
|
|
*
|
|
* @exception IllegalArgumentException
|
|
* <ul>
|
|
* <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
|
|
* </ul>
|
|
* @exception SWTException
|
|
* <ul>
|
|
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
|
|
* disposed</li>
|
|
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
|
|
* thread that created the receiver</li>
|
|
* </ul>
|
|
*
|
|
* @see ModifyListener
|
|
* @see #addModifyListener
|
|
*/
|
|
public void removeModifyListener(final ModifyListener listener) {
|
|
checkWidget();
|
|
modifyListeners.remove(listener);
|
|
}
|
|
|
|
/**
|
|
* Removes the listener from the collection of listeners who will be
|
|
* notified when the control is selected by the user.
|
|
*
|
|
* @param listener the listener which should no longer be notified
|
|
*
|
|
* @exception IllegalArgumentException
|
|
* <ul>
|
|
* <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
|
|
* </ul>
|
|
* @exception SWTException
|
|
* <ul>
|
|
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
|
|
* disposed</li>
|
|
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
|
|
* thread that created the receiver</li>
|
|
* </ul>
|
|
*
|
|
* @see SelectionListener
|
|
* @see #addSelectionListener
|
|
*/
|
|
public void removeSelectionListener(final SelectionListener listener) {
|
|
checkWidget();
|
|
}
|
|
|
|
/**
|
|
* Sets the number of decimal places used by the receiver.
|
|
* <p>
|
|
* The digit setting is used to allow for floating point values in the
|
|
* receiver. For example, to set the selection to a floating point value of
|
|
* 1.37 call setDigits() with a value of 2 and setSelection() with a value
|
|
* of 137. Similarly, if getDigits() has a value of 2 and getSelection()
|
|
* returns 137 this should be interpreted as 1.37. This applies to all
|
|
* numeric APIs.
|
|
* </p>
|
|
*
|
|
* @param value the new digits (must be greater than or equal to zero)
|
|
*
|
|
* @exception IllegalArgumentException
|
|
* <ul>
|
|
* <li>ERROR_INVALID_ARGUMENT - if the value is less than
|
|
* zero</li>
|
|
* </ul>
|
|
* @exception SWTException
|
|
* <ul>
|
|
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
|
|
* disposed</li>
|
|
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
|
|
* thread that created the receiver</li>
|
|
* </ul>
|
|
*/
|
|
public void setDigits(final int value) {
|
|
checkWidget();
|
|
digits = value;
|
|
convertSelectionToStringValue();
|
|
}
|
|
|
|
/**
|
|
* Sets the amount that the receiver's value will be modified by when the
|
|
* up/down arrows are pressed to the argument, which must be at least one.
|
|
*
|
|
* @param value the new increment (must be greater than zero)
|
|
*
|
|
* @exception SWTException
|
|
* <ul>
|
|
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
|
|
* disposed</li>
|
|
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
|
|
* thread that created the receiver</li>
|
|
* </ul>
|
|
*/
|
|
public void setIncrement(final int value) {
|
|
checkWidget();
|
|
increment = value;
|
|
}
|
|
|
|
/**
|
|
* Sets the maximum value that the receiver will allow. This new value will
|
|
* be ignored if it is less than the receiver's current minimum value. If
|
|
* the new maximum is applied then the receiver's selection value will be
|
|
* adjusted if necessary to fall within its new range.
|
|
*
|
|
* @param value the new maximum, which must be greater than or equal to the
|
|
* current minimum
|
|
*
|
|
* @exception SWTException
|
|
* <ul>
|
|
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
|
|
* disposed</li>
|
|
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
|
|
* thread that created the receiver</li>
|
|
* </ul>
|
|
*/
|
|
public void setMaximum(final int value) {
|
|
checkWidget();
|
|
maximum = value;
|
|
}
|
|
|
|
/**
|
|
* Sets the minimum value that the receiver will allow. This new value will
|
|
* be ignored if it is greater than the receiver's current maximum value. If
|
|
* the new minimum is applied then the receiver's selection value will be
|
|
* adjusted if necessary to fall within its new range.
|
|
*
|
|
* @param value the new minimum, which must be less than or equal to the
|
|
* current maximum
|
|
*
|
|
* @exception SWTException
|
|
* <ul>
|
|
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
|
|
* disposed</li>
|
|
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
|
|
* thread that created the receiver</li>
|
|
* </ul>
|
|
*/
|
|
public void setMinimum(final int value) {
|
|
checkWidget();
|
|
minimum = value;
|
|
}
|
|
|
|
/**
|
|
* Sets the amount that the receiver's position will be modified by when the
|
|
* page up/down keys are pressed to the argument, which must be at least
|
|
* one.
|
|
*
|
|
* @param value the page increment (must be greater than zero)
|
|
*
|
|
* @exception SWTException
|
|
* <ul>
|
|
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
|
|
* disposed</li>
|
|
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
|
|
* thread that created the receiver</li>
|
|
* </ul>
|
|
*/
|
|
public void setPageIncrement(final int value) {
|
|
checkWidget();
|
|
pageIncrement = value;
|
|
}
|
|
|
|
/**
|
|
* Sets the <em>selection</em>, which is the receiver's position, to the
|
|
* argument. If the argument is not within the range specified by minimum
|
|
* and maximum, it will be adjusted to fall within this range.
|
|
*
|
|
* @param value the new selection (must be zero or greater)
|
|
*
|
|
* @exception SWTException
|
|
* <ul>
|
|
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
|
|
* disposed</li>
|
|
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
|
|
* thread that created the receiver</li>
|
|
* </ul>
|
|
*/
|
|
public void setSelection(int selection) {
|
|
checkWidget();
|
|
if (selection < minimum) {
|
|
selection = minimum;
|
|
} else if (selection > maximum) {
|
|
selection = maximum;
|
|
}
|
|
|
|
storedValue = selection;
|
|
text.setText(convertSelectionToStringValue());
|
|
}
|
|
|
|
/**
|
|
* Convert the selection into a string
|
|
*
|
|
* @return the string representation of the selection
|
|
*/
|
|
private String convertSelectionToStringValue() {
|
|
if (getDigits() == 0) {
|
|
return String.valueOf(storedValue);
|
|
}
|
|
final StringBuilder unformatted = new StringBuilder(String.valueOf(storedValue * Math.pow(10, -1 * getDigits())));
|
|
for (int i = 0; i < digits; i++) {
|
|
unformatted.append("0");
|
|
}
|
|
final int position = unformatted.indexOf(".");
|
|
final String temp = unformatted.substring(0, position + 1 + digits);
|
|
return temp.replace('.', decimalFormatSeparator);
|
|
|
|
}
|
|
|
|
/**
|
|
* Sets the maximum number of characters that the receiver's text field is
|
|
* capable of holding to be the argument.
|
|
* <p>
|
|
* To reset this value to the default, use
|
|
* <code>setTextLimit(Spinner.LIMIT)</code>. Specifying a limit value larger
|
|
* than <code>Spinner.LIMIT</code> sets the receiver's limit to
|
|
* <code>Spinner.LIMIT</code>.
|
|
* </p>
|
|
*
|
|
* @param limit new text limit
|
|
*
|
|
* @exception IllegalArgumentException
|
|
* <ul>
|
|
* <li>ERROR_CANNOT_BE_ZERO - if the limit is zero</li>
|
|
* </ul>
|
|
* @exception SWTException
|
|
* <ul>
|
|
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
|
|
* disposed</li>
|
|
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
|
|
* thread that created the receiver</li>
|
|
* </ul>
|
|
*
|
|
* @see #LIMIT
|
|
*/
|
|
public void setTextLimit(final int limit) {
|
|
checkWidget();
|
|
text.setTextLimit(limit);
|
|
}
|
|
|
|
/**
|
|
* Sets the receiver's selection, minimum value, maximum value, digits,
|
|
* increment and page increment all at once.
|
|
* <p>
|
|
* Note: This is similar to setting the values individually using the
|
|
* appropriate methods, but may be implemented in a more efficient fashion
|
|
* on some platforms.
|
|
* </p>
|
|
*
|
|
* @param selection the new selection value
|
|
* @param minimum the new minimum value
|
|
* @param maximum the new maximum value
|
|
* @param digits the new digits value
|
|
* @param increment the new increment value
|
|
* @param pageIncrement the new pageIncrement value
|
|
*
|
|
* @exception SWTException
|
|
* <ul>
|
|
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
|
|
* disposed</li>
|
|
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
|
|
* thread that created the receiver</li>
|
|
* </ul>
|
|
*/
|
|
public void setValues(final int selection, final int minimum, final int maximum, final int digits, final int increment, final int pageIncrement) {
|
|
setMinimum(minimum);
|
|
setMaximum(maximum);
|
|
setDigits(digits);
|
|
setIncrement(increment);
|
|
setPageIncrement(pageIncrement);
|
|
setSelection(selection);
|
|
}
|
|
|
|
/**
|
|
* Sets the receiver's drag detect state. If the argument is
|
|
* <code>true</code>, the receiver will detect drag gestures, otherwise
|
|
* these gestures will be ignored.
|
|
*
|
|
* @param dragDetect the new drag detect state
|
|
*
|
|
* @exception SWTException
|
|
* <ul>
|
|
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
|
|
* disposed</li>
|
|
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
|
|
* thread that created the receiver</li>
|
|
* </ul>
|
|
*/
|
|
@Override
|
|
public boolean setFocus() {
|
|
checkWidget();
|
|
return text.setFocus();
|
|
}
|
|
|
|
/**
|
|
* Forces the receiver to have the <em>keyboard focus</em>, causing all
|
|
* keyboard events to be delivered to it.
|
|
*
|
|
* @return <code>true</code> if the control got focus, and
|
|
* <code>false</code> if it was unable to.
|
|
*
|
|
* @exception SWTException
|
|
* <ul>
|
|
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
|
|
* disposed</li>
|
|
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
|
|
* thread that created the receiver</li>
|
|
* </ul>
|
|
*
|
|
* @see #setFocus
|
|
*/
|
|
@Override
|
|
public boolean forceFocus() {
|
|
checkWidget();
|
|
return text.forceFocus();
|
|
}
|
|
|
|
/**
|
|
* 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.
|
|
* <p>
|
|
* Note: This operation is a hint and may be overridden by the platform. For
|
|
* example, on Windows the background of a Button cannot be changed.
|
|
* </p>
|
|
*
|
|
* @param color the new color (or null)
|
|
*
|
|
* @exception IllegalArgumentException
|
|
* <ul>
|
|
* <li>ERROR_INVALID_ARGUMENT - if the argument has been
|
|
* disposed</li>
|
|
* </ul>
|
|
* @exception SWTException
|
|
* <ul>
|
|
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
|
|
* disposed</li>
|
|
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
|
|
* thread that created the receiver</li>
|
|
* </ul>
|
|
*/
|
|
@Override
|
|
public void setBackground(final Color color) {
|
|
super.setBackground(color);
|
|
leftButton.setBackground(color);
|
|
rightButton.setBackground(color);
|
|
text.setBackground(color);
|
|
}
|
|
|
|
/**
|
|
* Sets the receiver's background image to the image specified by the
|
|
* argument, or to the default system color for the control if the argument
|
|
* is null. The background image is tiled to fill the available space.
|
|
* <p>
|
|
* Note: This operation is a hint and may be overridden by the platform. For
|
|
* example, on Windows the background of a Button cannot be changed.
|
|
* </p>
|
|
*
|
|
* @param image the new image (or null)
|
|
*
|
|
* @exception IllegalArgumentException
|
|
* <ul>
|
|
* <li>ERROR_INVALID_ARGUMENT - if the argument has been
|
|
* disposed</li>
|
|
* <li>ERROR_INVALID_ARGUMENT - if the argument is not a
|
|
* bitmap</li>
|
|
* </ul>
|
|
* @exception SWTException
|
|
* <ul>
|
|
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
|
|
* disposed</li>
|
|
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
|
|
* thread that created the receiver</li>
|
|
* </ul>
|
|
*/
|
|
@Override
|
|
public void setBackgroundImage(final Image image) {
|
|
super.setBackgroundImage(image);
|
|
leftButton.setBackgroundImage(image);
|
|
rightButton.setBackgroundImage(image);
|
|
text.setBackgroundImage(image);
|
|
|
|
}
|
|
|
|
/**
|
|
* Sets the receiver's cursor to the cursor specified by the argument, or to
|
|
* the default cursor for that kind of control if the argument is null.
|
|
* <p>
|
|
* When the mouse pointer passes over a control its appearance is changed to
|
|
* match the control's cursor.
|
|
* </p>
|
|
*
|
|
* @param cursor the new cursor (or null)
|
|
*
|
|
* @exception IllegalArgumentException
|
|
* <ul>
|
|
* <li>ERROR_INVALID_ARGUMENT - if the argument has been
|
|
* disposed</li>
|
|
* </ul>
|
|
* @exception SWTException
|
|
* <ul>
|
|
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
|
|
* disposed</li>
|
|
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
|
|
* thread that created the receiver</li>
|
|
* </ul>
|
|
*/
|
|
@Override
|
|
public void setCursor(final Cursor cursor) {
|
|
super.setCursor(cursor);
|
|
leftButton.setCursor(cursor);
|
|
rightButton.setCursor(cursor);
|
|
text.setCursor(cursor);
|
|
}
|
|
|
|
/**
|
|
* Enables the receiver if the argument is <code>true</code>, 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 new enabled state
|
|
*
|
|
* @exception SWTException
|
|
* <ul>
|
|
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
|
|
* disposed</li>
|
|
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
|
|
* thread that created the receiver</li>
|
|
* </ul>
|
|
*/
|
|
@Override
|
|
public void setEnabled(final boolean enabled) {
|
|
super.setEnabled(enabled);
|
|
leftButton.setEnabled(enabled);
|
|
rightButton.setEnabled(enabled);
|
|
text.setEnabled(enabled);
|
|
}
|
|
|
|
/**
|
|
* 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 new font (or null)
|
|
*
|
|
* @exception IllegalArgumentException
|
|
* <ul>
|
|
* <li>ERROR_INVALID_ARGUMENT - if the argument has been
|
|
* disposed</li>
|
|
* </ul>
|
|
* @exception SWTException
|
|
* <ul>
|
|
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
|
|
* disposed</li>
|
|
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
|
|
* thread that created the receiver</li>
|
|
* </ul>
|
|
*/
|
|
@Override
|
|
public void setFont(final Font font) {
|
|
super.setFont(font);
|
|
text.setFont(font);
|
|
}
|
|
|
|
/**
|
|
* 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.
|
|
* <p>
|
|
* Note: This operation is a hint and may be overridden by the platform.
|
|
* </p>
|
|
*
|
|
* @param color the new color (or null)
|
|
*
|
|
* @exception IllegalArgumentException
|
|
* <ul>
|
|
* <li>ERROR_INVALID_ARGUMENT - if the argument has been
|
|
* disposed</li>
|
|
* </ul>
|
|
* @exception SWTException
|
|
* <ul>
|
|
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
|
|
* disposed</li>
|
|
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
|
|
* thread that created the receiver</li>
|
|
* </ul>
|
|
*/
|
|
@Override
|
|
public void setForeground(final Color color) {
|
|
super.setForeground(color);
|
|
leftButton.setForeground(color);
|
|
rightButton.setForeground(color);
|
|
text.setForeground(color);
|
|
}
|
|
|
|
/**
|
|
* Sets the receiver's pop up menu to the argument. All controls may
|
|
* optionally have a pop up menu that is displayed when the user requests
|
|
* one for the control. The sequence of key strokes, button presses and/or
|
|
* button releases that are used to request a pop up menu is platform
|
|
* specific.
|
|
* <p>
|
|
* Note: Disposing of a control that has a pop up menu will dispose of the
|
|
* menu. To avoid this behavior, set the menu to null before the control is
|
|
* disposed.
|
|
* </p>
|
|
*
|
|
* @param menu the new pop up menu
|
|
*
|
|
* @exception IllegalArgumentException
|
|
* <ul>
|
|
* <li>ERROR_MENU_NOT_POP_UP - the menu is not a pop up menu</li>
|
|
* <li>ERROR_INVALID_PARENT - if the menu is not in the same
|
|
* widget tree</li>
|
|
* <li>ERROR_INVALID_ARGUMENT - if the menu has been disposed
|
|
* </li>
|
|
* </ul>
|
|
* @exception SWTException
|
|
* <ul>
|
|
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
|
|
* disposed</li>
|
|
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
|
|
* thread that created the receiver</li>
|
|
* </ul>
|
|
*/
|
|
@Override
|
|
public void setMenu(final Menu menu) {
|
|
super.setMenu(menu);
|
|
leftButton.setMenu(menu);
|
|
rightButton.setMenu(menu);
|
|
text.setMenu(menu);
|
|
}
|
|
|
|
/**
|
|
* 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.
|
|
* <p>
|
|
* 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.
|
|
* </p>
|
|
*
|
|
* @param string the new tool tip text (or null)
|
|
*
|
|
* @exception SWTException
|
|
* <ul>
|
|
* <li>ERROR_WIDGET_DISPOSED - if the receiver has been
|
|
* disposed</li>
|
|
* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the
|
|
* thread that created the receiver</li>
|
|
* </ul>
|
|
*/
|
|
@Override
|
|
public void setToolTipText(final String tooltipText) {
|
|
super.setToolTipText(tooltipText);
|
|
leftButton.setToolTipText(tooltipText);
|
|
rightButton.setToolTipText(tooltipText);
|
|
text.setToolTipText(tooltipText);
|
|
}
|
|
|
|
} |