diff geotemco/js/Placetable/PlacetableWidget.js @ 0:b12c99b7c3f0

commit for previous development
author Zoe Hong <zhong@mpiwg-berlin.mpg.de>
date Mon, 19 Jan 2015 17:13:49 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/geotemco/js/Placetable/PlacetableWidget.js	Mon Jan 19 17:13:49 2015 +0100
@@ -0,0 +1,174 @@
+/*
+* PlacetableWidget.js
+*
+* Copyright (c) 2013, Sebastian Kruse. All rights reserved.
+*
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU Lesser General Public
+* License as published by the Free Software Foundation; either
+* version 3 of the License, or (at your option) any later version.
+*
+* This library is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this library; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+* MA 02110-1301  USA
+*/
+
+/**
+ * @class PlacetableWidget
+ * PlacetableWidget Implementation
+ * @author Sebastian Kruse (skruse@mpiwg-berlin.mpg.de)
+ *
+ * @param {WidgetWrapper} core wrapper for interaction to other widgets
+ * @param {HTML object} div parent div to append the Placetable widget div
+ * @param {JSON} options user specified configuration that overwrites options in PlacetableConfig.js
+ */
+PlacetableWidget = function(core, div, options) {
+
+	this.datasets;
+	this.core = core;
+	this.core.setWidget(this);
+
+	this.options = (new PlacetableConfig(options)).options;
+	this.gui = new PlacetableGui(this, div, this.options);
+}
+
+PlacetableWidget.prototype = {
+
+	initWidget : function(data) {
+		this.datasets = data;
+		var placetableWidget = this;
+		
+		$(placetableWidget.gui.placetablesTable).empty();
+
+		this.elementHash = [];
+		var datasetIndex = 0;
+		$(this.datasets).each(function(){
+			var dataset = this;
+			
+			placetableWidget.elementHash[datasetIndex] = [];
+			
+			var row = document.createElement("tr");
+			var rowHeader = document.createElement("td");
+			
+			rowHeader.innerHTML = "<b>"+this.label+"</b>";
+			$(rowHeader).mouseover($.proxy(function(){
+				placetableWidget.mouseover(dataset);
+			},{dataset:dataset,placetableWidget:placetableWidget}));
+			$(rowHeader).mouseout($.proxy(function(){
+				placetableWidget.mouseout(dataset);
+			},{dataset:dataset,placetableWidget:placetableWidget}));
+			$(rowHeader).click($.proxy(function(){
+				placetableWidget.click(dataset);
+			},{dataset:dataset,placetableWidget:placetableWidget}));
+			
+			$(row).append(rowHeader);
+			
+			$(this.objects).each(function(){
+				var object = this;
+				var rowElement = document.createElement("td");
+								
+				rowElement.innerHTML = this.getPlace(0,0);
+				$(rowElement).mouseover($.proxy(function(){
+					placetableWidget.mouseover(dataset,object);
+				},{dataset:dataset,object:object,placetableWidget:placetableWidget}));
+				$(rowElement).mouseout($.proxy(function(){
+					placetableWidget.mouseout(dataset,object);
+				},{dataset:dataset,object:object,placetableWidget:placetableWidget}));
+				$(rowElement).click($.proxy(function(){
+					placetableWidget.click(dataset,object);
+				},{dataset:dataset,object:object,placetableWidget:placetableWidget}));
+
+				$(row).append(rowElement);
+				
+				placetableWidget.elementHash[datasetIndex][object.index] = rowElement;
+			});
+			
+			$(placetableWidget.gui.placetablesTable).append(row);
+			
+			datasetIndex++;
+		});
+		
+		this.highlightChanged([]);
+	},
+	
+	mouseover : function(dataset,object) {
+		var highlightedObjects = [];
+		for (var i = 0; i < GeoTemConfig.datasets.length; i++){
+			if (GeoTemConfig.datasets[i] === dataset){
+				//if label is selected, push all objects of this set
+				if (typeof object === "undefined"){
+					var highlightedInDataset = [];
+					$(dataset.objects).each(function(){
+						highlightedInDataset.push(this);
+					});
+					highlightedObjects.push(highlightedInDataset);
+				} else {
+					//otherwise only push this object
+					highlightedObjects.push([object]);
+				}				
+			} else {
+				highlightedObjects.push([]);
+			}
+		}
+		
+		this.core.triggerHighlight(highlightedObjects);		
+	},
+	
+	mouseout : function(dataset,object) {
+		//select none
+		var highlightedObjects = [];
+		for (var i = 0; i < GeoTemConfig.datasets.length; i++)
+			highlightedObjects.push([]);
+		
+		this.core.triggerHighlight(highlightedObjects);		
+	},
+	
+	click : function(dataset,object) {
+	},
+	
+	highlightChanged : function(objects) {
+		if( !GeoTemConfig.highlightEvents ){
+			return;
+		}
+		var placetableWidget = this;
+		
+		//reset colors
+		var datasetIndex = 0;
+		$(placetableWidget.elementHash).each(function(){
+			var color = GeoTemConfig.getColor(datasetIndex);
+			var colorRGB = 'rgb(' + color.r0 + ',' + color.g0 + ',' + color.b0 + ')';
+			
+			$(this).each(function(){
+				$(this).css('background-color', colorRGB);
+			});
+			datasetIndex++;
+		});	
+		
+		//paint the selected
+		var datasetIndex = 0;
+		$(objects).each(function(){
+			var color = GeoTemConfig.getColor(datasetIndex);
+			var colorRGB = 'rgb(' + color.r1 + ',' + color.g1 + ',' + color.b1 + ')';
+			$(this).each(function(){
+				var object = this;
+				
+				var rowElement = placetableWidget.elementHash[datasetIndex][object.index];
+
+				$(rowElement).css('background-color', colorRGB);
+			});
+			datasetIndex++;
+		});
+	},
+
+	selectionChanged : function(selection) {
+		if( !GeoTemConfig.selectionEvents ){
+			return;
+		}
+	},
+};