0
|
1 /*----------------------------------------------------------------------------\
|
|
2 | Range Class |
|
|
3 |-----------------------------------------------------------------------------|
|
|
4 | Created by Erik Arvidsson |
|
|
5 | (http://webfx.eae.net/contact.html#erik) |
|
|
6 | For WebFX (http://webfx.eae.net/) |
|
|
7 |-----------------------------------------------------------------------------|
|
|
8 | Used to model the data used when working with sliders, scrollbars and |
|
|
9 | progress bars. Based on the ideas of the javax.swing.BoundedRangeModel |
|
|
10 | interface defined by Sun for Java; http://java.sun.com/products/jfc/ |
|
|
11 | swingdoc-api-1.0.3/com/sun/java/swing/BoundedRangeModel.html |
|
|
12 |-----------------------------------------------------------------------------|
|
|
13 | Copyright (c) 2002, 2005, 2006 Erik Arvidsson |
|
|
14 |-----------------------------------------------------------------------------|
|
|
15 | Licensed under the Apache License, Version 2.0 (the "License"); you may not |
|
|
16 | use this file except in compliance with the License. You may obtain a copy |
|
|
17 | of the License at http://www.apache.org/licenses/LICENSE-2.0 |
|
|
18 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
|
|
19 | Unless required by applicable law or agreed to in writing, software |
|
|
20 | distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
|
|
21 | WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
|
|
22 | License for the specific language governing permissions and limitations |
|
|
23 | under the License. |
|
|
24 |-----------------------------------------------------------------------------|
|
|
25 | 2002-10-14 | Original version released |
|
|
26 | 2005-10-27 | Use Math.round instead of Math.floor |
|
|
27 | 2006-05-28 | Changed license to Apache Software License 2.0. |
|
|
28 |-----------------------------------------------------------------------------|
|
|
29 | Created 2002-10-14 | All changes are in the log above. | Updated 2006-05-28 |
|
|
30 \----------------------------------------------------------------------------*/
|
|
31
|
|
32
|
|
33 function Range() {
|
|
34 this._value = 0;
|
|
35 this._minimum = 0;
|
|
36 this._maximum = 100;
|
|
37 this._extent = 0;
|
|
38
|
|
39 this._isChanging = false;
|
|
40 }
|
|
41
|
|
42 Range.prototype.setValue = function (value) {
|
|
43 value = Math.round(parseFloat(value));
|
|
44 if (isNaN(value)) return;
|
|
45 if (this._value != value) {
|
|
46 if (value + this._extent > this._maximum)
|
|
47 this._value = this._maximum - this._extent;
|
|
48 else if (value < this._minimum)
|
|
49 this._value = this._minimum;
|
|
50 else
|
|
51 this._value = value;
|
|
52 if (!this._isChanging && typeof this.onchange == "function")
|
|
53 this.onchange();
|
|
54 }
|
|
55 };
|
|
56
|
|
57 Range.prototype.getValue = function () {
|
|
58 return this._value;
|
|
59 };
|
|
60
|
|
61 Range.prototype.setExtent = function (extent) {
|
|
62 if (this._extent != extent) {
|
|
63 if (extent < 0)
|
|
64 this._extent = 0;
|
|
65 else if (this._value + extent > this._maximum)
|
|
66 this._extent = this._maximum - this._value;
|
|
67 else
|
|
68 this._extent = extent;
|
|
69 if (!this._isChanging && typeof this.onchange == "function")
|
|
70 this.onchange();
|
|
71 }
|
|
72 };
|
|
73
|
|
74 Range.prototype.getExtent = function () {
|
|
75 return this._extent;
|
|
76 };
|
|
77
|
|
78 Range.prototype.setMinimum = function (minimum) {
|
|
79 if (this._minimum != minimum) {
|
|
80 var oldIsChanging = this._isChanging;
|
|
81 this._isChanging = true;
|
|
82
|
|
83 this._minimum = minimum;
|
|
84
|
|
85 if (minimum > this._value)
|
|
86 this.setValue(minimum);
|
|
87 if (minimum > this._maximum) {
|
|
88 this._extent = 0;
|
|
89 this.setMaximum(minimum);
|
|
90 this.setValue(minimum)
|
|
91 }
|
|
92 if (minimum + this._extent > this._maximum)
|
|
93 this._extent = this._maximum - this._minimum;
|
|
94
|
|
95 this._isChanging = oldIsChanging;
|
|
96 if (!this._isChanging && typeof this.onchange == "function")
|
|
97 this.onchange();
|
|
98 }
|
|
99 };
|
|
100
|
|
101 Range.prototype.getMinimum = function () {
|
|
102 return this._minimum;
|
|
103 };
|
|
104
|
|
105 Range.prototype.setMaximum = function (maximum) {
|
|
106 if (this._maximum != maximum) {
|
|
107 var oldIsChanging = this._isChanging;
|
|
108 this._isChanging = true;
|
|
109
|
|
110 this._maximum = maximum;
|
|
111
|
|
112 if (maximum < this._value)
|
|
113 this.setValue(maximum - this._extent);
|
|
114 if (maximum < this._minimum) {
|
|
115 this._extent = 0;
|
|
116 this.setMinimum(maximum);
|
|
117 this.setValue(this._maximum);
|
|
118 }
|
|
119 if (maximum < this._minimum + this._extent)
|
|
120 this._extent = this._maximum - this._minimum;
|
|
121 if (maximum < this._value + this._extent)
|
|
122 this._extent = this._maximum - this._value;
|
|
123
|
|
124 this._isChanging = oldIsChanging;
|
|
125 if (!this._isChanging && typeof this.onchange == "function")
|
|
126 this.onchange();
|
|
127 }
|
|
128 };
|
|
129
|
|
130 Range.prototype.getMaximum = function () {
|
|
131 return this._maximum;
|
|
132 };
|