You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
249 lines
5.4 KiB
249 lines
5.4 KiB
/* |
|
DynAPI Distribution |
|
GroupManager Class |
|
|
|
The DynAPI Distribution is distributed under the terms of the GNU LGPL license. |
|
|
|
requires: Dynlayer |
|
*/ |
|
|
|
function GroupManager(){ |
|
this.EventObject=EventObject; |
|
this.EventObject(); |
|
|
|
this.x = this.y = null; |
|
this.w = this.h = null; |
|
this._objects={}; |
|
|
|
}; |
|
GroupManager._NewSetSize = function(w,h){ |
|
this._OldDynGMSetSize(w,h); |
|
this._grpManager._setSize(this); |
|
this._grpManager._resetSize(); |
|
this._grpManager.changeLocationBy(0,0); |
|
}; |
|
GroupManager._NewSetLocation = function(x,y){ |
|
var byX=x-this.x; |
|
var byY=y-this.y; |
|
if(this._grpUX) byX=0; else x=null; |
|
if(this._grpUY) byY=0; else y=null; |
|
if(x!=null || y!=null) this._OldDynGMSetLocation(x,y); |
|
if(!this._grpUX || !this._grpUY) { |
|
this._grpManager.changeLocationBy(byX,byY); |
|
} |
|
}; |
|
var p= dynapi.setPrototype("GroupManager","EventObject"); |
|
p._setSize = function(dlyr){ |
|
var lw,lh,px,py; |
|
if(!dlyr) return; |
|
// store previous x,y |
|
px=this.x; py=this.y; |
|
// calc x,y |
|
this.x = (this.x==null||(dlyr.x!=null && this.x>dlyr.x))? dlyr.x:this.x; |
|
this.y = (this.y==null||(dlyr.y!=null && this.y>dlyr.y))? dlyr.y:this.y; |
|
// calc w,h |
|
lw=(dlyr.x+dlyr.w)-this.x; lh=(dlyr.y+dlyr.h)-this.y; |
|
this.w = (this.w==null||(dlyr.w!=null && this.w<lw))? lw:this.w; |
|
this.h = (this.h==null||(dlyr.h!=null && this.h<lh))? lh:this.h; |
|
// add trailing or leading w/h |
|
if(px>dlyr.x) this.w+=(px-dlyr.x); |
|
if(py>dlyr.y) this.h+=(py-dlyr.y); |
|
}; |
|
p._resetSize = function(){ |
|
var o,objs=this._objects; |
|
this.x=this.y=this.w=this.h=null; |
|
for (var i in objs){ |
|
o=objs[i]; |
|
this._setSize(o); |
|
} |
|
}; |
|
|
|
p.add = function(dlyr,unlockX,unlockY){ |
|
var lw,lh; |
|
if(!dlyr) return; |
|
if(this._objects[dlyr.id]) return; |
|
dlyr._grpManager=this; |
|
dlyr._grpUX = unlockX; |
|
dlyr._grpUY = unlockY; |
|
dlyr._OldDynGMSetSize = dlyr.setSize; |
|
dlyr._OldDynGMSetLocation = dlyr.setLocation; |
|
dlyr.setSize = GroupManager._NewSetSize; |
|
dlyr.setLocation = GroupManager._NewSetLocation; |
|
if (this.x==dlyr.x && this.w<dlyr.w) this.w=dlyr.w; |
|
this._objects[dlyr.id]=dlyr; |
|
this._setSize(dlyr); |
|
return dlyr; |
|
}; |
|
p.changeLocationBy = function(byX,byY) { |
|
var o,objs=this._objects; |
|
for (var i in objs){ |
|
o=objs[i]; |
|
o._OldDynGMSetLocation(o.x+byX,o.y+byY,true); |
|
} |
|
this.x+=byX; this.y+=byY; |
|
// Check for boundary, if any |
|
if (this._boundary) { |
|
var x=this.x,y=this.y; |
|
var dB = this._boundary; |
|
var b=dB[2]; |
|
var r=dB[1]; |
|
var l=dB[3]; |
|
var t=dB[0]; |
|
var w=this.w; |
|
var h=this.h; |
|
if (this.x<l||this.w>=r) x=l; |
|
else if (this.x+w>r) x=r-w; |
|
if (this.y<t||this.h>=b) y=t; |
|
else if (this.y+h>b) y=b-h; |
|
if(this.x!=x||this.y!=y) this.setLocation(x,y); |
|
} |
|
}; |
|
p.remove = function(dlyr){ |
|
if(!dlyr) return; |
|
dlyr=this._objects[dlyr.id]; |
|
if(dlyr) { |
|
this._objects = dynapi.functions.removeFromObject(this._objects,dlyr.id); |
|
dlyr.setSize = dlyr._OldDynGMSetSize; |
|
dlyr.setLocation = dlyr._OldDynGMSetLocation; |
|
dlyr._OldDynGMSetSize = null; |
|
dlyr._OldDynGMSetLocation = null; |
|
dlyr._grpManager = null; |
|
this._resetSize(); |
|
} |
|
}; |
|
p.sendMessage = function(msg,a1,a2,a3,a4,a5,a6,a7){ |
|
var o,objs=this._objects; |
|
for (var i in objs){ |
|
o=objs[i]; |
|
if(o[msg]) o[msg](a1,a2,a3,a4,a5,a6,a7); |
|
else eval(o+'.'+msg); |
|
} |
|
}; |
|
p.setBoundary = function(t,r,b,l){ |
|
if(t==null && arguments.length==1) this._boundary = null; |
|
else this._boundary = [t,r,b,l]; |
|
}; |
|
p.setLocation = function(x,y) { |
|
var byX=x-this.x; |
|
var byY=y-this.y; |
|
this.changeLocationBy(byX,byY); |
|
}; |
|
p.unlockX = function(b,dlyr){ |
|
if(!dlyr) { |
|
var objs=this._objects; |
|
for (var i in objs) objs[i]._grpUX=b; |
|
}else{ |
|
dlyr=this._objects[dlyr.id]; |
|
if(dlyr) dlyr._grpUX=b; |
|
} |
|
if(!b) this._resetSize(); |
|
}; |
|
p.unlockY = function(b,dlyr){ |
|
var objs=this._objects; |
|
if(!dlyr) { |
|
var objs=this._objects; |
|
for (var i in objs) objs[i]._grpUY=b; |
|
}else{ |
|
dlyr=this._objects[dlyr.id]; |
|
if(dlyr) dlyr._grpUY=b; |
|
} |
|
if(!b) this._resetSize(); |
|
}; |
|
p.unlockXY = function(b,dlyr){ |
|
if(!dlyr) { |
|
var objs=this._objects; |
|
for (var i in objs) { |
|
objs[i]._grpUX=b; |
|
objs[i]._grpUY=b; |
|
} |
|
}else{ |
|
dlyr=this._objects[dlyr.id]; |
|
if(dlyr) { |
|
dlyr._grpUX=b; |
|
dlyr._grpUY=b; |
|
} |
|
} |
|
if(!b) this._resetSize(); |
|
}; |
|
p.getUnlockX = function(dlyr){ |
|
if(!dlyr) { |
|
var results = new Array(); |
|
var trueCount = 0; |
|
var falseCount = 0; |
|
var objs=this._objects; |
|
for (var i in objs) { |
|
results[objs[i]] = objs[i]._grpUX; |
|
if( objs[i]._grpUX == true ) { |
|
trueCount++; |
|
} else { |
|
falseCount++; |
|
} |
|
} |
|
if( falseCount == 0 ) { |
|
return true; |
|
} else if( trueCount == 0 ) { |
|
return false; |
|
} else { |
|
return results; |
|
} |
|
} else { |
|
dlyr=this._objects[dlyr.id]; |
|
if(dlyr) { |
|
return dlyr._grpUX; |
|
} |
|
} |
|
|
|
} |
|
|
|
p.getUnlockY = function(dlyr){ |
|
if(!dlyr) { |
|
var results = new Array(); |
|
var trueCount = 0; |
|
var falseCount = 0; |
|
var objs=this._objects; |
|
for (var i in objs) { |
|
results[objs[i]] = objs[i]._grpUY; |
|
if( objs[i]._grpUY == true ) { |
|
trueCount++; |
|
} else { |
|
falseCount++; |
|
} |
|
} |
|
if( falseCount == 0 ) { |
|
return true; |
|
} else if( trueCount == 0 ) { |
|
return false; |
|
} else { |
|
return results; |
|
} |
|
} else { |
|
dlyr=this._objects[dlyr.id]; |
|
if(dlyr) { |
|
return dlyr._grpUY; |
|
} |
|
} |
|
|
|
} |
|
p.setUnlockXState = function(values) { |
|
if( values.length === undefined ) { |
|
this.unlockX(values); |
|
} else { |
|
for( var obj in values ) { |
|
this.unlockX(values[obj],obj); |
|
} |
|
} |
|
} |
|
|
|
p.setUnlockYState = function(values) { |
|
if( values.length === undefined ) { |
|
this.unlockY(values); |
|
} else { |
|
for( var obj in values ) { |
|
this.unlockY(values[obj],obj); |
|
} |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
|