summaryrefslogtreecommitdiff
path: root/js/dojo-1.7.2/dojox/gauges/BarGauge.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/dojo-1.7.2/dojox/gauges/BarGauge.js')
-rw-r--r--js/dojo-1.7.2/dojox/gauges/BarGauge.js181
1 files changed, 181 insertions, 0 deletions
diff --git a/js/dojo-1.7.2/dojox/gauges/BarGauge.js b/js/dojo-1.7.2/dojox/gauges/BarGauge.js
new file mode 100644
index 0000000..9eddd6e
--- /dev/null
+++ b/js/dojo-1.7.2/dojox/gauges/BarGauge.js
@@ -0,0 +1,181 @@
+//>>built
+define("dojox/gauges/BarGauge", ["dojo/_base/declare","dojo/_base/lang","dojo/_base/array","dojo/_base/html","dojo/_base/event","dojox/gfx",
+ "./_Gauge","./BarLineIndicator", "dojo/dom-geometry"],
+ function(declare, lang, arr, html, event, gfx, Gauge, BarLineIndicator, domGeometry) {
+
+/*=====
+ Gauge = dojox.gauges._Gauge;
+=====*/
+
+return declare("dojox.gauges.BarGauge", Gauge, {
+ // summary:
+ // a bar graph built using the dojox.gfx package.
+ //
+ // description:
+ // using dojo.gfx (and thus either SVG or VML based on what is supported), this widget
+ // builds a bar graph component, used to display numerical data in a familiar format.
+ //
+ // usage:
+ // <script type="text/javascript">
+ // require(["dojox/gauges/BarGauge"]);
+ // </script>
+ // ...
+ // <div dojoType="dojox.gauges.BarGauge"
+ // id="testBarGauge"
+ // barGaugeHeight="55"
+ // dataY="25"
+ // dataHeight="25"
+ // dataWidth="225">
+ // </div>
+
+ // dataX: Number
+ // x position of data area (default 5)
+ dataX: 5,
+
+ // dataY: Number
+ // y position of data area (default 5)
+ dataY: 5,
+
+ // dataWidth: Number
+ // width of data area (default is bar graph width - 10)
+ dataWidth: 0,
+
+ // dataHeight: Number
+ // height of data area (default is bar graph width - 10)
+ dataHeight: 0,
+
+ // _defaultIndicator: Object
+ // override of dojox.gauges._Gauge._defaultIndicator
+ _defaultIndicator: BarLineIndicator,
+
+ startup: function(){
+ // handle settings from HTML by making sure all the options are
+ // converted correctly to numbers
+ //
+ // also connects mouse handling events
+
+ if(this.getChildren){
+ arr.forEach(this.getChildren(), function(child){ child.startup(); });
+ }
+
+ if(!this.dataWidth){this.dataWidth = this.gaugeWidth - 10;}
+ if(!this.dataHeight){this.dataHeight = this.gaugeHeight - 10;}
+
+ this.inherited(arguments);
+ },
+
+ _getPosition: function(/*Number*/value){
+ // summary:
+ // This is a helper function used to determine the position that represents
+ // a given value on the bar graph
+ // value: Number
+ // A value to be converted to a position for this bar graph.
+
+ return this.dataX + Math.floor((value - this.min)/(this.max - this.min)*this.dataWidth);
+ },
+
+ _getValueForPosition: function(/*Number*/pos){
+ // summary:
+ // This is a helper function used to determine the value represented by
+ // a position on the bar graph
+ // pos: Number
+ // A position to be converted to a value.
+ return (pos - this.dataX)*(this.max - this.min)/this.dataWidth + this.min;
+ },
+
+ drawRange: function(/*dojox.gfx.Group*/ group, /*Object*/range){
+ // summary:
+ // This function is used to draw (or redraw) a range
+ // description:
+ // Draws a range (colored area on the background of the gauge)
+ // based on the given arguments.
+ // group:
+ // The GFX group where the range must be drawn.
+ // range:
+ // A range is either a dojox.gauges.Range or an object
+ // with similar parameters (low, high, hover, etc.).
+ if(range.shape){
+ range.shape.parent.remove(range.shape);
+ range.shape = null;
+ }
+
+ var x1 = this._getPosition(range.low);
+ var x2 = this._getPosition(range.high);
+ var path = group.createRect({
+ x: x1,
+ y: this.dataY,
+ width: x2 - x1,
+ height: this.dataHeight
+ });
+ if(lang.isArray(range.color) || lang.isString(range.color)){
+ path.setStroke({color: range.color});
+ path.setFill(range.color);
+ }else if(range.color.type){
+ // Color is a gradient
+ var y = this.dataY + this.dataHeight/2;
+ range.color.x1 = x1;
+ range.color.x2 = x2;
+ range.color.y1 = y;
+ range.color.y2 = y;
+ path.setFill(range.color);
+ path.setStroke({color: range.color.colors[0].color});
+ }else if (gfx.svg){
+ // We've defined a style rather than an explicit color
+ path.setStroke({color: "green"}); // Arbitrary color, just have to indicate
+ path.setFill("green"); // that we want it filled
+ path.getEventSource().setAttribute("class", range.color.style);
+ }
+
+ path.connect("onmouseover", lang.hitch(this, this._handleMouseOverRange, range));
+ path.connect("onmouseout", lang.hitch(this, this._handleMouseOutRange, range));
+
+ range.shape = path;
+ },
+
+ getRangeUnderMouse: function(/*Object*/e){
+ // summary:
+ // Determines which range the mouse is currently over
+ // e: Object
+ // The event object as received by the mouse handling functions below.
+ var range = null;
+ var pos = domGeometry.getContentBox(this.gaugeContent);
+ var x = e.clientX - pos.x;
+ var value = this._getValueForPosition(x);
+ if(this._rangeData){
+ for(var i=0; (i<this._rangeData.length) && !range; i++){
+ if((Number(this._rangeData[i].low) <= value) && (Number(this._rangeData[i].high) >= value)){
+ range = this._rangeData[i];
+ }
+ }
+ }
+ return range;
+ },
+
+ _dragIndicator: function(/*Object*/widget, /*Object*/ e){
+ // summary:
+ // Handles the dragging of an indicator to the event position, including moving/re-drawing
+ // get angle for mouse position
+ this._dragIndicatorAt(widget, e.pageX, e.pageY);
+ event.stop(e);
+ },
+
+ _dragIndicatorAt: function(/*Object*/ widget, x, y){
+
+ // summary:
+ // Handles the dragging of an indicator, including moving/re-drawing
+ // get new value based on mouse position
+ var pos = domGeometry.position(widget.gaugeContent, true);
+ var xl = x - pos.x;
+ var value = widget._getValueForPosition(xl);
+ if(value < widget.min){value = widget.min;}
+ if(value > widget.max){value = widget.max;}
+ // update the indicator
+ widget._drag.value = value;
+ // callback
+ widget._drag.onDragMove(widget._drag);
+ // redraw/move indicator(s)
+ widget._drag.draw(this._indicatorsGroup, true);
+ widget._drag.valueChanged();
+ }
+});
+});