File: ia\charts\layers\CountLayer.js
- /**
- * The base class for count bar layers.
- *
- * @author J Clare
- * @class ia.CountLayer
- * @extends ia.BarLayer
- * @constructor
- */
- ia.CountLayer = function()
- {
- ia.CountLayer.baseConstructor.call(this);
- this.isLegendComponent = true;
- };
- ia.extend(ia.BarLayer, ia.CountLayer);
- /**
- * Specifies a thematic for the pie layer.
- *
- * @property thematic
- * @type ia.Thematic
- */
- ia.CountLayer.prototype.thematic;
- /**
- * Indicates this is a legend component.
- *
- * @property isLegendComponent
- * @type Boolean
- * @default true
- */
- ia.CountLayer.prototype.isLegendComponent;
- /**
- * Updates the data.
- *
- * @method update
- */
- ia.CountLayer.prototype.update = function()
- {
- // Check if the data has changed
- if (this.map && this.dataChanged)
- {
- // Get the data.
- var data = this.getData()
- // Clear the items.
- this.itemArray = [];
- this.clearItems();
- this.minValue = Infinity;
- this.maxValue = -Infinity;
- var classes = this.thematic.getClasses();
- for (var i = 0; i < classes.length; i++)
- {
- var legendClass = classes[i];
- // Create a new chart item.
- var chartItem = {};
- chartItem.id = legendClass.index;
- chartItem.legendClass = legendClass;
- chartItem.color = legendClass.color;
- chartItem.value = legendClass.items.length;
- chartItem.state = ia.ItemLayer.UNSELECTED;
- if (this.selectionIds.indexOf(chartItem.id) !== -1 ) chartItem.state = ia.ItemLayer.SELECTED;
- chartItem.parent = this;
- chartItem.layer = this;
- chartItem.label = legendClass.getLabel() + " : " + chartItem.value;
- chartItem.rect = new ia.Rectangle();
- chartItem.hitArea = new ia.Rectangle();
- this.items[chartItem.id] = chartItem;
- this.itemArray.push(chartItem);
- // Get the min and max bar values for the layer.
- this.minValue = Math.min(this.minValue, chartItem.value);
- this.maxValue = Math.max(this.maxValue, chartItem.value);
- }
- // Sort items if in sort direction.
- if (this.sortDirection !== undefined)
- {
- var dir;
- if (this.sortDirection === "ascending") dir = 1
- else dir = -1;
- this.itemArray.sort(function(a, b)
- {
- if (a.value < b.value) return -dir;
- if (a.value > b.value) return dir;
- return 0;
- });
- }
- this.dataChanged = false;
- }
- };
- /**
- * Displays the tip for the passed item
- *
- * @method showTip
- * @param {Object} item The map item.
- * @param {ia.ItemEvent} event An <code>ia.ItemEvent</code>.
- */
- ia.CountLayer.prototype.showTip = function(item, event)
- {
- this.map.datatip.text(item.label);
- // Position above the bar.
- var px,py;
- if (ia.IS_TOUCH_DEVICE)
- {
- px = event.x - (this.map.datatip.getWidth() / 2);
- py = event.y - (this.map.datatip.getHeight() + 30);
- }
- else
- {
- if (this.map.orientation === "vertical")
- {
- px = (item.rect.x + (item.rect.width / 2)) - (this.map.datatip.getWidth() / 2);
- if (item.value < 0)
- py = item.rect.y + item.rect.height + 5;
- else
- py = item.rect.y - this.map.datatip.getHeight() - 5;
- }
- else
- {
- if (item.value < 0)
- px = item.rect.x - (this.map.datatip.getWidth() + 5);
- else
- px = (item.rect.x + item.rect.width) + 5;
- py = (item.rect.y + (item.rect.height / 2)) - (this.map.datatip.getHeight() / 2);
- }
- }
- this.map.datatip.position(px, py);
- this.map.datatip.show();
- };