001: // RangedIntegerField.java
002: // $Id: RangedIntegerField.java,v 1.3 2000/08/16 21:37:49 ylafon Exp $
003: // (c) COPYRIGHT MIT and INRIA, 1996.
004: // Please first read the full copyright statement in file COPYRIGHT.html
005:
006: package org.w3c.tools.forms;
007:
008: import java.awt.BorderLayout;
009: import java.awt.Component;
010: import java.awt.Container;
011: import java.awt.Event;
012: import java.awt.Insets;
013: import java.awt.Panel;
014: import java.awt.Scrollbar;
015: import java.awt.TextComponent;
016: import java.awt.TextField;
017:
018: class RangedIntegerFieldEditor extends Panel {
019: RangedIntegerField field = null;
020: TextField text = null;
021: Scrollbar slider = null;
022: int lo = Integer.MIN_VALUE;
023: int hi = Integer.MAX_VALUE;
024:
025: public boolean action(Event evt, Object arg) {
026: try {
027: Integer ival = new Integer(Integer.parseInt(text.getText()));
028: if (!field.acceptChange(ival))
029: text.setText(field.getValue().toString());
030: return true;
031: } catch (NumberFormatException ex) {
032: // This should never happen!
033: throw new RuntimeException("implementation bug !");
034: }
035: }
036:
037: public boolean handleEvent(Event evt) {
038: if (evt.target instanceof Scrollbar) {
039: text.setText(String.valueOf(slider.getValue()));
040: return true;
041: } else {
042: return super .handleEvent(evt);
043: }
044: }
045:
046: public boolean keyDown(Event evt, int key) {
047: if (evt.target instanceof TextField) {
048: switch (key) {
049: case 9:
050: case 10:
051: action(evt, evt.arg);
052: field.manager.nextField();
053: return true;
054: case '0':
055: case '1':
056: case '2':
057: case '3':
058: case '4':
059: case '5':
060: case '6':
061: case '7':
062: case '8':
063: case '9':
064: case Event.LEFT:
065: case Event.RIGHT:
066: case 96:
067: case 127:
068: return super .keyDown(evt, key);
069: default:
070: return true;
071: }
072: } else {
073: return super .keyDown(evt, key);
074: }
075: }
076:
077: public Insets insets() {
078: return new Insets(5, 5, 5, 8);
079: }
080:
081: RangedIntegerFieldEditor(RangedIntegerField field, int lo, int hi,
082: int v) {
083: super ();
084: this .field = field;
085: BorderLayout bl = new BorderLayout();
086: setLayout(bl);
087: // Add the text:
088: text = new TextField("0");
089: add("North", text);
090: // Add the slider:
091: slider = new Scrollbar(Scrollbar.HORIZONTAL, 0, 100, lo, hi);
092: add("South", slider);
093: }
094: }
095:
096: public class RangedIntegerField extends IntegerField {
097: int hi = Integer.MAX_VALUE;
098: int lo = Integer.MIN_VALUE;
099: RangedIntegerFieldEditor editor = null;
100:
101: /**
102: * Get an editor for this field.
103: */
104:
105: public Component getEditor() {
106: if (editor == null)
107: editor = new RangedIntegerFieldEditor(this , lo, hi,
108: getIntValue());
109: return editor;
110: }
111:
112: public RangedIntegerField(FormManager manager, String name,
113: String title, int lo, int hi, int val)
114: throws IllegalFieldValueException {
115: super(manager, name, title, val);
116: this.lo = lo;
117: this.hi = hi;
118: }
119: }
|