package rimis.apps.epss;

/**
 * <p>Title: RIMIS - Evolutionary Problem Support System</p>
 * <p>Description: Project phase 3</p>
 * <p>Copyright: Copyright (c) 2003</p>
 * <p>Company: CSIRO Mathematical and Information Sciences</p>
 * @author Leslie ZHANG
 * @version 1.0
 */
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;

import org.apache.batik.swing.JSVGCanvas;
import org.apache.batik.swing.gvt.GVTTreeRendererAdapter;
import org.apache.batik.swing.gvt.GVTTreeRendererEvent;
import org.apache.batik.swing.svg.SVGDocumentLoaderAdapter;
import org.apache.batik.swing.svg.SVGDocumentLoaderEvent;
import org.apache.batik.swing.svg.GVTTreeBuilderAdapter;
import org.apache.batik.swing.svg.GVTTreeBuilderEvent;

import org.apache.batik.swing.JSVGCanvas;
import org.w3c.dom.Document;
import org.apache.batik.transcoder.image.JPEGTranscoder;
import org.apache.batik.transcoder.TranscoderInput;
import org.apache.batik.transcoder.TranscoderOutput;
import org.apache.batik.dom.svg.SVGDOMImplementation;
import org.apache.batik.swing.gvt.*;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.DOMImplementation;
import java.io.*;
import org.w3c.dom.svg.*;

public class testCanvas2 {

  class TestCanvas4 extends JSVGCanvas{


  }

  public static void main(String[] args) {
    JFrame f = new JFrame("Batik");
    testCanvas2 app = new testCanvas2(f);
    app.svgCanvas.setDocumentState(JSVGCanvas.ALWAYS_DYNAMIC);
    f.getContentPane().add(app.createComponents());


    f.addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        System.exit(0);
      }
    });
    f.setSize(400, 400);
    f.setVisible(true);

  }


  JFrame frame;
  JButton button = new JButton("Load...");
  JButton button2 = new JButton("setSVGDocument()");
  JButton button3 = new JButton("Visi ON.");
  JButton button4 = new JButton("Visi OFF.");

  JLabel label = new JLabel();
  TestCanvas4 svgCanvas = new TestCanvas4();

  public testCanvas2(JFrame f) {
    frame = f;
  }

  public void docIt(){
    SVGDocument svgdoc = svgCanvas.getSVGDocument();
    svgCanvas.setSVGDocument(svgdoc);
  }
  public JComponent createComponents() {
    final JPanel panel = new JPanel(new BorderLayout());

    JPanel p = new JPanel(new FlowLayout(FlowLayout.LEFT));
    p.add(button);
    p.add(button2);
    p.add(button3);
    p.add(button4);
    p.add(label);


    panel.add("North", p);
    panel.add("Center", svgCanvas);

    // Set the button action.
    button.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent ae) {
        JFileChooser fc = new JFileChooser("D:\\temp\\svgSamples");
        int choice = fc.showOpenDialog(panel);
        if (choice == JFileChooser.APPROVE_OPTION) {
          File f = fc.getSelectedFile();
          try {
            svgCanvas.setURI(f.toURL().toString());
          } catch (IOException ex) {
            ex.printStackTrace();
          }
        }
      }
    });

    button3.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent ae) {

    RimisR rimisRunable = new RimisR("visible");
    try{
      svgCanvas.getUpdateManager().getUpdateRunnableQueue().invokeLater(rimisRunable);
    }catch( Exception e ){
      e.printStackTrace();
    }

      }
    });


    button4.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent ae) {

         RimisR rimisRunable = new RimisR("hidden");
         try{
           svgCanvas.getUpdateManager().getUpdateRunnableQueue().invokeLater(rimisRunable);
         }catch( Exception e ){
           e.printStackTrace();
         }


       }
     });

    button2.addActionListener(new ActionListener(){

      public void actionPerformed(ActionEvent ae){
        docIt();
      }
    }

    );

    // Set the JSVGCanvas listeners.
    svgCanvas.addSVGDocumentLoaderListener(new SVGDocumentLoaderAdapter() {
      public void documentLoadingStarted(SVGDocumentLoaderEvent e) {
        label.setText("Document Loading...");
      }
      public void documentLoadingCompleted(SVGDocumentLoaderEvent e) {
        label.setText("Document Loaded.");
      }
    });

    svgCanvas.addGVTTreeBuilderListener(new GVTTreeBuilderAdapter() {
      public void gvtBuildStarted(GVTTreeBuilderEvent e) {
        label.setText("Build Started...");
      }
      public void gvtBuildCompleted(GVTTreeBuilderEvent e) {
        label.setText("Build Done.");
        frame.pack();
      }
    });

    svgCanvas.addGVTTreeRendererListener(new GVTTreeRendererAdapter() {
      public void gvtRenderingPrepare(GVTTreeRendererEvent e) {
        label.setText("Rendering Started...");
      }
      public void gvtRenderingCompleted(GVTTreeRendererEvent e) {
        label.setText("");
      }
    });

    return panel;
  }

  class RimisR implements Runnable{
    String v;
    public RimisR(String s){
      v = s;
    }
  public void run(){
    ((SVGElement) svgCanvas.getSVGDocument().getElementById("testid")).setAttribute("visibility", v);
  }

}
}

