Mercurial > MadButterfly
diff nodejs/component.js @ 1408:c918b79892ab
Add component class which is sued to access the objects in different frame for the same screen object. We will treat the object as the same if the duplicated-src are the same or it is the grpup defined by duplicated-src.
author | wycc |
---|---|
date | Wed, 06 Apr 2011 07:51:06 +0800 |
parents | |
children | d19f47691d5e |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/nodejs/component.js Wed Apr 06 07:51:06 2011 +0800 @@ -0,0 +1,118 @@ +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;