diff nodejs/mbapp.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 05e8d3ffa703
children 6fa411fd9549 bd3d5ac8e748
line wrap: on
line diff
--- a/nodejs/mbapp.js	Wed Apr 06 07:48:29 2011 +0800
+++ b/nodejs/mbapp.js	Wed Apr 06 07:51:06 2011 +0800
@@ -4,6 +4,7 @@
 var svg = require("./svg");
 var sys = require("sys");
 var ldr = mbfly.img_ldr_new(".");
+var component = require("./component");
 
 function _reverse(m1) {
     var rev = new Array(1, 0, 0, 0, 1, 0);
@@ -126,6 +127,7 @@
     this.frame_interval = 1000/30; // 12 frame per second
     this.timer = null;
     this._time = Date.now();
+    this._componentmanager = new component.ComponentManager(this);
 }
 
 app.prototype.ts=function(m) {
@@ -154,9 +156,22 @@
     this.mb_rt.redraw_all();
     this.mb_rt.flush();
 }
+
 app.prototype.get=function(name) {
     return this.mb_rt.mbnames[name];
 }
+
+
+app.prototype.getComponent=function(name) {
+    var comp = new component.Component(this,name);
+    this._componentmanager.dump();
+    comp.realize();
+    sys.puts("Search for "+name);
+    var obj = comp.toCoord();
+    sys.puts("obj="+obj+" id="+obj.id+" refid="+obj.refid);
+    return comp;
+}
+
 app.prototype.addKeyboardListener=function(type,f) {
     return this.mb_rt.kbevents.add_event_observer(type,f);    
 }
@@ -185,8 +200,8 @@
     // Duplicate the group
     var nodes = src.children;
     if (src.dup) {
-        //src.dup.remove();
-        //src.dup = null;
+        src.dup.remove();
+        src.dup = null;
     }
     if (src.dup == null) {
         var dup = this.mb_rt.coord_new(src.parent);
@@ -195,6 +210,8 @@
 	    var ng = this.mb_rt.coord_new(dup);
 	    var k = dup.clone_from_subtree(c);
 	    c.dup = k;
+	    c.dup.id = c.id;
+	    c.dup.refid = c.refid;
 	}
 	src.dup = dup;
     } else {
@@ -207,9 +224,10 @@
 
     for(i in nodes) {
         coord= nodes[i];
-	if (coord.target)
+	if (coord.target) {
 	    this.generateScaleTweenObject(coord.dup,coord,coord.target,p,'');
-	else {
+	    this._componentmanager.add(coord,coord.dup);
+	} else {
 	    sys.puts(coord.id);
 	    sys.puts(coord[0]);
 	    sys.puts(coord[1]);