Show:

File: ia\ui\TableTools.js

/**
 * <code>ia.TableTools</code> is a set of table tools that can be attached to a table.
 *
 * @author J Clare
 * @class ia.TableTools
 * @constructor
 * @param {ia.DataGroup} dataGroup The associated data group.
 * @param {ia.InteractionGroup} interactionGroup The associated interaction group.
 */
ia.TableTools = function(dataGroup, interactionGroup)
{	
	var me = this;

	me._clearBtn = undefined;
	me._filterBtn = undefined;
	me._interactionGroup = interactionGroup;
	me._dataGroup = dataGroup;

	// Calculated border radius.
	me._borderRadius = 0;
	
	// Calculated border-radius for elements inside panels.
	me._borderRadius = parseInt($j(".ia-panel").css("border-top-left-radius")) - 1;
	if (me._borderRadius < 0) me._borderRadius = 0;

	// Create the container element.
	me.container = $j('<div class="ia-table-toolbar"></div>');
	me.container.css("border-bottom-left-radius", me._borderRadius+"px");
	me.container.css("border-bottom-right-radius", me._borderRadius+"px");

	// Listen for the selection changing.
	interactionGroup.addEventListener(ia.InteractionEvent.SELECTION_CHANGED, this._updateToolbar.bind(this));

	// Listen for the filter changing.
	dataGroup.addEventListener(ia.FilterEvent.FILTER_CHANGED, this._updateToolbar.bind(this));
};

/** 
 * Updates the tool bar.
 * 
 * @property updateToolbar
 * @private
 */
ia.TableTools.prototype._updateToolbar = function() 
{
	if (this._interactionGroup.getSelection().length > 0) 
	{
		if (this._clearBtn) 
			this._clearBtn.removeClass('ia-cross-btn-disabled ia-toolbar-text-btn-disabled').addClass('ia-list-item ia-cross-btn');
		if (this._filterBtn) 
			this._filterBtn.removeClass('ia-cross-btn ia-toolbar-text-btn-disabled').addClass('ia-list-item ia-cross-btn-disabled');
	}
	else
	{
		if (this._clearBtn) 
			this._clearBtn.removeClass('ia-list-item ia-cross-btn').addClass('ia-cross-btn-disabled ia-toolbar-text-btn-disabled');
		if (this._filterBtn)
		{
			if (this._dataGroup.getFilteredFeatures().length > 0)  
				this._filterBtn.removeClass('ia-cross-btn-disabled ia-toolbar-text-btn-disabled').addClass('ia-list-item ia-cross-btn');
			else 
				this._filterBtn.removeClass('ia-list-item ia-cross-btn').addClass('ia-cross-btn-disabled ia-toolbar-text-btn-disabled');
		}
	}
};
	
/**
 * The container that holds the object.
 * 
 * @property container
 * @type JQUERY Element
 */
ia.TableTools.prototype.container;

/** 
 * Allows a custom function to be set for when the filter button is pressed.
 * 
 * @property filterFunction
 * @type Function
 */
ia.TableTools.prototype.filterFunction = function() {};

/** 
 * Allows a custom function to be set for when the clear button is pressed.
 * 
 * @property filterFunction
 * @type Function
 */
ia.TableTools.prototype.clearFunction = function() {};

/**
 * The text for the clear button.
 * 
 * @property clearButtonText
 * @type String
 */
ia.TableTools.prototype.clearButtonText;

/**
 *  The text for the filter button.
 * 
 * @property filterButtonText
 * @type String
 */	
ia.TableTools.prototype.filterButtonText;

/** 
 * Render the toolbar.
 *
 * @method render
 */
ia.TableTools.prototype.render = function() 
{
	this.container.empty();

	var me = this;
	
	// Add clear selection button
	if (this.clearButtonText)
	{
		this._clearBtn = $j("<div class='ia-toolbar-text-btn ia-list-item ia-toolbar-text-btn-disabled ia-cross-btn-disabled'>").html(this.clearButtonText);
		this.container.append(this._clearBtn);
		this._clearBtn.bind(ia.CLICK_TYPE, function(e)  
		{
			e.stopPropagation();
			e.preventDefault();
			me.clearFunction();
		});
		this._clearBtn.css("border-radius", this._borderRadius+"px");
	}

	// Add filter button 
	if (this.filterButtonText)
	{
		this._filterBtn = $j("<div class='ia-toolbar-text-btn ia-list-item ia-toolbar-text-btn-disabled ia-cross-btn-disabled'>").html(this.filterButtonText);
		this.container.append(this._filterBtn);
		this._filterBtn.bind(ia.CLICK_TYPE, function(e)  
		{
			e.stopPropagation();
			e.preventDefault();
			me.filterFunction();
		});
		this._filterBtn.css("border-radius", this._borderRadius+"px");
	}

	this._updateToolbar();
};