1
4
5 import org.aswing.*;
6
7
11 class org.aswing.DefaultBoundedRangeModel extends EventDispatcher implements BoundedRangeModel{
12
13 private var value:Number;
14 private var extent:Number;
15 private var min:Number;
16 private var max:Number;
17 private var isAdjusting:Boolean;
18
19
22 public function DefaultBoundedRangeModel(value:Number, extent:Number, min:Number, max:Number){
23 if(value == undefined) value = 0;
24 if(extent == undefined) value = 0;
25 if(min == undefined) min = 0;
26 if(max == undefined) max = 100;
27
28 this.isAdjusting = false;
29
30 if (max >= min && value >= min && value + extent >= value && value + extent <= max){
31 this.value = value;
32 this.extent = extent;
33 this.min = min;
34 this.max = max;
35 }else{
36 trace("invalid range properties when construct ort.aswing.DefaultBoundedRangeModel");
37 throw new Error("invalid range properties");
38 }
39 }
40
41 public function getValue():Number{
42 return value;
43 }
44
45 public function getExtent():Number{
46 return extent;
47 }
48
49 public function getMinimum():Number{
50 return min;
51 }
52
53 public function getMaximum():Number{
54 return max;
55 }
56
57 public function setValue(n:Number):Void{
58 n = Math.min(n, max - extent);
59 var newValue:Number = Math.max(n, min);
60 setRangeProperties(newValue, extent, min, max, isAdjusting);
61 }
62
63 public function setExtent(n:Number):Void{
64 var newExtent:Number = Math.max(0, n);
65 if (value + newExtent > max){
66 newExtent = max - value;
67 }
68 setRangeProperties(value, newExtent, min, max, isAdjusting);
69 }
70
71 public function setMinimum(n:Number):Void{
72 var newMax:Number = Math.max(n, max);
73 var newValue:Number = Math.max(n, value);
74 var newExtent:Number = Math.min(newMax - newValue, extent);
75 setRangeProperties(newValue, newExtent, n, newMax, isAdjusting);
76 }
77
78 public function setMaximum(n:Number):Void{
79 var newMin:Number = Math.min(n, min);
80 var newExtent:Number = Math.min(n - newMin, extent);
81 var newValue:Number = Math.min(n - newExtent, value);
82 setRangeProperties(newValue, newExtent, newMin, n, isAdjusting);
83 }
84
85 public function setValueIsAdjusting(b:Boolean):Void{
86 setRangeProperties(value, extent, min, max, b);
87 }
88
89 public function getValueIsAdjusting():Boolean{
90 return isAdjusting;
91 }
92
93 public function setRangeProperties(newValue:Number, newExtent:Number, newMin:Number, newMax:Number, adjusting:Boolean):Void{
94 if (newMin > newMax){
95 newMin = newMax;
96 }
97 if (newValue > newMax){
98 newMax = newValue;
99 }
100 if (newValue < newMin){
101 newMin = newValue;
102 }
103 if (newExtent + newValue > newMax){
104 newExtent = newMax - newValue;
105 }
106 if (newExtent < 0){
107 newExtent = 0;
108 }
109 var isChange:Boolean = newValue != value || newExtent != extent || newMin != min || newMax != max || adjusting != isAdjusting;
110 if (isChange){
111 value = newValue;
112 extent = newExtent;
113 min = newMin;
114 max = newMax;
115 isAdjusting = adjusting;
116 fireStateChanged();
117 }
118 }
119
120 public function addChangeListener(func:Function, obj:Object):Object{
121 return addEventListener(Component.ON_STATE_CHANGED, func, obj);
122 }
123
124 public function fireStateChanged():Void{
125 dispatchEvent(Component.ON_STATE_CHANGED, createEventObj(Component.ON_STATE_CHANGED));
126 }
127
128 public function toString():String{
129 var modelString:String = "value=" + getValue() + ", " + "extent=" + getExtent() + ", " + "min=" + getMinimum() + ", " + "max=" + getMaximum() + ", " + "adj=" + getValueIsAdjusting();
130 return "org.aswing.DefaultBoundedRangeModel" + "[" + modelString + "]";
131 }
132 }
133