// RangedIntegerField.java
// $Id: RangedIntegerField.java,v 1.3 2000/08/16 21:37:49 ylafon Exp $
// (c) COPYRIGHT MIT and INRIA, 1996.
// Please first read the full copyright statement in file COPYRIGHT.html
package org.w3c.tools.forms ;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Container;
import java.awt.Event;
import java.awt.Insets;
import java.awt.Panel;
import java.awt.Scrollbar;
import java.awt.TextComponent;
import java.awt.TextField;
class RangedIntegerFieldEditor extends Panel {
RangedIntegerField field = null ;
TextField text = null ;
Scrollbar slider = null ;
int lo = Integer.MIN_VALUE ;
int hi = Integer.MAX_VALUE ;
public boolean action (Event evt, Object arg) {
try {
Integer ival = new Integer(Integer.parseInt(text.getText()));
if ( ! field.acceptChange(ival) )
text.setText(field.getValue().toString()) ;
return true ;
} catch (NumberFormatException ex) {
// This should never happen!
throw new RuntimeException ("implementation bug !");
}
}
public boolean handleEvent (Event evt) {
if ( evt.target instanceof Scrollbar ) {
text.setText(String.valueOf(slider.getValue()));
return true ;
} else {
return super.handleEvent(evt) ;
}
}
public boolean keyDown (Event evt, int key) {
if ( evt.target instanceof TextField ) {
switch (key) {
case 9:
case 10:
action(evt, evt.arg) ;
field.manager.nextField() ;
return true ;
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
case Event.LEFT: case Event.RIGHT: case 96: case 127:
return super.keyDown(evt, key) ;
default:
return true ;
}
} else {
return super.keyDown(evt, key) ;
}
}
public Insets insets() {
return new Insets(5, 5, 5, 8) ;
}
RangedIntegerFieldEditor(RangedIntegerField field, int lo, int hi, int v) {
super() ;
this.field = field ;
BorderLayout bl = new BorderLayout() ;
setLayout(bl) ;
// Add the text:
text = new TextField("0") ;
add ("North", text) ;
// Add the slider:
slider = new Scrollbar(Scrollbar.HORIZONTAL, 0, 100, lo, hi) ;
add ("South", slider) ;
}
}
public class RangedIntegerField extends IntegerField {
int hi = Integer.MAX_VALUE ;
int lo = Integer.MIN_VALUE ;
RangedIntegerFieldEditor editor = null ;
/**
* Get an editor for this field.
*/
public Component getEditor() {
if ( editor == null )
editor = new RangedIntegerFieldEditor(this, lo, hi, getIntValue());
return editor ;
}
public RangedIntegerField(FormManager manager
, String name, String title
, int lo, int hi, int val)
throws IllegalFieldValueException
{
super(manager, name, title, val) ;
this.lo = lo ;
this.hi = hi ;
}
}