All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.smartclient.debug.public.sc.client.widgets.Rangebar.js Maven / Gradle / Ivy

The newest version!
/*
 * Isomorphic SmartClient
 * Version SC_SNAPSHOT-2011-08-08 (2011-08-08)
 * Copyright(c) 1998 and beyond Isomorphic Software, Inc. All rights reserved.
 * "SmartClient" is a trademark of Isomorphic Software, Inc.
 *
 * [email protected]
 *
 * http://smartclient.com/license
 */

 
//> @class Rangebar
//  
//  @treeLocation Client Reference/Control
//<
isc.ClassFactory.defineClass("Rangebar", "Progressbar");

//----------  Define instance properties  ----------\\
isc.Rangebar.addProperties({

    value:0,						
	minValue:0,					    
	maxValue:99,

	title:"",					// title.............optional display title 
	
	vertical:true,				// vertical.........vertical rangebar if true; horizontal rangebar if false

    showTitle:true,				// showTitle........if true, display the bar's title
								
	showRange:true,				// showRange........if true, display the min and max values of the bar;

    showValue:true,			    // showValue........if true, display the bar's value

    allLabelDefaults : {
        width : 50,
        height : 20,
	    spacing : 5          // space between the label and the bar - this is used by Rangebar only
    },

    titleLabelDefaults : {
        width : 100,
        className : "rangebarTitle"
    },

    rangeLabelDefaults : {
    	className:"rangebarRange"
    },
    
    valueLabelDefaults : {
    	className:"rangebarValue"
    },

    forceOverrides : {
        _resizeWithMaster: false,
        autoDraw: false
    },
    
	// text to use for range label instead of minValue
	//minValueLabel:null,

	// text to use for range label instead of maxValue
	//maxValueLabel:null,			
	
	flipValues: false 			//XXX NOT TESTED
});				  

//!>Deferred

