Wow Thomas,

I've been missing out.  Under
http://java.sun.com/j2se/1.5.0/docs/api/index.html there is no mention of
the org.w3c.dom.events.* particularly org.w3c.dom.events.Event,
org.w3c.dom.events.MouseEvent and org.w3c.dom.events.UIEvent.  And I have
never found where to add a listener till reading your reply and now I'm
employing org.apache.batik.dom.svg.SVGOMDocument.addEventListener.  Was
looking at org.w3c.dom.svg.SVGDocument interface too much.

Thank you, I can now make a lot of good progress,

Roger

P.S. I'll be able to model my MathML light-weight visual DOM off of this
too.

----- Original Message ----- 
From: "Thomas DeWeese" <[EMAIL PROTECTED]>
To: "Batik Users" <[EMAIL PROTECTED]>
Sent: Wednesday, July 07, 2004 8:44 PM
Subject: Re: JSVGCanvas displayed gvt components, editing and then saving.


> Hi Roger,
>
>     I applaud your enthusiasm with the GVT, but since you clearly
> are aware of (and are making use of) modifying the DOM to manipulate
> the displayed graphics - why don't you do the same thing for your
> 'interactive' bits?
>
>  >
>  > ((java.awt.geom.Line2D)theShape).setLine(endPoint,
>  > ((java.awt.geom.Line2D)theShape).getP2());
>
>      This could be replaced with a DOM mouseMove event listener,
> and setting the attributes on the line element:
>
>     Element line;
>     line.setAttribute("x1", endPoint.x);
>     line.setAttribute("y1", endPoint.y);
>
>      You can even go back and forth between the GVT and DOM node
> using the BridgeContext (if you want to peak at the Java2D shapes),
> but if you have a dynamic document it's really nasty to go changing
> the GVT 'under the hood'.
>
> Roger I Martin PhD wrote:
>
> >
> > Hi,
> >
> > I'm doing DOM adds, removes, attribute changes and I see the JSVGCanvas
> > rendering update each time.  Also the DOM transformed to an svg doc
> > shows all the final states and attributes.  For example:
> >
> >             JComponent currentFocus=getCurrentFocus();
> >             if(currentFocus==null)
> >             {
> >                 return;
> >             }
> >             else if(currentFocus instanceof
> > org.apache.batik.swing.JSVGCanvas)
> >             {
> >
svgCanvas=(org.apache.batik.swing.JSVGCanvas)currentFocus;
> >                 org.apache.batik.dom.svg.SVGOMDocument
> >
svgOMDocument=(org.apache.batik.dom.svg.SVGOMDocument)svgCanvas.getSVGDocume
nt();
> >                 org.apache.batik.dom.svg.SVGOMSVGElement
> >
root=(org.apache.batik.dom.svg.SVGOMSVGElement)svgOMDocument.getRootElement(
);
> >                 org.apache.batik.dom.svg.SVGDOMImplementation
> > svgDOMImplementation=new
org.apache.batik.dom.svg.SVGDOMImplementation();
> >                 org.apache.batik.dom.svg.SVGOMImageElement image=new
> > org.apache.batik.dom.svg.SVGOMImageElement("image", svgOMDocument);
> >                 try
> >                 {
> >                 javax.imageio.stream.FileImageInputStream fiis=new
> > javax.imageio.stream.FileImageInputStream(new File(fiob.getFilePath()));
> >                 java.util.Iterator
> > iterator=javax.imageio.ImageIO.getImageReaders(fiis);
> >                 if(iterator.hasNext())
> >                 {
> >                     javax.imageio.ImageReader
> > ir=(javax.imageio.ImageReader)iterator.next();
> >                     ir.setInput(fiis);
> >                     java.awt.image.BufferedImage bi=ir.read(0);
> >                     org.apache.batik.svggen.ImageHandlerBase64Encoder
> > dih=new org.apache.batik.svggen.ImageHandlerBase64Encoder();
> >                     dih.handleHREF((java.awt.image.RenderedImage)bi,
> > image,
> >
org.apache.batik.svggen.SVGGeneratorContext.createDefault(svgOMDocument));
> >                     org.apache.batik.dom.svg.SVGOMGElement g=new
> > org.apache.batik.dom.svg.SVGOMGElement("g", svgOMDocument);
> >
> > image.setAttribute("width",Integer.toString(bi.getWidth()));
> >
> > image.setAttribute("height",Integer.toString(bi.getHeight()));
> >                     g.appendChild(image);
> >                     root.appendChild(g);
> >                 }
> >                 }
> >                 catch(FileNotFoundException fnfe)
> >                 {
> >
> >                 }
> >                 catch(java.io.IOException ioe)
> >                 {
> >
> >                 }
> >             }
> > ...
> > This adds a raster image to the DOM as a base 64 encoded image, it shows
> > in the JSVGCanvas update and can be saved to the svg doc.
> >
> > Now without the DOM I can change the JSVGCanvas position of a selected
> > line by doing this:
> >
> > public class SVGCanvasAdapter extends
> > org.apache.batik.gvt.event.GraphicsNodeMouseAdapter implements
> > org.apache.batik.gvt.event.GraphicsNodeKeyListener,
> > org.apache.batik.gvt.event.SelectionListener {
> > ...
> >     public void
> > mouseClicked(org.apache.batik.gvt.event.GraphicsNodeMouseEvent evt)
> >     {
> >         switch(mode)
> >         {
> >             case 0:
> >                 if(evt.getSource() instanceof
> > org.apache.batik.gvt.ShapeNode)
> >                 {
> >                     org.apache.batik.gvt.ShapeNode
> > shapeNode=(org.apache.batik.gvt.ShapeNode)evt.getSource();
> >
> >                     java.awt.Graphics2D
> > g2=(java.awt.Graphics2D)svgCanvas.getGraphics();
> >                     if(g2!=null)
> >                     {
> >                     g2.setColor(Color.blue);
> >                     g2.draw(shapeNode.getOutline());
> >                     g2.dispose();
> >                     }
> >                     java.awt.Shape shape=shapeNode.getShape();
> >                     this.shapeNode=shapeNode;
> >                 }
> >                 break;
> >         }
> >     }
> >
> >     public void
> > mouseDragged(org.apache.batik.gvt.event.GraphicsNodeMouseEvent evt)
> >     {
> >         endPoint=evt.getPoint2D();//getClientPoint();
> >         if(evt.getSource() instanceof org.apache.batik.gvt.ShapeNode)
> >         {
> >             if(shapeNode!=null)
> >             {
> >                 java.awt.Shape theShape=shapeNode.getShape();
> >
> > System.out.println("shape="+shapeNode.getShape().getClass().getName());
> >                 if(theShape instanceof java.awt.geom.Line2D)
> >                 {
> >
> > shapeNode.getParent().fireGraphicsNodeChangeStarted();
> >
> >
if(((java.awt.geom.Line2D)theShape).getP1().distance(endPoint)>((java.awt.ge
om.Line2D)theShape).getP2().distance(endPoint))
> >                     {
> >
> >
((java.awt.geom.Line2D)theShape).setLine(((java.awt.geom.Line2D)theShape).ge
tP1(),
> > endPoint);
> >                         System.out.println("near P1");
> >                     }
> >                     else
> >                     {
> >
> > ((java.awt.geom.Line2D)theShape).setLine(endPoint,
> > ((java.awt.geom.Line2D)theShape).getP2());
> >                         System.out.println("near P2");
> >                     }
> >                         //shapeNode.getParent().
> >
> > shapeNode.getParent().fireGraphicsNodeChangeCompleted();
> >                 svgCanvas.repaint();
> >                 }
> >                 //evt.
> >             }
> >             else
> >             {
> >                 org.apache.batik.gvt.ShapeNode
> > shapeNode=(org.apache.batik.gvt.ShapeNode)evt.getSource();
> >                 java.awt.Shape shape=shapeNode.getShape();
> >                 this.shapeNode=new org.apache.batik.gvt.ShapeNode();
> >             }
> >         }
> >     }
> > ...
> >
> > but I don't get these changes back in the DOM or get to save them to
> > file.  Or should I just use svggen to create the file with the changes
> > from the JSVGCanvas and be done with it?  But sometimes new primitives
> > are added from the DOM and that update will reset the gvt view.  I also
> > want to right-click and popup a dialog with an appropriate primitive
> > dialog for line, ellipse, rectangle, etc.  Basically turn it into a full
> > blown editor.
> >
> >
> >
> >     ----- Original Message -----
> >     *From:* Andres Toussaint <mailto:[EMAIL PROTECTED]>
> >     *To:* Batik Users <mailto:[EMAIL PROTECTED]>
> >     *Sent:* Wednesday, July 07, 2004 4:17 PM
> >     *Subject:* Re: JSVGCanvas displayed gvt components, editing and then
> >     saving.
> >
> >     Hi:
> >
> >     What type of changes are you doing in the GVT component? Why not do
> >     the changes to the objects in the DOM and catch the UpdateManager to
> >     be sure the modifications are ready before saving.
> >
> >     I have to assume that you are doing Java2D modifications, beacuse if
> >     not, then i do not see the reason to do your modifications in the
> >     GVT, you can do all modifications in the DOM, by changing the
> >     attributes of the Elements in your DOM.
> >
> >     If the modification was triggered by a element.EventListener (i.r
> >     OnClickAction), then you are already in the JSCGCanvas runnable
> >     queue, if not, then you need to invoke the runnable queue and do
> >     your attribute changes there.
> >
> >     To invoke the runnable queue, you need to do several things:
> >
> >     1. in JSVGCanvas.gvtRenderingCompeted(GVTTreeRenderEvent) {
> >     UpdateManager updateM = JSVGCanvas.getUpdateManager();
> >     }
> >
> >     2. to call the runnable queue:
> >     updateM.getUpdateRunnableQueue().invokelater(new Runnable() {
> >     public void run() {
> >     //////////////////////////All the Element attribute changes here
> >     //For example
> >     SVGDocument doc = JSCGCanvas.getSVGDocument();
> >     SVGOMSVGElement docElt = (SVGOMSVGElement) doc.getDocumentElement();
> >     Element group = docElt.getElementById("some id tag");
> >     Element theElement = (Element) group.getFirstChild();
> >
> >     //// The attribute changes here:
> >     theElement.setAttribute("width","200");
> >     }
> >     } );
> >
> >
> >     Hope this helps,
> >
> >     Andres.
> >
> >
> >     On Jul 7, 2004, at 12:29 PM, Roger I Martin PhD wrote:
> >
> >         Hi,
> >
> >         I've learned to add, remove, modify the JSVGCanvas displayed svg
> >         DOM, save it back to a file with the changes.  Also learned how
> >         to modify a gvt component on the canvas with user keyboard and
> >         mouse interaction (i.e.
> >         mouseDragged(org.apache.batik.gvt.event.GraphicsNodeMouseEvent
> >         evt);).  What I don't have is how to "bridge" the results of the
> >         gvt modifications back to the DOM and subsequently save the
> >         results back to an svg doc.  After the change is back in the DOM
> >         I could then save it.  Anybody have a hint to how it can be
done?
> >
> >         --Roger
>
>
> ---------------------------------------------------------------------
> 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