Hi Thomas,
I did what you suggested but I must have made a mistake because it doesn't seem 
to work.

My SVG has a the element 

<use xlink:href="#SPIDER" myns:link="resources/images/test.svg" x="911" 
y="1204" width="49.25" height="49.25"/>

and this is a snipped of my code:

...................
svgCanvas.setDocumentState(JSVGCanvas.ALWAYS_DYNAMIC);   
svgCanvas.addSVGLoadEventDispatcherListener(
             new SVGLoadEventDispatcherAdapter() {
                    public void  
svgLoadEventDispatchStarted(SVGLoadEventDispatcherEvent e) {
                     SVGDocument doc = svgCanvas.getSVGDocument();
                     registerSVGListeners(doc.getRootElement());
                    }
                });
..................

    private void registerSVGListeners(Node node){
        NamedNodeMap attrs = node.getAttributes();
        for(int i =0;i<attrs.getLength();i++){
            Node att = attrs.item(i);
            if ("myns".equals(att.getPrefix()) && 
"link".equals(att.getLocalName())){
                final String id = att.getNodeValue();
                EventListener onClick = new EventListener(){
                    public void handleEvent(Event evt) {
                        getMediator().openSVG(id);
                    }
                };
                EventTarget target = (EventTarget) node;
                // Adds a 'onclick' listener
                target.addEventListener("click", onClick, true);
            }
        }
        NodeList children = node.getChildNodes();
        for (int i=0;i<children.getLength();i++){
            Node child = children.item(i);
            if (child instanceof Element){
                registerSVGListeners(child);
            }
        }
    }
    
Debugging through the app, I can see that the listeners are set but nothing 
happens when I click on the element.

I reckon that the events are not fired.

Any ideas?

Thanks

Alessandro



On Tuesday 09 November 2004 03:23, Thomas DeWeese wrote:
> Hi Alessandro,
>
>     Well you basically can't do what you want to the way you
> want.  We don't give access to the document at that level.
> However you can register an onload event listener and walk
> the tree there yourself.
>
>     If you were willing to switch to using a 'sub element'
> to indicate that the listener should be attached (a bit like
> animation is currently done) then you could use
> getElementsByTagNameNS to find your child elements (of course
> right now it just walks the tree like you would, eventually
> we may build hashes of this info).
>
>     You could also conceivably subclass SAXSVGDocumentFactory
> and parse the document yourself.  Then just give the parsed document
> to the canvas with 'setSVGDocument(SVGDocument doc)'.
>
> Alessandro Di Bella wrote:
> > I'm new to BATIK and I'm try to do the following...
> >
> > I have an SVG like:
> >
> > <?xml version="1.0"?>
> > <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
> > "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd";>
> > <svg xmlns="http://www.w3.org/2000/svg"; xmlns:myns="........">
> >  <g myns:type="mytype" ...../>
> >  .................
> > </svg>
> >
> > As you can see I defined a different namespace (myns) that allows me to
> > specify the custom attribute "myns:type".
> >
> > The purpose of this is that I would like to intercept the creation of the
> > GVT object built form the <g> element and based on the value of
> > "myns:type" I want attach different listeners to it.
> >
> > I could not find any ContainerListerer-like class to register with the
> > JSVGCanvas so I thought that I could alternatively use a SAXFilter to
> > intercept the
> > SAX events so that I can grab the IDs of the elements I am interested in.
> >
> > Once i know the IDs I can get the components from the SVGDocument, but
> > even like this I cannot see how to specify the DocumentHanlder when the
> > SVG is loaded.
> >
> >
> > Any help wold be greatly appreciated.
> >
> > Thanks
> >
> > Alessandro
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to