- /*----------------------------------------------------------------------------
- | Range Class |
- |-----------------------------------------------------------------------------|
- | Created by Erik Arvidsson |
- | (http://webfx.eae.net/contact.html#erik) |
- | For WebFX (http://webfx.eae.net/) |
- |-----------------------------------------------------------------------------|
- | Used to model the data used when working with sliders, scrollbars and |
- | progress bars. Based on the ideas of the javax.swing.BoundedRangeModel |
- | interface defined by Sun for Java; http://java.sun.com/products/jfc/ |
- | swingdoc-api-1.0.3/com/sun/java/swing/BoundedRangeModel.html |
- |-----------------------------------------------------------------------------|
- | Copyright (c) 2002, 2005, 2006 Erik Arvidsson |
- |-----------------------------------------------------------------------------|
- | Licensed under the Apache License, Version 2.0 (the "License"); you may not |
- | use this file except in compliance with the License. You may obtain a copy |
- | of the License at http://www.apache.org/licenses/LICENSE-2.0 |
- | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
- | Unless required by applicable law or agreed to in writing, software |
- | distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
- | WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
- | License for the specific language governing permissions and limitations |
- | under the License. |
- |-----------------------------------------------------------------------------|
- | 2002-10-14 | Original version released |
- | 2005-10-27 | Use Math.round instead of Math.floor |
- | 2006-05-28 | Changed license to Apache Software License 2.0. |
- |-----------------------------------------------------------------------------|
- | Created 2002-10-14 | All changes are in the log above. | Updated 2006-05-28 |
- ----------------------------------------------------------------------------*/
- function Range() {
- this._value = 8;
- this._minimum = 0;
- this._maximum = 8;
- this._extent = 8;
- this._isChanging = false;
- }
- Range.prototype.setValue = function (value) {
- value = Math.round(parseFloat(value));
- if (isNaN(value)) return;
- if (this._value != value) {
- if (value + this._extent > this._maximum)
- this._value = this._maximum - this._extent;
- else if (value < this._minimum)
- this._value = this._minimum;
- else
- this._value = value;
- if (!this._isChanging && typeof this.onchange == "function")
- this.onchange();
- }
- };
- Range.prototype.getValue = function () {
- return this._value;
- };
- Range.prototype.setExtent = function (extent) {
- if (this._extent != extent) {
- if (extent < 0)
- this._extent = 0;
- else if (this._value + extent > this._maximum)
- this._extent = this._maximum - this._value;
- else
- this._extent = extent;
- if (!this._isChanging && typeof this.onchange == "function")
- this.onchange();
- }
- };
- Range.prototype.getExtent = function () {
- return this._extent;
- };
- Range.prototype.setMinimum = function (minimum) {
- if (this._minimum != minimum) {
- var oldIsChanging = this._isChanging;
- this._isChanging = true;
- this._minimum = minimum;
- if (minimum > this._value)
- this.setValue(minimum);
- if (minimum > this._maximum) {
- this._extent = 0;
- this.setMaximum(minimum);
- this.setValue(minimum);
- }
- if (minimum + this._extent > this._maximum)
- this._extent = this._maximum - this._minimum;
- this._isChanging = oldIsChanging;
- if (!this._isChanging && typeof this.onchange == "function")
- this.onchange();
- }
- };
- Range.prototype.getMinimum = function () {
- return this._minimum;
- };
- Range.prototype.setMaximum = function (maximum) {
- if (this._maximum != maximum) {
- var oldIsChanging = this._isChanging;
- this._isChanging = true;
- this._maximum = maximum;
- if (maximum < this._value)
- this.setValue(maximum - this._extent);
- if (maximum < this._minimum) {
- this._extent = 0;
- this.setMinimum(maximum);
- this.setValue(this._maximum);
- }
- if (maximum < this._minimum + this._extent)
- this._extent = this._maximum - this._minimum;
- if (maximum < this._value + this._extent)
- this._extent = this._maximum - this._value;
- this._isChanging = oldIsChanging;
- if (!this._isChanging && typeof this.onchange == "function")
- this.onchange();
- }
- };
- Range.prototype.getMaximum = function () {
- return this._maximum;
- };