You are viewing a plain text version of this content. The canonical link for it is here.
Posted to batik-dev@xmlgraphics.apache.org by Paul Sinnema <pa...@paulsinnema.com> on 2003/09/03 18:49:09 UTC

RE: Finding an Element (Node) in the DOM with an X Ycoordinatefroma MouseEvent

Philippe,

Thanks for the input. I, quite suddenly, had to go to a customer this
afternoon. I haven't been able to try the example yet. I will try it
tomorrow morning (eurpean time).

Paul.

-----Original Message-----
From: Philippe GIL [mailto:philippe.gil@itris.fr] 
Sent: woensdag 3 september 2003 14:37
To: batik-dev@xml.apache.org
Subject: Re: Finding an Element (Node) in the DOM with an X
Ycoordinatefroma MouseEvent


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" <ph...@itris.fr>
> To: "Paul Sinnema" <pa...@paulsinnema.com>
> 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" <ph...@itris.fr>
> > To: "Paul Sinnema" <pa...@paulsinnema.com>
> > 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: batik-dev-unsubscribe@xml.apache.org
> > For additional commands, e-mail: batik-dev-help@xml.apache.org
> > 
> 
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: batik-dev-unsubscribe@xml.apache.org
> For additional commands, e-mail: batik-dev-help@xml.apache.org
> 



---------------------------------------------------------------------
To unsubscribe, e-mail: batik-dev-unsubscribe@xml.apache.org
For additional commands, e-mail: batik-dev-help@xml.apache.org


---
Incoming mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.509 / Virus Database: 306 - Release Date: 12-08-2003
 

---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.509 / Virus Database: 306 - Release Date: 12-08-2003
 


---------------------------------------------------------------------
To unsubscribe, e-mail: batik-dev-unsubscribe@xml.apache.org
For additional commands, e-mail: batik-dev-help@xml.apache.org