Bonjour Paul,

Thanks for your code. You are using SWT_AWT class. Does it still
experimental and only for win32?

That's working code when the JSVGCanvas is added to a JPanel;

addEventListener is called for each svg element you need to get inputs
getCurrentTarget returns the "clicked" Element.
This code is thead-safe in case your mouse action need to update the
DOM.


                EventListener onClick = new OnClickAction();

                    EventTarget t;
                                    
                    t = (EventTarget)(svgCanvas.getSVGDocument().
                                                getElementById(svgid));
                    
                    // Adds a 'onclick' listener
                    t.addEventListener("click", onClick, false);




    public class OnClickAction implements EventListener, Runnable {
        Event evt;

        public void handleEvent(Event evt) {
            this.evt = evt;

            if (Thread.currentThread() == svgCanvas.getUpdateManager().
                                                getUpdateRunnableQueue().getThread()){ 
         Element elt;
            
                elt = (Element)(evt.getCurrentTarget());
                if (elt != null) {
                        String svgid = elt.getAttribute("id");
                        //etc...
                }
            }       
            else {
                try {
                    svgCanvas.getUpdateManager().
                        getUpdateRunnableQueue().invokeLater (this);
                }
                catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }

        public void run() {
                handleEvent(evt);
        }    

Amicalement
philippe

Le mer 03/09/2003 à 11:19, Paul Sinnema a écrit :
> Philippe,
> 
> All the SVG handling is done by batik.
> I've inserted the JSVGCanvas in the view (still have a flicker problem during 
> drawing, I think it's because the JSVGCanvas is added to an SWT panel which is also 
> redrawn).
> 
> Since this morning I've got the following code working. If this is the correct way 
> to do things, I then need to know how to get the DOM Node or Element from the Event!
> 
>  private static final String MOUSE_CLICK= "click";
>  private static final String MOUSE_MOVE= "mousemove";
>  private static final String MOUSE_DOWN= "mousedown";
>  private static final String MOUSE_UP= "mouseup";
> 
>  private void handleMyEvent(Event event)
>  {
>   EventTarget et= event.getTarget();
> 
>   setTitleText(
>    " Type = "
>     + event.getType()
>     + " Phase = "
>     + event.getEventPhase()
>     + " Current target = "
>     + et.getClass()
>     + " Timestamp = "
>     + event.getTimeStamp());
>  }
> 
>  public void createPartControl(final Composite parent)
>  {
>   try
>   {
>    svgCanvas= new JSVGCanvas(new MyUserAgent(), true, true);
>    svgCanvas.setDoubleBuffered(true);
>    svgCanvas.setDoubleBufferedRendering(true);
>    svgCanvas.addSVGLoadEventDispatcherListener(new SVGLoadEventDispatcherListener()
>    {
> 
>     public void svgLoadEventDispatchStarted(SVGLoadEventDispatcherEvent arg0)
>     {
>      // setTitleText("svgLoadEventDispatchStarted");
>     }
> 
>     public void svgLoadEventDispatchCompleted(SVGLoadEventDispatcherEvent arg0)
>     {
>      SVGSVGElement root= svgCanvas.getSVGDocument().getRootElement();
>      root.addEventListener(MOUSE_CLICK, new EventListener()
>      {
>       public void handleEvent(Event arg0)
>       {
>        handleMyEvent(arg0);
>       }
>      }, true);
>      root.addEventListener(MOUSE_MOVE, new EventListener()
>      {
>       public void handleEvent(Event arg0)
>       {
>        handleMyEvent(arg0);
>       }
>      }, true);
>      root.addEventListener(MOUSE_DOWN, new EventListener()
>      {
>       public void handleEvent(Event arg0)
>       {
>        handleMyEvent(arg0);
>       }
>      }, true);
>      root.addEventListener(MOUSE_UP, new EventListener()
>      {
>       public void handleEvent(Event arg0)
>       {
>        handleMyEvent(arg0);
>       }
>      }, true);
>     }
> 
>     public void svgLoadEventDispatchCancelled(SVGLoadEventDispatcherEvent arg0)
>     {
>      // setTitleText("svgLoadEventDispatchCancelled");
>     }
> 
>     public void svgLoadEventDispatchFailed(SVGLoadEventDispatcherEvent arg0)
>     {
>      // setTitleText("svgLoadEventDispatchFailed");
>     }
>    });
>    awtPanel= SWT_AWT.new_Panel(parent);
>    awtPanel.setLayout(new BorderLayout());
>    awtPanel.add("Center", svgCanvas);
>    shell= getViewSite().getShell();
> 
>    createActions();
>   } catch (Throwable t)
>   {
>    t.printStackTrace();
>   }
> 
>   getViewSite().getPage().addSelectionListener(this);
>  }
> 
> Paul.
> 
> ----- Original Message ----- 
> From: "Philippe GIL" <[EMAIL PROTECTED]>
> To: "Paul Sinnema" <[EMAIL PROTECTED]>
> Sent: Wednesday, September 03, 2003 10:37 AM
> Subject: Re: Finding an Element (Node) in the DOM with an X Y coordinatefroma 
> MouseEvent
> 
> 
> > Bonjour Paul,
> > 
> > I can't still figure how you use batik under eclipse?
> > 
> > What part of the SVG handling is managed by batik?
> > How do you display SVG content inside your view? Do you parse the batik
> > GVT making your own GVT to screen bridge? Do you generate a bitmap with
> > batik to display it later in your view. Do you insert an JSVGCanvas in
> > your view?
> > The solution of your problem will probably depend on it.
> > 
> > Amicalement
> > Philippe
> 
> Le mer 03/09/2003 à 09:47, Paul Sinnema a écrit :
> > Philippe,
> > 
> > I'm currently building an Eclipse 'View' (yes it's the Open Source Project
> > you are referring to) to display and manipulate SVG. The intent is to build
> > an UML Class Diagram which in turn will create an XML that can be
> > transformed to an XMI with EMF in Eclipse. From there we are able to
> > generate code for several applications (JAVA, DOTNet, C++....). All the
> > code, for the view, is created by me (with a little help of Eclipse and of
> > course I've looked at other applications and copied where possible).
> > 
> > Paul.
> > 
> > ----- Original Message ----- 
> > From: "Philippe GIL" <[EMAIL PROTECTED]>
> > To: "Paul Sinnema" <[EMAIL PROTECTED]>
> > Sent: Wednesday, September 03, 2003 9:28 AM
> > Subject: Re: Finding an Element (Node) in the DOM with an X Y coordinatefrom
> > a MouseEvent
> > 
> > 
> > Bonjour Paul,
> > 
> > I have some questions regarding your mail.
> > 
> > Does Eclipse mean the IBM open source project? (http://www.eclipse.org/)
> > Are you displaying SVG files inside Eclipse plugins (views or editors)?
> > What plugin are you using to display the SVG content, Java Advanced
> > Imaging over holongate Batik support (http://www.holongate.org/), Dirk
> > Lemmerman's Batik SVG Viewer
> > (http://www.eclipse-workbench.com/jsp/plugin_detail.jsp?id=139&cat=27)
> > or another way?
> > 
> > The project I'm working on, need to edit SVG file under Eclipse
> > run-time.
> > 
> > Amicalement
> > Philippe
> > 
> > 
> > Le mar 02/09/2003 à 15:21, Paul Sinnema a écrit :
> > > Hi,
> > >
> > > I've been struggling with several issues using Batik as the main display
> > for an new UML Class Diagram in Eclipse. I've solved several of the issues,
> > but I'm kinda stuck right now.
> > >
> > > In my 'view' I use an Interactor to get actions from the mouse (click,
> > press, etc...). I would like to be able to drag a <g> from one place to
> > another (make it topped, resize, etc....) for that I need to know which
> > element in the DOM tree was clicked, dragged, etc....
> > >
> > > Has anyone got any experience with this?
> > >
> > > Paul.
> > 
> > 
> > 
> > 
> > ---------------------------------------------------------------------
> > 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