PatchSet 5066 Date: 2004/08/15 20:50:38 Author: dalibor Branch: HEAD Tag: (none) Log: Resynced with GNU Classpath: Added JSpinner
2004-08-15 Dalibor Topic <[EMAIL PROTECTED]> * libraries/javalib/javax/swing/AbstractSpinnerModel.java, libraries/javalib/javax/swing/JSpinner.java, libraries/javalib/javax/swing/SpinnerNumberModel.java, libraries/javalib/javax/swing/plaf/basic/BasicSpinnerUI.java: New files. Taken from GNU Classpath. * libraries/javalib/javax/swing/plaf/basic/BasicLookAndFeel.java: Resynced with GNU Classpath. 2004-08-14 Ka-Hing Cheung <[EMAIL PROTECTED]> * javax/swing/AbstractSpinnerModel.java, javax/swing/JSpinner.java, javax/swing/SpinnerNumberModel.java, javax/swing/plaf/basic/BasicSpinnerUI.java: New files. * javax/swing/plaf/basic/BasicLookAndFeel.java (initClassDefaults): Added defaults for BasicSpinnerUI. Members: ChangeLog:1.2624->1.2625 libraries/javalib/Makefile.am:1.219->1.220 libraries/javalib/Makefile.in:1.296->1.297 libraries/javalib/all.files:1.13->1.14 libraries/javalib/javax/swing/AbstractSpinnerModel.java:INITIAL->1.1 libraries/javalib/javax/swing/JSpinner.java:INITIAL->1.1 libraries/javalib/javax/swing/SpinnerNumberModel.java:INITIAL->1.1 libraries/javalib/javax/swing/plaf/basic/BasicLookAndFeel.java:1.3->1.4 libraries/javalib/javax/swing/plaf/basic/BasicSpinnerUI.java:INITIAL->1.1 Index: kaffe/ChangeLog diff -u kaffe/ChangeLog:1.2624 kaffe/ChangeLog:1.2625 --- kaffe/ChangeLog:1.2624 Sun Aug 15 20:02:05 2004 +++ kaffe/ChangeLog Sun Aug 15 20:50:38 2004 @@ -1,5 +1,26 @@ 2004-08-15 Dalibor Topic <[EMAIL PROTECTED]> + * libraries/javalib/javax/swing/AbstractSpinnerModel.java, + libraries/javalib/javax/swing/JSpinner.java, + libraries/javalib/javax/swing/SpinnerNumberModel.java, + libraries/javalib/javax/swing/plaf/basic/BasicSpinnerUI.java: + New files. Taken from GNU Classpath. + + * libraries/javalib/javax/swing/plaf/basic/BasicLookAndFeel.java: + Resynced with GNU Classpath. + + 2004-08-14 Ka-Hing Cheung <[EMAIL PROTECTED]> + + * javax/swing/AbstractSpinnerModel.java, + javax/swing/JSpinner.java, + javax/swing/SpinnerNumberModel.java, + javax/swing/plaf/basic/BasicSpinnerUI.java: + New files. + * javax/swing/plaf/basic/BasicLookAndFeel.java + (initClassDefaults): Added defaults for BasicSpinnerUI. + +2004-08-15 Dalibor Topic <[EMAIL PROTECTED]> + * libraries/clib/awt/classpath-gtk/gtk-peer/Makefile.am: Add gtk_cairo_c_source_files when GTK_CAIRO is set. Index: kaffe/libraries/javalib/Makefile.am diff -u kaffe/libraries/javalib/Makefile.am:1.219 kaffe/libraries/javalib/Makefile.am:1.220 --- kaffe/libraries/javalib/Makefile.am:1.219 Sat Aug 14 15:03:28 2004 +++ kaffe/libraries/javalib/Makefile.am Sun Aug 15 20:50:40 2004 @@ -2967,6 +2967,7 @@ javax/swing/AbstractCellEditor.java \ javax/swing/AbstractListModel.java \ javax/swing/AbstractSet.java \ + javax/swing/AbstractSpinnerModel.java \ javax/swing/Action.java \ javax/swing/ActionMap.java \ javax/swing/BorderFactory.java \ @@ -3031,6 +3032,7 @@ javax/swing/JScrollPane.java \ javax/swing/JSeparator.java \ javax/swing/JSlider.java \ + javax/swing/JSpinner.java \ javax/swing/JSplitPane.java \ javax/swing/JTabbedPane.java \ javax/swing/JTable.java \ @@ -3066,6 +3068,7 @@ javax/swing/SizeRequirements.java \ javax/swing/SizeSequence.java \ javax/swing/SpinnerModel.java \ + javax/swing/SpinnerNumberModel.java \ javax/swing/Spring.java \ javax/swing/SpringLayout.java \ javax/swing/SwingConstants.java \ @@ -3214,6 +3217,7 @@ javax/swing/plaf/basic/BasicScrollPaneUI.java \ javax/swing/plaf/basic/BasicSeparatorUI.java \ javax/swing/plaf/basic/BasicSliderUI.java \ + javax/swing/plaf/basic/BasicSpinnerUI.java \ javax/swing/plaf/basic/BasicSplitPaneDivider.java \ javax/swing/plaf/basic/BasicSplitPaneUI.java \ javax/swing/plaf/basic/BasicTabbedPaneUI.java \ Index: kaffe/libraries/javalib/Makefile.in diff -u kaffe/libraries/javalib/Makefile.in:1.296 kaffe/libraries/javalib/Makefile.in:1.297 --- kaffe/libraries/javalib/Makefile.in:1.296 Sun Aug 15 20:03:12 2004 +++ kaffe/libraries/javalib/Makefile.in Sun Aug 15 20:50:40 2004 @@ -3497,6 +3497,7 @@ javax/swing/AbstractCellEditor.java \ javax/swing/AbstractListModel.java \ javax/swing/AbstractSet.java \ + javax/swing/AbstractSpinnerModel.java \ javax/swing/Action.java \ javax/swing/ActionMap.java \ javax/swing/BorderFactory.java \ @@ -3561,6 +3562,7 @@ javax/swing/JScrollPane.java \ javax/swing/JSeparator.java \ javax/swing/JSlider.java \ + javax/swing/JSpinner.java \ javax/swing/JSplitPane.java \ javax/swing/JTabbedPane.java \ javax/swing/JTable.java \ @@ -3596,6 +3598,7 @@ javax/swing/SizeRequirements.java \ javax/swing/SizeSequence.java \ javax/swing/SpinnerModel.java \ + javax/swing/SpinnerNumberModel.java \ javax/swing/Spring.java \ javax/swing/SpringLayout.java \ javax/swing/SwingConstants.java \ @@ -3750,6 +3753,7 @@ javax/swing/plaf/basic/BasicScrollPaneUI.java \ javax/swing/plaf/basic/BasicSeparatorUI.java \ javax/swing/plaf/basic/BasicSliderUI.java \ + javax/swing/plaf/basic/BasicSpinnerUI.java \ javax/swing/plaf/basic/BasicSplitPaneDivider.java \ javax/swing/plaf/basic/BasicSplitPaneUI.java \ javax/swing/plaf/basic/BasicTabbedPaneUI.java \ Index: kaffe/libraries/javalib/all.files diff -u kaffe/libraries/javalib/all.files:1.13 kaffe/libraries/javalib/all.files:1.14 --- kaffe/libraries/javalib/all.files:1.13 Mon Aug 9 14:38:03 2004 +++ kaffe/libraries/javalib/all.files Sun Aug 15 20:50:43 2004 @@ -2485,6 +2485,7 @@ javax/swing/AbstractCellEditor.java javax/swing/AbstractListModel.java javax/swing/AbstractSet.java +javax/swing/AbstractSpinnerModel.java javax/swing/Action.java javax/swing/ActionMap.java javax/swing/BorderFactory.java @@ -2549,6 +2550,7 @@ javax/swing/JScrollPane.java javax/swing/JSeparator.java javax/swing/JSlider.java +javax/swing/JSpinner.java javax/swing/JSplitPane.java javax/swing/JTabbedPane.java javax/swing/JTable.java @@ -2584,6 +2586,7 @@ javax/swing/SizeRequirements.java javax/swing/SizeSequence.java javax/swing/SpinnerModel.java +javax/swing/SpinnerNumberModel.java javax/swing/Spring.java javax/swing/SpringLayout.java javax/swing/SwingConstants.java @@ -2726,6 +2729,7 @@ javax/swing/plaf/basic/BasicScrollPaneUI.java javax/swing/plaf/basic/BasicSeparatorUI.java javax/swing/plaf/basic/BasicSliderUI.java +javax/swing/plaf/basic/BasicSpinnerUI.java javax/swing/plaf/basic/BasicSplitPaneDivider.java javax/swing/plaf/basic/BasicSplitPaneUI.java javax/swing/plaf/basic/BasicTabbedPaneUI.java =================================================================== Checking out kaffe/libraries/javalib/javax/swing/AbstractSpinnerModel.java RCS: /home/cvs/kaffe/kaffe/libraries/javalib/javax/swing/AbstractSpinnerModel.java,v VERS: 1.1 *************** --- /dev/null Sun Aug 4 19:57:58 2002 +++ kaffe/libraries/javalib/javax/swing/AbstractSpinnerModel.java Sun Aug 15 21:04:08 2004 @@ -0,0 +1,115 @@ +/* AbstractSpinnerModel.java -- + Copyright (C) 2004 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.swing; + +import java.util.EventListener; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import javax.swing.event.EventListenerList; + +/** + * AbstractSpinnerModel + * @author Ka-Hing Cheung + * @version 1.0 + */ +public abstract class AbstractSpinnerModel implements SpinnerModel +{ + private ChangeEvent changeEvent = new ChangeEvent(this); + + protected EventListenerList listenerList = new EventListenerList(); + + /** + * Creates an <code>AbstractSpinnerModel</code>. + */ + public AbstractSpinnerModel() + { + } + + /** + * Adds a <code>ChangeListener</code>. + * + * @param listener the listener to add + */ + public void addChangeListener(ChangeListener listener) + { + listenerList.add(ChangeListener.class, listener); + } + + /** + * Gets all the listeners that are of a particular type. + * + * @param c the type of listener + * @return the listeners that are of the specific type + */ + public EventListener[] getListeners(Class c) + { + return listenerList.getListeners(c); + } + + /** + * Gets all the <code>ChangeListener</code>s. + * + * @return all the <code>ChangeListener</code>s + */ + public ChangeListener[] getChangeListeners() + { + return (ChangeListener[]) listenerList.getListeners(ChangeListener.class); + } + + /** + * Remove a particular listener. + * + * @param listener the listener to remove + */ + public void removeChangeListener(ChangeListener listener) + { + listenerList.remove(ChangeListener.class, listener); + } + + /** + * Fires a <code>ChangeEvent</code> to all the <code>ChangeListener</code>s + * added to this model + */ + protected void fireStateChanged() + { + ChangeListener[] listeners = getChangeListeners(); + + for(int i = 0; i < listeners.length; ++i) + listeners[i].stateChanged(changeEvent); + } +} =================================================================== Checking out kaffe/libraries/javalib/javax/swing/JSpinner.java RCS: /home/cvs/kaffe/kaffe/libraries/javalib/javax/swing/JSpinner.java,v VERS: 1.1 *************** --- /dev/null Sun Aug 4 19:57:58 2002 +++ kaffe/libraries/javalib/javax/swing/JSpinner.java Sun Aug 15 21:04:08 2004 @@ -0,0 +1,374 @@ +/* JSpinner.java -- + Copyright (C) 2004 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.swing; + +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.Container; +import java.awt.Dimension; +import java.awt.LayoutManager; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.text.DecimalFormat; +import java.text.ParseException; +import javax.swing.border.EtchedBorder; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import javax.swing.event.EventListenerList; +import javax.swing.plaf.SpinnerUI; +import java.util.EventListener; + +/** + * A JSpinner is a component which typically contains a numeric value and a + * way to manipulate the value. + * + * @author Ka-Hing Cheung + * @version 1.0 + */ +public class JSpinner extends JComponent +{ + public static class StubEditor extends JLabel implements ChangeListener + { + private JLabel label; + private JButton up; + private JButton down; + private JSpinner spinner; + + public StubEditor(JSpinner spinner) + { + this.spinner = spinner; + setBorder(new EtchedBorder()); + setHorizontalAlignment(SwingConstants.TRAILING); + stateChanged(null); /* fill in the label */ + } + + public void stateChanged(ChangeEvent evt) + { + setText(String.valueOf(spinner.getValue())); + } + } + + public static class DefaultEditor extends JPanel + implements ChangeListener, PropertyChangeListener, LayoutManager + { + public DefaultEditor(JSpinner spinner) + { + spinner.addChangeListener(this); + } /* TODO */ + + public void commitEdit() + { + } /* TODO */ + + public void dismiss(JSpinner spinner) + { + spinner.removeChangeListener(this); + } + + public JFormattedTextField getTextField() + { + return null; + } /* TODO */ + + public void layoutContainer(Container parent) + { + + } /* TODO */ + + public Dimension minimumLayoutSize(Container parent) + { + return null; + } /* TODO */ + + public Dimension preferredLayoutSize(Container parent) + { + return null; + } /* TODO */ + + public void propertyChange(PropertyChangeEvent evt) + { + + } /* TODO */ + + public void stateChanged(ChangeEvent evt) + { + + } /* TODO */ + + /* no-ops */ + public void removeLayoutComponent(Component child) + { + } + + public void addLayoutComponent(String name, Component child) + { + } + } + + public static class NumberEditor extends DefaultEditor + { + public NumberEditor(JSpinner spinner) + { + super(spinner); + } + + public DecimalFormat getFormat() + { + return null; + } + } + + private SpinnerModel model; + private JComponent editor; + private EventListenerList listenerList = new EventListenerList(); + + private ChangeListener listener = new ChangeListener() + { + public void stateChanged(ChangeEvent evt) + { + fireStateChanged(); + } + }; + + /** + * Creates a JSpinner with <code>SpinnerNumberModel</code> + * + * @see javax.swing.SpinnerNumberModel + */ + public JSpinner() + { + this(new SpinnerNumberModel()); + } + + /** + * Creates a JSpinner with the specific model and sets the default editor + */ + public JSpinner(SpinnerModel model) + { + this.model = model; + model.addChangeListener(listener); + setEditor(createEditor(model)); + updateUI(); + } + + /** + * If the editor is <code>JSpinner.DefaultEditor</code>, then forwards the + * call to it, otherwise do nothing. + */ + public void commitEdit() throws ParseException + { + if(editor instanceof DefaultEditor) + ((DefaultEditor)editor).commitEdit(); + } + + /** + * Gets the current editor + * + * @return the current editor + * @see #setEditor + */ + public JComponent getEditor() + { + return editor; + } + + /** + * Changes the current editor to the new editor. This methods should remove + * the old listeners (if any) and adds the new listeners (if any). + * + * @param editor the new editor + * @see #getEditor + */ + public void setEditor(JComponent editor) + { + if(editor == null) + throw new IllegalArgumentException("editor may not be null"); + + if(this.editor instanceof DefaultEditor) + ((DefaultEditor)editor).dismiss(this); + else if(this.editor instanceof ChangeListener) + removeChangeListener((ChangeListener)this.editor); + + if(editor instanceof ChangeListener) + addChangeListener((ChangeListener)editor); + + this.editor = editor; + } + + /** + * Gets the underly model. + * + * @return the underly model + */ + public SpinnerModel getModel() + { + return model; + } + + /** + * Gets the next value without changing the current value. + * + * @return the next value + * @see javax.swing.SpinnerModel#getNextValue + */ + public Object getNextValue() + { + return model.getNextValue(); + } + + /** + * Gets the previous value without changing the current value. + * + * @return the previous value + * @see javax.swing.SpinnerModel#getPreviousValue + */ + public Object getPreviousValue() + { + return model.getPreviousValue(); + } + + /** + * Gets the <code>SpinnerUI</code> that handles this spinner + * + * @return the <code>SpinnerUI</code> + */ + public SpinnerUI getUI() + { + return (SpinnerUI)ui; + } + + /** + * Gets the current value of the spinner, according to the underly model, not + * the UI. + * + * @return the current value + * @see javax.swing.SpinnerModel#getValue + */ + public Object getValue() + { + return model.getValue(); + } + + /** + * This method returns a name to identify which look and feel class will be + * the UI delegate for this spinner. + * + * @return The UIClass identifier. "SpinnerUI" + */ + public String getUIClassID() + { + return "SpinnerUI"; + } + + /** + * This method resets the spinner's UI delegate to the default UI for the + * current look and feel. + */ + public void updateUI() + { + setUI((SpinnerUI) UIManager.getUI(this)); + } + + /** + * This method sets the spinner's UI delegate. + * + * @param ui The spinner's UI delegate. + */ + public void setUI(SpinnerUI ui) + { + super.setUI(ui); + } + + /** + * Adds a <code>ChangeListener</code> + * + * @param listener the listener to add + */ + public void addChangeListener(ChangeListener listener) + { + listenerList.add(ChangeListener.class, listener); + } + + /** + * Remove a particular listener + * + * @param listener the listener to remove + */ + public void removeChangeListener(ChangeListener listener) + { + listenerList.remove(ChangeListener.class, listener); + } + + /** + * Gets all the <code>ChangeListener</code>s + * + * @return all the <code>ChangeListener</code>s + */ + public ChangeListener[] getChangeListeners() + { + return (ChangeListener[]) listenerList.getListeners(ChangeListener.class); + } + + /** + * Fires a <code>ChangeEvent</code> to all the <code>ChangeListener</code>s + * added to this <code>JSpinner</code> + */ + protected void fireStateChanged() + { + ChangeEvent evt = new ChangeEvent(this); + ChangeListener[] listeners = getChangeListeners(); + + for(int i = 0; i < listeners.length; ++i) + listeners[i].stateChanged(evt); + } + + /** + * Creates an editor for this <code>JSpinner</code>. Really, it should be a + * <code>JSpinner.DefaultEditor</code>, but since that should be implemented + * by a JFormattedTextField, and one is not written, I am just using a dummy + * one backed by a JLabel. + * + * @return the default editor + */ + protected JComponent createEditor(SpinnerModel model) + { + return new StubEditor(this); + } /* TODO */ +} =================================================================== Checking out kaffe/libraries/javalib/javax/swing/SpinnerNumberModel.java RCS: /home/cvs/kaffe/kaffe/libraries/javalib/javax/swing/SpinnerNumberModel.java,v VERS: 1.1 *************** --- /dev/null Sun Aug 4 19:57:58 2002 +++ kaffe/libraries/javalib/javax/swing/SpinnerNumberModel.java Sun Aug 15 21:04:09 2004 @@ -0,0 +1,256 @@ +/* SpinnerNumberModel.java -- + Copyright (C) 2002, 2004 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.swing; + +/** + * SpinnerNumberModel + * @author Ka-Hing Cheung + * @version 1.0 + */ +public class SpinnerNumberModel extends AbstractSpinnerModel +{ + private Number value; + private Comparable minimum; + private Comparable maximum; + private Number stepSize; + + /** + * Creates a <code>SpinnerNumberModel</code> with initial value 0, step 1, + * and no maximum nor minimum. + */ + public SpinnerNumberModel() + { + this(new Integer(0), null, null, new Integer(1)); + } + + /** + * Creates a <code>SpinnerNumberModel</code> with double precision + * + * @param value the initial value + * @param minimum the minimum value + * @param maximum the maximum value + * @param stepSize the step size + * @throws IllegalArgumentException if minimum <= value <= maximum does not + * hold + */ + public SpinnerNumberModel(double value, double minimum, double maximum, + double stepSize) + { + this(new Double(value), new Double(minimum), new Double(maximum), + new Double(stepSize)); + } + + /** + * Creates a <code>SpinnerNumberModel</code> with integer precision + * + * @param value the initial value + * @param minimum the minimum value + * @param maximum the maximum value + * @param stepSize the step size + * @throws IllegalArgumentException if minimum <= value <= maximum does not + * hold + */ + public SpinnerNumberModel(int value, int minimum, int maximum, int stepSize) + { + this(new Integer(value), new Integer(minimum), new Integer(maximum), + new Integer(stepSize)); + } + + /** + * Creates a <code>SpinnerNumberModel</code> with <code>Number</code>s and + * <code>Comparable</code>s. + * + * @param value the initial value + * @param minimum the minimum value, if null there's no minimum + * @param maximum the maximum value, if null there's no maximum + * @param stepSize the step size + * @throws IllegalArgumentException if minimum <= value <= maximum does not + * hold + */ + public SpinnerNumberModel(Number value, Comparable minimum, + Comparable maximum, Number stepSize) + { + if(stepSize == null) + throw new IllegalArgumentException("stepSize may not be null"); + if(value == null) + throw new IllegalArgumentException("value may not be null"); + if(minimum != null) + { + if(minimum.compareTo(value) > 0) + throw new IllegalArgumentException("minimum is not <= value"); + } + else + { + minimum = new Comparable() + { + public int compareTo(Object obj) + { + return -1; + } + }; + } + + if(maximum != null) + { + if(maximum.compareTo(value) < 0) + throw new IllegalArgumentException("maximum is not >= value"); + } + else + { + maximum = new Comparable() + { + public int compareTo(Object obj) + { + return 1; + } + }; + } + + this.value = value; + this.stepSize = stepSize; + this.minimum = minimum; + this.maximum = maximum; + } + + /** + * Sets the new value and fire a change event + * + * @param value the new value + * @throws IllegalArgumentException if minimum <= value <= maximum does not + * hold + */ + public void setValue(Object value) + { + if(! (value instanceof Number)) + throw new IllegalArgumentException("value must be a Number"); + + this.value = (Number) value; + fireStateChanged(); + } + + /** + * Gets the current value + * + * @return the current value + */ + public Object getValue() + { + return value; + } + + /** + * Gets the next value without changing the current value, or null if the + * current value is maximum. + * + * @return the next value + */ + public Object getNextValue() + { + Number num; + + if(value instanceof Double) + { + num = new Double(value.doubleValue() + stepSize.doubleValue()); + } + else if(value instanceof Float) + { + num = new Double(value.floatValue() + stepSize.floatValue()); + } + else if(value instanceof Long) + { + num = new Long(value.longValue() + stepSize.longValue()); + } + else if(value instanceof Integer) + { + num = new Integer(value.intValue() + stepSize.intValue()); + } + else if(value instanceof Short) + { + num = new Short((short) (value.shortValue() + stepSize.shortValue())); + } + else + { + num = new Byte((byte) (value.byteValue() + stepSize.byteValue())); + } + + return maximum.compareTo(num) >= 0 ? num : null; + } + + /** + * Gets the previous value without changing the current value, or null if the + * current value is minimum. + * + * @return the previous value + */ + public Object getPreviousValue() + { + Number num; + + if(value instanceof Double) + { + num = new Double(value.doubleValue() - stepSize.doubleValue()); + } + else if(value instanceof Float) + { + num = new Double(value.floatValue() - stepSize.floatValue()); + } + else if(value instanceof Long) + { + num = new Long(value.longValue() - stepSize.longValue()); + } + else if(value instanceof Integer) + { + num = new Integer(value.intValue() - stepSize.intValue()); + } + else if(value instanceof Short) + { + num = new Short((short) (value.shortValue() - stepSize.shortValue())); + } + else + { + num = new Byte((byte) (value.byteValue() - stepSize.byteValue())); + } + + return maximum.compareTo(num) >= 0 ? num : null; + } + + public Number getNumber() + { + return value; + } +} Index: kaffe/libraries/javalib/javax/swing/plaf/basic/BasicLookAndFeel.java diff -u kaffe/libraries/javalib/javax/swing/plaf/basic/BasicLookAndFeel.java:1.3 kaffe/libraries/javalib/javax/swing/plaf/basic/BasicLookAndFeel.java:1.4 --- kaffe/libraries/javalib/javax/swing/plaf/basic/BasicLookAndFeel.java:1.3 Sun Aug 8 19:46:07 2004 +++ kaffe/libraries/javalib/javax/swing/plaf/basic/BasicLookAndFeel.java Sun Aug 15 20:50:44 2004 @@ -131,6 +131,7 @@ "SeparatorUI", "javax.swing.plaf.basic.BasicSeparatorUI", "SliderUI", "javax.swing.plaf.basic.BasicSliderUI", "SplitPaneUI", "javax.swing.plaf.basic.BasicSplitPaneUI", + "SpinnerUI", "javax.swing.plaf.basic.BasicSpinnerUI", "StandardDialogUI", "javax.swing.plaf.basic.BasicStandardDialogUI", "TabbedPaneUI", "javax.swing.plaf.basic.BasicTabbedPaneUI", "TableHeaderUI", "javax.swing.plaf.basic.BasicTableHeaderUI", =================================================================== Checking out kaffe/libraries/javalib/javax/swing/plaf/basic/BasicSpinnerUI.java RCS: /home/cvs/kaffe/kaffe/libraries/javalib/javax/swing/plaf/basic/BasicSpinnerUI.java,v VERS: 1.1 *************** --- /dev/null Sun Aug 4 19:57:58 2002 +++ kaffe/libraries/javalib/javax/swing/plaf/basic/BasicSpinnerUI.java Sun Aug 15 21:04:09 2004 @@ -0,0 +1,508 @@ +/* SpinnerUI.java -- + Copyright (C) 2003 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from *** Patch too long, truncated *** _______________________________________________ kaffe mailing list [EMAIL PROTECTED] http://kaffe.org/cgi-bin/mailman/listinfo/kaffe