client/annotviz/app/js/generalView.js
author rougeronj
Tue, 20 Jan 2015 12:00:40 +0100
changeset 99 9d968fbcaa2a
parent 92 a323578ea954
permissions -rw-r--r--
Add General Time Line + minor change in annotsRoll
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
91
09a9074ea7b0 Add general View fonction for main representation
rougeronj
parents:
diff changeset
     1
/**
09a9074ea7b0 Add general View fonction for main representation
rougeronj
parents:
diff changeset
     2
* js/generalView
09a9074ea7b0 Add general View fonction for main representation
rougeronj
parents:
diff changeset
     3
*
09a9074ea7b0 Add general View fonction for main representation
rougeronj
parents:
diff changeset
     4
* generalView basic component
09a9074ea7b0 Add general View fonction for main representation
rougeronj
parents:
diff changeset
     5
*
09a9074ea7b0 Add general View fonction for main representation
rougeronj
parents:
diff changeset
     6
*/
09a9074ea7b0 Add general View fonction for main representation
rougeronj
parents:
diff changeset
     7
09a9074ea7b0 Add general View fonction for main representation
rougeronj
parents:
diff changeset
     8
'use strict';
09a9074ea7b0 Add general View fonction for main representation
rougeronj
parents:
diff changeset
     9
09a9074ea7b0 Add general View fonction for main representation
rougeronj
parents:
diff changeset
    10
var PIXI = require('pixi');
09a9074ea7b0 Add general View fonction for main representation
rougeronj
parents:
diff changeset
    11
var randomColor = require('randomColor');
99
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    12
var rgb2hex = require('./utils');
91
09a9074ea7b0 Add general View fonction for main representation
rougeronj
parents:
diff changeset
    13
