Here's the method that I have for adding Drag events to a layer:
DynEvent.Drag.enable=function(dlyr,doc) {
if (!dlyr.isLayer) return;
dlyr.addEventListener(DynEvent.Drag.lyrListener);
var dyndoc=dlyr.frame.lyrobj||doc||AfroAPI.document;
if (dyndoc.dragCount==0) {
dyndoc.addEventListener(DynEvent.Drag.docListener);
dyndoc.dragEnabled=true;
};
dyndoc.dragCount++;
};
You will notice that each layer already contains a frame value that
points to the frame that it is contained in. This is automatically
assigned when a layer is added to a parent.
Using this method, I am also able to track the number of layers per
document that are "Drag Enabled". This makes it possible to autometically
remove the Listener when there are no longer any enabled layers within
that document.
Doug Melvin wrote:
Which dyndoc
property would that be?Also,
I do not want to be using any recursivefunction
to determine the parent of every layerI
pass to eneabledragevents() as this would addundully
to the amount of prosessing that any app would do.
----- Original Message -----
Sent: Wednesday, October 31, 2001
7:32 PM
Subject: Re: [Dynapi-Dev] enableDragevents
across frames
Why not just use the dyndoc property of the layer and then it all
you need to do is enable dragging AFTER you have added it to a document.
This removes any problems with frames and dyndocuments being passed.
This is what I did in the AfroAPI and it seems to have no problems.
Doug Melvin wrote:
This
is NOT fixed.Here is the function as is:DragEvent.enableDragEvents=function(f)
{
for (var i=0;i<arguments.length;i++)
{
var lyr=arguments[i];
if (lyr.isDynLayer) lyr.addEventListener(DragEvent.lyrListener);
}
if(f.isDynDocument) f.addEventListener(DragEvent.docListener);
else DynAPI.document.addEventListener(DragEvent.docListener);
}; No
note: the functions assumes that if you are passing a dyndocument, it will
be 'f'.but 'f' is the FIRST parameter. How
do you enabled drage events?enabledDragevents(theDocument,TheLayer) ?orenabledDragevents(TheLayer,theDocument)
? Taht's right!! the _OPTIONAL_
parameter should be the second one.So:Calling enabledDragevents(TheLayer,theDocument)
wil _NOT_ cause the doclistener to be addedto the correct frame as the
functio n only checks if the first argument (f) is a dindocument!!!!!
FUCK! How
may time do we need to go throught this? Now,
a CORRECTED function:DragEvent.enableDragEvents=function() {
var DocAdded=false;
for (var i=0;i<arguments.length;i++)
{
var lyr=arguments[i];
if(lyr){
if(lyr.isDynLayer){
lyr.addEventListener(DragEvent.lyrListener);
}else if(lyr.isDynDocument){
lyr.addEventListener(DragEvent.docListener);
DocAdded=true;
}
}
}
if (!DocAdded)DynAPI.document.addEventListener(DragEvent.docListener);
};Now this function does not cxare
WHAT order you pass your arguments in.Not only that, but _THIS ONE WORKS_.
scenerio.Two Frames:One has the Dynapi.onload
stuff in it.The other does not.the frame that has DynAPI.onload in it creates
aDynDocument reffering to the other frame.A DynLayer is then added to the
other frame.The dynlayer is then mad draggable - _In the other
frame!!_ I dare you
to make this work with the current function. so:var
myDynDoc = new DynDocument(top.frame2);var myLayer = myDynDoc.addChild(new
DynLayer(null,10,10,100,100));DragEvent.EnableDragevents(myLayer,myDynDoc);
You may now drag the layer.
--
Michael Pemberton
[EMAIL PROTECTED]
ICQ: 12107010
--
Michael Pemberton
[EMAIL PROTECTED]
ICQ: 12107010
_______________________________________________
Dynapi-Dev mailing list
[EMAIL PROTECTED]
http://www.mail-archive.com/dynapi-dev@lists.sourceforge.net/
|