view nodejs/component.js @ 1434:4be04f29fa70

Add functions to search for the text recursively inside coord_t tree. Once we find the first instance, we change the text of it. We need to think about how to manage the multiple segment texts, which is composed of several tspan.
author wycc
date Mon, 11 Apr 2011 12:52:09 +0800
parents c918b79892ab
children d19f47691d5e
line wrap: on
line source

var mbfly = require("mbfly");
var svg = require("./svg");
var sys=require("sys");
/*
The Component and ComponentManager is used to keep track of the symbol 
table in different frame. 


*/
function mul(a,b)
{
    var m = [a[0]*b[0]+a[1]*b[3], a[0]*b[1]+a[1]*b[4], a[0]*b[2]+a[1]*b[5]+a[2], 
            a[3]*b[0]+a[4]*b[3], a[3]*b[1]+a[4]*b[4], a[3]*b[2]+a[4]*b[5]+a[5]];
	a[0] = m[0];
	a[1] = m[1];
	a[2] = m[2];
	a[3] = m[3];
	a[4] = m[4];
	a[5] = m[5];
}

function Component(app, name) {
    this.app = app;
	this.name = name;
	this.coord = null;
}

Component.prototype.translate=function(tx,ty) {
    if (this.coord) {
	    mul(this.coord, [1,0,tx,0,1,ty]);
	}
}

Component.prototype.resize=function(sx,sy) {

    if (this.coord) {
	    mul(this.coord, [sx,0,0,0,sy,0]);
	}
}

Component.prototype.set=function(m) {

    if (this.coord) {
	    this.coord[0] = m[0];
	    this.coord[1] = m[1];
	    this.coord[2] = m[2];
	    this.coord[3] = m[3];
	    this.coord[4] = m[4];
	    this.coord[5] = m[5];
	}
}
Component.prototype.hide=function(m) {
    if (this.coord) {
	    this.coord.hide();
	}
}

Component.prototype.show=function(m) {
    if (this.coord) {
	    this.coord.show();
	}
}

Component.prototype.search=function() {
    this.coord = this.app._componentmanager.search(this.name);
}

Component.prototype.realize=function() {
    if (this.coord == null) {
	    this.search();
	}
	return this.coord;
}

Component.prototype.toCoord=function() {
   return this.coord; 
}


function ComponentManager(app)
{
    this.app = app;
	this.object_table = {};
}

/*  \brief add an object into the current current component table. 
 *  This first argument is the source node of the screen object. 
 *  The second argument is the coord object which is displayed at
 *  the screen now. 
 *     
 *  We need to use the soucer node to get the name of the object.
 */
ComponentManager.prototype.add=function(source,obj) {
    if (source.refid==undefined) {
	    sys.puts("Internal Error: no refid is defined\n");
		return;
	}
    this.object_table[source.refid] = obj;
}


ComponentManager.prototype.del=function(name) {
    delete this.object_table[name];
}

ComponentManager.prototype.dump=function(name) {
    for(i in this.object_table) {
	    sys.puts(i);
	}
}

ComponentManager.prototype.search=function(name) {
    return this.object_table[name];
}


exports.Component = Component;
exports.ComponentManager = ComponentManager;