99
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    14
function GeneralView(parentContainer, xInit, yInit, width, height, timeBegin, timeEnd, intervalWidth, intervalHeight, maxCellHeight, categories){
91
09a9074ea7b0 Add general View fonction for main representation
rougeronj
parents:
diff changeset
    15
    var _this = this;
09a9074ea7b0 Add general View fonction for main representation
rougeronj
parents:
diff changeset
    16
    this.container = new PIXI.DisplayObjectContainer();
09a9074ea7b0 Add general View fonction for main representation
rougeronj
parents:
diff changeset
    17
    this.container.position.x = xInit;
09a9074ea7b0 Add general View fonction for main representation
rougeronj
parents:
diff changeset
    18
    this.container.position.y = yInit;
09a9074ea7b0 Add general View fonction for main representation
rougeronj
parents:
diff changeset
    19
    this.container.width = width;
09a9074ea7b0 Add general View fonction for main representation
rougeronj
parents:
diff changeset
    20
    this.container.height = height;
09a9074ea7b0 Add general View fonction for main representation
rougeronj
parents:
diff changeset
    21
    parentContainer.addChild(this.container);
09a9074ea7b0 Add general View fonction for main representation
rougeronj
parents:
diff changeset
    22
    
92
a323578ea954 generalview take interval in pixel as argument (not time anymore)
rougeronj
parents: 91
diff changeset
    23
    this.timeBegin = timeBegin;
a323578ea954 generalview take interval in pixel as argument (not time anymore)
rougeronj
parents: 91
diff changeset
    24
    this.timeEnd = timeEnd;
a323578ea954 generalview take interval in pixel as argument (not time anymore)
rougeronj
parents: 91
diff changeset
    25
    this.duration = (timeEnd - timeBegin)/1000 
91
09a9074ea7b0 Add general View fonction for main representation
rougeronj
parents:
diff changeset
    26
    this.width = width;
09a9074ea7b0 Add general View fonction for main representation
rougeronj
parents:
diff changeset
    27
    this.height = height;
99
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    28
    this.intervalHeight = intervalHeight;
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    29
    this.intervalWidth = intervalWidth;
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    30
    this.maxCellHeight = maxCellHeight;
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    31
    this.intervalDuration = (intervalWidth*this.duration/width);
91
09a9074ea7b0 Add general View fonction for main representation
rougeronj
parents:
diff changeset
    32
    
99
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    33
    
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    34
    //Initialise the list of step
91
09a9074ea7b0 Add general View fonction for main representation
rougeronj
parents:
diff changeset
    35
    //each cell will contain the list categories and the number of annotations per categories
09a9074ea7b0 Add general View fonction for main representation
rougeronj
parents:
diff changeset
    36
    this.cells = []
99
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    37
    for (var i=0; i<(width/intervalWidth) ; i++){
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    38
    	this.cells[i] = [];
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    39
    	this.cells[i].x = i * this.intervalWidth;
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    40
    	this.cells[i].totalAnnots = 0;
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    41
    	this.cells[i].graphics = new PIXI.Graphics();
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    42
    	this.container.addChild(this.cells[i].graphics);
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    43
    	this.cells[i].categories = {};
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    44
    	
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    45
    	for (var category in categories){
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    46
    		this.cells[i].categories[category] = {
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    47
				"count": 0,
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    48
				"color": categories[category]
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    49
    		};
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    50
    	}
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    51
    }
91
09a9074ea7b0 Add general View fonction for main representation
rougeronj
parents:
diff changeset
    52
    // draw temp line to locate the middle of the container
09a9074ea7b0 Add general View fonction for main representation
rougeronj
parents:
diff changeset
    53
    var graphics = new PIXI.Graphics();
99
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    54
    graphics.beginFill(0x000000)
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    55
    	.lineStyle(1, 0x000000)
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    56
    	.moveTo(xInit, (-this.height/2) )
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    57
    	.lineTo(this.width, (-this.height/2))
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    58
    	.endFill();
91
09a9074ea7b0 Add general View fonction for main representation
rougeronj
parents:
diff changeset
    59
    this.container.addChild(graphics);
09a9074ea7b0 Add general View fonction for main representation
rougeronj
parents:
diff changeset
    60
99
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    61
    //Add Annotation to the TimeLine
91
09a9074ea7b0 Add general View fonction for main representation
rougeronj
parents:
diff changeset
    62
    this.addAnnot = function(category, time){
99
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    63
    	console.log(this.timeEnd);
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    64
    	console.log(time);
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    65
    	if (this.timeEnd < time){
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    66
    		return;
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    67
    	}
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    68
    	var i = Math.floor((time-this.timeBegin)/(1000*this.intervalDuration));
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    69
		this.cells[i].categories[category].count += 1;
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    70
		this.cells[i].totalAnnots +=1;
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    71
		this.redrawCell(this.cells[i]);
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    72
    };
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    73
    
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    74
    //Draw the cellule
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    75
    this.redrawCell = function(cell){
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    76
    	var x = cell.x; 
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    77
    	var y = -this.height/2;
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    78
    	cell.graphics.clear();
91
09a9074ea7b0 Add general View fonction for main representation
rougeronj
parents:
diff changeset
    79
    	
99
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    80
    	//Check if total height is higher than Max Cell Height
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    81
    	if ((cell.totalAnnots*this.intervalHeight) > this.maxCellHeight){
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    82
    		var heightStep = this.maxCellHeight/cell.totalAnnots;
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    83
    	} else {
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    84
    		var heightStep = this.intervalHeight;
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    85
    	}
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    86
    	//Draw the rect depending on the height step calculated
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    87
    	for (var category in cell.categories){
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    88
			cell.graphics.beginFill(cell.categories[category].color)
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    89
    			.drawRect(x, y, this.intervalWidth, -cell.categories[category].count * heightStep)
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    90
    			.endFill();
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    91
    		y -= cell.categories[category].count*heightStep;
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    92
    	}
9d968fbcaa2a Add General Time Line + minor change in annotsRoll
rougeronj
parents: 92
diff changeset
    93
    }
91
09a9074ea7b0 Add general View fonction for main representation
rougeronj
parents:
diff changeset
    94
}
09a9074ea7b0 Add general View fonction for main representation
rougeronj
parents:
diff changeset
    95
09a9074ea7b0 Add general View fonction for main representation
rougeronj
parents:
diff changeset
    96
module.exports = GeneralView;