//----------  Define instance methods  ----------\\
isc.Rangebar.addMethods({

initWidget : function () {
    this.Super(this._$initWidget);

    this.titleLabelDefaults = isc.addProperties({}, this.allLabelDefaults,
                                                this.titleLabelDefaults);
    this.valueLabelDefaults = isc.addProperties({}, this.allLabelDefaults,
                                                this.valueLabelDefaults);
    this.rangeLabelDefaults = isc.addProperties({}, this.allLabelDefaults,
                                                this.rangeLabelDefaults);
    if (this.showRange) {
        this._minLabel = this.addPeer(this._createRangeLabel("min"));
        this._maxLabel = this.addPeer(this._createRangeLabel("max"));
    }
	if (this.showValue) this._valueLabel = this.addPeer(this._createValueLabel());
	if (this.showTitle) this._titleLabel = this.addPeer(this._createTitleLabel());
    this.setValue(this.value);
},

resized : function(deltaX, deltaY) {
    this._adjustPeerPositions();
},

_adjustPeerPositions : function() {
    if(this.showRange && this._minLabel && this._maxLabel) {
        var minProps = this._computeRangeLabelProperties("min");
        var maxProps = this._computeRangeLabelProperties("max");
        this._minLabel.moveTo(minProps.left, minProps.top);
        this._maxLabel.moveTo(maxProps.left, maxProps.top);
    }
    
    if(this.showValue && this._valueLabel) {
        var props = this._computeValueLabelProperties();
        this._valueLabel.moveTo(props.left, props.top);
    }

    if(this.showTitle && this._titleLabel) {
        var props = this._computeTitleLabelProperties();
        this._titleLabel.moveTo(props.left, props.top);
    }
},

//------  _createRangeLabel(minOrMax)
// Creates, initializes, and returns a new Label widget to be the rangebar's mix or max value
// label. minOrMax must be the string "min" or "max".
_createRangeLabel : function (minOrMax) {
    var props = this._computeRangeLabelProperties(minOrMax);    

	return isc.Label.newInstance({
        ID:this.getID()+"_"+minOrMax+"Label",
		contents:(minOrMax == "min" ?
			(this.minValueLabel ? this.minValueLabel : this.minValue) : 
			(this.maxValueLabel ? this.maxValueLabel : this.maxValue) )
	}, this.rangeLabelDefaults, props, this.forceOverrides);
},

_computeRangeLabelProperties : function (minOrMax) {
    var props = {},
        defs = this.rangeLabelDefaults,
		shouldFlip = ((minOrMax == "min" && !this.flipValues) || 
                      (minOrMax = "max" && this.flipValues));

    if (this.vertical) {
		props.left = this.left + this.width + defs.spacing,
		props.align = isc.Canvas.LEFT;
        if (shouldFlip) {
			props.top = this.getTop() + this.getHeight() - defs.height;
			props.valign = isc.Canvas.BOTTOM;
		} else {
			props.top = this.getTop();
			props.valign = isc.Canvas.TOP;
		}
	} else { // this.horizontal
		props.top = this.getTop() + this.getHeight() + defs.spacing,
		props.valign = isc.Canvas.TOP;
        if (shouldFlip) {
			props.left = this.getLeft();
			props.align = isc.Canvas.LEFT;
		} else {
			props.left = this.getLeft() + this.getWidth() - defs.width;
			props.align = isc.Canvas.RIGHT;
		}
	}
    return props;
},


//------  _createTitleLabel()
// Creates, initializes, and returns a new Label widget to be the reangebar's title label.
_createTitleLabel : function () {
    var props = this._computeTitleLabelProperties();
    
	return isc.Label.newInstance({
		ID:this.getID()+"_titleLabel",
		contents:this.title
	}, this.titleLabelDefaults, props, this.forceOverrides);
},

_computeTitleLabelProperties : function () {
    var props = {};
    var defs = this.titleLabelDefaults;

	if (this.vertical) {
    	props.left = this.left + this.width/2 - defs.width/2;
		props.top = this.top - defs.height - defs.spacing;
		props.align = isc.Canvas.CENTER;
	} else {
		props.left = this.left - defs.width - defs.spacing;
		props.top = this.top + this.getHeight()/2 - defs.height/2;
		props.align = isc.Canvas.RIGHT;
	}

    return props;
},


//------  _createValueLabel()
// Creates, initializes, and returns a new Label widget to be the rangebar's dynamic value
// label.
_createValueLabel : function () {
    var props = this._computeValueLabelProperties();
    
	return isc.Label.newInstance({
		ID:this.getID()+"_valueLabel",
		contents:this.value,
		mouseUp:"return false;",
		observes:[{source:this, message:"valueChanged", action:"observer.setContents(this.getValue())"}]
	}, this.valueLabelDefaults, props, this.forceOverrides);
},

_computeValueLabelProperties : function () {
    var props = {};
    var defs = this.valueLabelDefaults;    

	if (this.vertical) {
		props.left = this.left - defs.width - defs.spacing;
		props.top = this.top + this.getHeight()/2 - defs.height/2;
		props.align = isc.Canvas.RIGHT;
		props.valign = isc.Canvas.CENTER;
	} else {
		props.left = this.left + this.width/2 - defs.width/2;
		props.top = this.top - defs.height - defs.spacing;
		props.align = isc.Canvas.CENTER;
		props.valign = isc.Canvas.BOTTOM;
	}
    return props;
},

getValue : function () {
	return this.value;
},

// Sets this.value to the new value, moves the rangebar to the appropriate position
// for this value, and calls valueChanged() which you can observe
setValue : function (newValue) {
	// do nothing if the value hasn't actually changed
	if (this.value == newValue) return;

	// make sure the new value falls in the range allowed by this instance.
    // If the value provided is outside the range, it clamps to the appropriate
	// boundary (min/max)
	if (newValue > this.maxValue) newValue = this.maxValue;			
	else if (newValue < this.minValue) newValue = this.minValue;
	this.value = newValue;
    this.percentDone = 100 * (this.value - this.minValue) / (this.maxValue - this.minValue);
    this.markForRedraw();
	this.valueChanged();	// observable method
},

valueChanged : function () { 

}

});
//!




© 2015 - 2024 Weber Informatics LLC | Privacy Policy