Appendix B: SpinnerTest and Spinner
This appendix contains the source code for the SpinnerTest and Spinner classes. The Spinner class loads and calls the native
code listed in either Appendix C: Spinner For Windows, or Appendix D: Spinner for Motif.
SpinnerTest.java
package spinner;
/*
* (c) Copyright IBM Corp. 2000, 2001.
* All Rights Reserved.
*/
import org.eclipse.swt.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.events.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.graphics.*;
public class SpinnerTest {
public static void main (String [] args) {
Display display = new Display ();
Shell shell = new Shell (display);
shell.setLayout (new RowLayout ());
final Spinner spinner = new Spinner (shell, 0);
spinner.setMaximum (999);
System.out.println ("max set to " + spinner.getMaximum ());
spinner.setSelection (500);
System.out.println ("selection set to " + spinner.getSelection ());
spinner.setMinimum (100);
System.out.println ("min set to " + spinner.getMinimum ());
Font font = new Font (display, "Courier", 20, SWT.NORMAL);
spinner.setFont (font);
spinner.addSelectionListener (new SelectionAdapter () {
public void widgetSelected (SelectionEvent e) {
System.out.println (spinner.getSelection ());
}
});
shell.pack ();
shell.open ();
while (!shell.isDisposed ()){
if (!display.readAndDispatch ()) display.sleep ();
}
font.dispose ();
}
}
Spinner.java
package spinner;
/*
* (c) Copyright IBM Corp. 2000, 2001.
* All Rights Reserved.
*/
import java.util.*;
import org.eclipse.swt.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.events.*;
public class Spinner extends Composite {
int handleSpinner;
static Hashtable table = new Hashtable ();
static {
System.loadLibrary ("spinner");
}
public Spinner (Composite parent, int style) {
super (parent, style);
int handleParent = handle;
handleSpinner = createControl (handleParent);
if (handleSpinner == 0) SWT.error (SWT.ERROR_NO_HANDLES);
table.put (new Integer (handleSpinner), this);
addDisposeListener (new DisposeListener () {
public void widgetDisposed (DisposeEvent e) {
Spinner.this.widgetDisposed (e);
}
});
addControlListener (new ControlAdapter () {
public void controlResized (ControlEvent e) {
Spinner.this.controlResized (e);
}
});
addFocusListener (new FocusAdapter () {
public void focusGained (FocusEvent e) {
Spinner.this.focusGained (e);
}
});
Font font = getFont ();
setFont (handleSpinner, font.handle);
}
public void setFont (Font font) {
super.setFont (font);
int hFont = 0;
if (font != null) hFont = font.handle;
setFont (handleSpinner, hFont);
}
public int getSelection () {
checkWidget ();
return getPosition (handleSpinner);
}
public void setSelection (int selection) {
checkWidget ();
setPosition (handleSpinner, selection);
}
public void setMaximum (int maximum) {
checkWidget ();
setMaximum (handleSpinner, maximum);
}
public int getMaximum () {
checkWidget ();
return getMaximum (handleSpinner);
}
public void setMinimum (int minimum) {
checkWidget ();
setMinimum (handleSpinner, minimum);
}
public int getMinimum () {
checkWidget ();
return getMinimum (handleSpinner);
}
public void widgetDisposed (DisposeEvent e) {
table.remove (new Integer (handleSpinner));
handleSpinner = 0;
}
public void controlResized (ControlEvent e) {
Rectangle rect = getClientArea ();
resizeControl (handleSpinner, rect.x, rect.y, rect.width, rect.height);
}
public void focusGained (FocusEvent e) {
setFocus (handleSpinner);
}
public Point computeSize (int wHint, int hHint, boolean changed) {
checkWidget ();
int [] result = new int [2];
computeSize (handleSpinner, result);
if (wHint != SWT.DEFAULT) result [0] = wHint;
if (hHint != SWT.DEFAULT) result [1] = hHint;
int border = getBorderWidth ();
return new Point (result [0] + border * 2, result [1] + border * 2);
}
public void addSelectionListener (SelectionListener listener) {
if (listener == null) throw new SWTError (SWT.ERROR_NULL_ARGUMENT);
addListener (SWT.Selection, new TypedListener (listener));
}
static void widgetSelected (int handle) {
Spinner spinner = (Spinner) table.get (new Integer (handle));
if (spinner == null) return;
spinner.notifyListeners (SWT.Selection, new Event ());
}
/*********** JAVA NATIVES ************/
static final native int createControl (int handle);
static final native void computeSize (int handle, int [] result);
static final native void resizeControl (int handle, int x, int y, int width, int height);
static final native void setPosition (int handle, int position);
static final native int getPosition (int handle);
static final native void setMaximum (int handle, int max);
static final native int getMaximum (int handle);
static final native void setMinimum (int handle, int min);
static final native int getMinimum (int handle);
static final native void setFont (int handle, int hFont);
static final native void setFocus (int handle);
}