Subversion Repositories svnkaklik

Rev

Details | Last modification | View Log

Rev Author Line No. Line
157 kaklik 1
/*
2
    AVRcamVIEW: A PC application to test out the functionallity of the
3
     AVRcam real-time image processing engine.
4
    Copyright (C) 2004    Brent A. Taylor
5
 
6
    This program is free software; you can redistribute it and/or
7
    modify it under the terms of the GNU General Public
8
    License as published by the Free Software Foundation; either
9
    version 2 of the License, or (at your option) any later version.
10
 
11
    This program is distributed in the hope that it will be useful,
12
    but WITHOUT ANY WARRANTY; without even the implied warranty of
13
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14
    General Public License for more details.
15
 
16
    You should have received a copy of the GNU General Public
17
    License along with this program; if not, write to the Free Software
18
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19
 
20
   For more information on the AVRcamVIEW, please contact:
21
 
22
   taylorba@comcast.net
23
 
24
   or go to www.jrobot.net for more details regarding the system.
25
*/
26
 
27
package avr.swing;
28
 
29
import javax.swing.SpinnerNumberModel;
30
 
31
public class WrapSpinnerNumberModel extends SpinnerNumberModel {
32
 
33
   public WrapSpinnerNumberModel(Number value, Comparable minimum,
34
                                 Comparable maximum, Number stepSize) {
35
      super(value, minimum, maximum, stepSize);
36
   }
37
 
38
   public WrapSpinnerNumberModel(int value, int minimum,
39
                                 int maximum, int stepSize) {
40
      super(new Integer(value), new Integer(minimum),
41
            new Integer(maximum), new Integer(stepSize));
42
   }
43
 
44
   public Object getNextValue() {
45
      return increment(+1);
46
   }
47
 
48
   public Object getPreviousValue() {
49
      return increment(-1);
50
   }
51
 
52
   private Number increment(int dir) {
53
      Number newValue;
54
      if ((getValue() instanceof Float) || (getValue() instanceof Double)) {
55
         double v = ((Number)getValue()).doubleValue() +
56
            (((Number)getStepSize()).doubleValue() * (double)dir);
57
         if (getValue() instanceof Double) {
58
            newValue = new Double(v);
59
         } else {
60
            newValue = new Float(v);
61
         }
62
      } else {
63
         long v = ((Number)getValue()).longValue() +
64
                  (((Number)getStepSize()).longValue() * (long)dir);
65
 
66
         if (getValue() instanceof Long) {
67
            newValue = new Long(v);
68
         } else if (getValue() instanceof Integer) {
69
            newValue = new Integer((int)v);
70
         } else if (getValue() instanceof Short) {
71
            newValue = new Short((short)v);
72
         } else {
73
            newValue = new Byte((byte)v);
74
         }
75
      }
76
 
77
      if ((getMaximum() != null) && (((Comparable)getMaximum()).compareTo(newValue) < 0)) {
78
         return (Number)getMinimum();
79
      }
80
 
81
      if ((getMinimum() != null) && (((Comparable)getMinimum()).compareTo(newValue) > 0)) {
82
         return (Number)getMaximum();
83
      }
84
 
85
      return newValue;
86
   }
87
 
88
}
89