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.
250 lines
5.4 KiB
250 lines
5.4 KiB
2 years ago
|
/*
|
||
|
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);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|