FWIW, I've found a work-around that enables me to use dynapi.gui.scrollpane 
in a frame.
Apart from passing the frame document as an argument to the constructor as 
I outlined previously, I also turn off event bubbling in dynapi.gui.button 
for the buttons at each end of the scroll bars:

         listener.onmousedown = function(e) {
                 var o = e.getTarget();
                 e.setBubble( false );                   <----- here
                 if (o.enabled!=false) o.setDown();
         };
         listener.onmouseup = function(e) {
                 var o = e.getTarget();
                 e.setBubble( false );                  <------ and here
                 if (o.enabled!=false) o.setUp();
         };

With this change the DragEvent.lyrListener.onmousedown crash doesn't happen 
and dynapi.gui.scrollpane works in NS 4.73 and IE 5.0.

Peter Dvorsky

At 11:29 AM 12/20/2000 -0500, you wrote:

>Folks,
>Thanks very much for the prompt reply to my question. Passing the frame 
>DynDocument to enableDragEvents() as well as the layer enables layer 
>dragging in frames as advertised.
>
>Now, the reason I was pursuing this was because I need 
>dynapi.gui.scrollpane to work in a frame. In the current version under CVS 
>Scrollpane does not work in a frame in either NS 4.73 or IE 5.0 because 
>the dynapi.gui.scrollbar doesn't work because frame dragging doesn't work.
>
>By passing the frame DynDocument to the dynapi.gui.scrollbar constructor I 
>was able to add the DynDocument to enableDragEvents()  in the constructor 
>and to get ScrollBar to work. I suspect the extra constructor parameter is 
>a hack (I'm a pretty much a JavaScript newbie) and there is probably a 
>more elegant way to extend the current widgets so that they work in frames.
>
>With my hack, the ScrollPane widget works in a frame in NS 4.73 with the 
>new ScrollBar constructor and in IE as well as long as you don't touch the 
>buttons on either end of the ScrollBar. However, generating an onmousedown 
>event on one of those buttons in IE 5.0 in a framed widget with the new 
>frame-enabled ScrollBar kills IE.
>
>What appears to be happening is the event bubbles through successive 
>invocations of MouseEvent.bubbleEvent() which does DynLayer.invokeEvent() 
>until it calls DragEvent.lyrListener.onmousedown() and dies as described 
>below...
>
>DragEvent.lyrListener.onmousedown=function(e) {
>         e.cancelBrowserEvent();
>         if (DynAPI.document.dragevent) return;
>         var lyr=e.getSource();
>         lyr.dragevent=new DragEvent("dragstart",lyr);
>         DynAPI.document.dragevent=lyr.dragevent;
>         DynAPI.document.dragobject=lyr;
>         var de=lyr.dragevent;
>         de.isDragging=false;
>         de.x=e.getPageX()-e.getSource().getPageX();
>         de.y=e.getPageY()-e.getSource().getPageY();
>         de.pageX=e.getPageX();
>         de.pageY=e.getPageY();
>         de.parentPageX=lyr.parent.getPageX();  <---- here there is no 
> lyr.parent
>         de.parentPageY=lyr.parent.getPageY();
>     e.setBubble(true);
>};
>
>So my framed ScrollPane buttons and sliders now work fine in NS 4.73 with 
>the change to enableDragEvents() and on IE5.0 the sliders work fine but it 
>dies a horrible death when I click on a button.
>
>I think DynAPI is a terrific toolkit and is going to be widely used once 
>it settles down a bit and people learn about it. I'm glad to be part of 
>the bleeding edge.
>Thanks for any assistance you might be able to offer on this issue.
>
>Peter Dvorsky
>
>
>At 04:25 PM 12/19/2000 +0100, you wrote:
>>I added support for dragging in other frames. Simply pass the dyndocument 
>>where
>>the layer is dragged as first parameter of the enableDragEvents method.
>>
>>d = new dyndocument(parent.blah)
>>a = new DynLayer()
>>d.addChild(a)
>>DragEvent.enableDragEvents(d,a)
>>
>>
>>Cya
>>
>>...
>>
>>Which brings up again the need for proper API documentation.
>>
>>
>>
>>Richard Bennett wrote:
>>
>> > hi,
>> > I haven't used frames with DynAPI myself yet, so my solution might not be
>> > 100% orthodox.
>> > It seems you have to assign a drag event to the frame in question 
>> before you
>> > can target the layer,
>> > but then you get errors when you click on the target frame, if you disable
>> > drag events for the
>> > target frame again, the reference seems to remain, without errors:
>> >
>> >        myLayer=new DynLayer(null,100,100,100,100,'#c0c0c0')
>> >        tdoc = new DynDocument(parent.treeFrame);
>> >        tdoc.addChild(myLayer);
>> >        DragEvent.setDragBoundary(myLayer, 0, 300, 300, 0)
>> >        DragEvent.enableDragEvents(myLayer)
>> >        DragEvent.enableDragEvents(tdoc)
>> >        DragEvent.disableDragEvents(tdoc)
>> >
>> > I put up the working example here:
>> > http://www.resass.f2s.com/dynapi/php/index.php
>> > look under Peter_Dvorsky_Examples in the tree.
>> >
>> > If someone would care to post the proper solution I'll update the files.
>> >
>> > I included DynAPIDiagnose in your file, it's my new diagnostic tool, 
>> to find
>> > which functions/properties etc
>> > are available for an object on the page. it's still very much alpha 
>> version
>> > with lot's of known bugs, and a temporary
>> > interface.
>> > You simply type the name of some object on the page, for instance tdoc, or
>> > myLayer, into the text box, and click "Get all".
>> > This will initially give you all(?) the DynAPI properties/functions etc
>> > available for this object, if you then click on, for instance,
>> > "+ css has 126 properties" (for myLayer) it will show you browser native
>> > properties available to myLayer.css.
>> >
>> > Cheers,
>> > Richard :o
>> > [EMAIL PROTECTED]
>> > >
>> > > I can drag a layer but not when it's in a frame. I don't know if I've
>> > > uncovered a DynAPI bug or if I'm doing something wrong.
>> > > I tried simple dragging of layers as in part 3 of the online 
>> tutorial. The
>> > > tutorial works as described.
>> > > However, dragging appears not to work if the draggable layer is in a
>> > frame.
>> > >
>> > > Here's my code. The layer shows up perfectly well but it cannot be
>> > dragged.
>> > > Nothing happens.
>> > >
>> > > My frameset doc:
>> > >
>> > > <HTML>
>> > > <HEAD>
>> > > <TITLE>My frameset</TITLE>
>> > >
>> > > <SCRIPT LANGUAGE="JavaScript">
>> > >
>> > > function blank()
>> > > {
>> > >      return( "<HTML></HTML>" );
>> > > }
>> > >
>> > > </SCRIPT>
>> > > </HEAD>
>> > >
>> > > <FRAMESET ROWS="*,5" FRAMEBORDER=1>
>> > >      <FRAME SRC=javascript:parent.blank() NAME="treeFrame">
>> > >      <FRAME SRC="dragdoc.htm" NAME="bufferFrame">
>> > > </FRAMESET>
>> > >
>> > > </HTML>
>> > >
>> > > And here's dragdoc.htm, which only has a small change from the 
>> tutorial to
>> > > load the draggable layer into treeFrame:
>> > >
>> > > <html>
>> > > <head><title>DynAPI2 tutor - dragging</title>
>> > > <script language="JavaScript" src="../src/dynapi.js"></script>
>> > > <Script language="Javascript">
>> > >
>> > > DynAPI.setLibraryPath('../src/lib/');
>> > > DynAPI.include('dynapi.api.*')
>> > >
>> > > DynAPI.onLoad=function() {
>> > >      myLayer=new DynLayer(null,100,100,100,100,'#c0c0c0')
>> > >
>> > >      DragEvent.setDragBoundary(myLayer, 0, 300, 300, 0)
>> > >      DragEvent.enableDragEvents(myLayer)
>> > >
>> > >      tdoc = new DynDocument(parent.treeFrame);
>> > >      tdoc.addChild(myLayer);
>> > > }
>> > >
>> > > </script>
>> > > </head>
>> > > <body>
>> > > </body>
>> > > </html>
>> > >
>> > >
>> > > Is this a low-level bug or am I missing something?
>> > >
>> > > Thanks very much for any assistance,
>> > >
>> > > Peter Dvorsky


_______________________________________________
Dynapi-Help mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/mailman/listinfo/dynapi-help

Reply via email to