summaryrefslogtreecommitdiffstats
path: root/src/main/java/com/kitfox/svg/app/SVGPlayer.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/kitfox/svg/app/SVGPlayer.java')
-rw-r--r--src/main/java/com/kitfox/svg/app/SVGPlayer.java426
1 files changed, 426 insertions, 0 deletions
diff --git a/src/main/java/com/kitfox/svg/app/SVGPlayer.java b/src/main/java/com/kitfox/svg/app/SVGPlayer.java
new file mode 100644
index 0000000..100a3e8
--- /dev/null
+++ b/src/main/java/com/kitfox/svg/app/SVGPlayer.java
@@ -0,0 +1,426 @@
+/*
+ * SVGViewer.java
+ *
+ *
+ * The Salamander Project - 2D and 3D graphics libraries in Java
+ * Copyright (C) 2004 Mark McKay
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Mark McKay can be contacted at mark@kitfox.com. Salamander and other
+ * projects can be found at http://www.kitfox.com
+ *
+ * Created on April 3, 2004, 5:28 PM
+ */
+
+package com.kitfox.svg.app;
+
+import java.net.*;
+import java.awt.*;
+import java.io.*;
+import java.util.regex.*;
+
+import javax.swing.*;
+
+import com.kitfox.svg.*;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.awt.geom.Point2D;
+import java.security.AccessControlException;
+import java.util.Vector;
+
+/**
+ * @author Mark McKay
+ * @author <a href="mailto:mark@kitfox.com">Mark McKay</a>
+ */
+public class SVGPlayer extends javax.swing.JFrame
+{
+ public static final long serialVersionUID = 1;
+
+ SVGDisplayPanel svgDisplayPanel = new SVGDisplayPanel();
+
+ final PlayerDialog playerDialog;
+
+ SVGUniverse universe;
+
+ /** FileChooser for running in trusted environments */
+ final JFileChooser fileChooser;
+ {
+// fileChooser = new JFileChooser(new File("."));
+ JFileChooser fc = null;
+ try
+ {
+ fc = new JFileChooser();
+ fc.setFileFilter(
+ new javax.swing.filechooser.FileFilter() {
+ final Matcher matchLevelFile = Pattern.compile(".*\\.svg").matcher("");
+
+ public boolean accept(File file)
+ {
+ if (file.isDirectory()) return true;
+
+ matchLevelFile.reset(file.getName());
+ return matchLevelFile.matches();
+ }
+
+ public String getDescription() { return "SVG file (*.svg)"; }
+ }
+ );
+ }
+ catch (AccessControlException ex)
+ {
+ //Do not create file chooser if webstart refuses permissions
+ }
+ fileChooser = fc;
+ }
+
+ /** Backup file service for opening files in WebStart situations */
+ /*
+ final FileOpenService fileOpenService;
+ {
+ try
+ {
+ fileOpenService = (FileOpenService)ServiceManager.lookup("javax.jnlp.FileOpenService");
+ }
+ catch (UnavailableServiceException e)
+ {
+ fileOpenService = null;
+ }
+ }
+ */
+
+ /** Creates new form SVGViewer */
+ public SVGPlayer() {
+ initComponents();
+
+ setSize(800, 600);
+
+ svgDisplayPanel.setBgColor(Color.white);
+ svgDisplayPanel.addMouseListener(new MouseAdapter()
+ {
+ public void mouseClicked(MouseEvent evt)
+ {
+ SVGDiagram diagram = svgDisplayPanel.getDiagram();
+ if (diagram == null) return;
+
+ System.out.println("Picking at cursor (" + evt.getX() + ", " + evt.getY() + ")");
+ try
+ {
+ Vector paths = diagram.pick(new Point2D.Float(evt.getX(), evt.getY()), null);
+ for (int i = 0; i < paths.size(); i++)
+ {
+ Vector path = (Vector)paths.get(i);
+ System.out.println(pathToString(path));
+ }
+ }
+ catch (SVGException ex)
+ {
+ ex.printStackTrace();
+ }
+ }
+ }
+ );
+
+ svgDisplayPanel.setPreferredSize(getSize());
+ scrollPane_svgArea.setViewportView(svgDisplayPanel);
+
+ playerDialog = new PlayerDialog(this);
+ }
+
+ private String pathToString(Vector path)
+ {
+ if (path.size() == 0) return "";
+
+ StringBuffer sb = new StringBuffer();
+ sb.append(path.get(0));
+ for (int i = 1; i < path.size(); i++)
+ {
+ sb.append("/");
+ sb.append(((SVGElement)path.get(i)).getId());
+ }
+ return sb.toString();
+ }
+
+ public void updateTime(double curTime)
+ {
+ try
+ {
+ if (universe != null)
+ {
+ universe.setCurTime(curTime);
+ universe.updateTime();
+ // svgDisplayPanel.updateTime(curTime);
+ repaint();
+ }
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ private void loadURL(URL url)
+ {
+ boolean verbose = cmCheck_verbose.isSelected();
+
+ universe = new SVGUniverse();
+ universe.setVerbose(verbose);
+ SVGDiagram diagram = null;
+
+ if (!CheckBoxMenuItem_anonInputStream.isSelected())
+ {
+ //Load from a disk with a valid URL
+ URI uri = universe.loadSVG(url);
+
+ if (verbose) System.err.println(uri.toString());
+
+ diagram = universe.getDiagram(uri);
+ }
+ else
+ {
+ //Load from a stream with no particular valid URL
+ try
+ {
+ InputStream is = url.openStream();
+ URI uri = universe.loadSVG(is, "defaultName");
+
+ if (verbose) System.err.println(uri.toString());
+
+ diagram = universe.getDiagram(uri);
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ svgDisplayPanel.setDiagram(diagram);
+ repaint();
+ }
+
+ /** This method is called from within the constructor to
+ * initialize the form.
+ * WARNING: Do NOT modify this code. The content of this method is
+ * always regenerated by the Form Editor.
+ */
+ // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
+ private void initComponents()
+ {
+ scrollPane_svgArea = new javax.swing.JScrollPane();
+ jMenuBar1 = new javax.swing.JMenuBar();
+ menu_file = new javax.swing.JMenu();
+ cm_loadFile = new javax.swing.JMenuItem();
+ cm_loadUrl = new javax.swing.JMenuItem();
+ menu_window = new javax.swing.JMenu();
+ cm_player = new javax.swing.JMenuItem();
+ jSeparator2 = new javax.swing.JSeparator();
+ cm_800x600 = new javax.swing.JMenuItem();
+ CheckBoxMenuItem_anonInputStream = new javax.swing.JCheckBoxMenuItem();
+ cmCheck_verbose = new javax.swing.JCheckBoxMenuItem();
+ menu_help = new javax.swing.JMenu();
+ cm_about = new javax.swing.JMenuItem();
+
+ setTitle("SVG Player - Salamander Project");
+ addWindowListener(new java.awt.event.WindowAdapter()
+ {
+ public void windowClosing(java.awt.event.WindowEvent evt)
+ {
+ exitForm(evt);
+ }
+ });
+
+ getContentPane().add(scrollPane_svgArea, java.awt.BorderLayout.CENTER);
+
+ menu_file.setMnemonic('f');
+ menu_file.setText("File");
+ cm_loadFile.setMnemonic('l');
+ cm_loadFile.setText("Load File...");
+ cm_loadFile.addActionListener(new java.awt.event.ActionListener()
+ {
+ public void actionPerformed(java.awt.event.ActionEvent evt)
+ {
+ cm_loadFileActionPerformed(evt);
+ }
+ });
+
+ menu_file.add(cm_loadFile);
+
+ cm_loadUrl.setText("Load URL...");
+ cm_loadUrl.addActionListener(new java.awt.event.ActionListener()
+ {
+ public void actionPerformed(java.awt.event.ActionEvent evt)
+ {
+ cm_loadUrlActionPerformed(evt);
+ }
+ });
+
+ menu_file.add(cm_loadUrl);
+
+ jMenuBar1.add(menu_file);
+
+ menu_window.setText("Window");
+ cm_player.setText("Player");
+ cm_player.addActionListener(new java.awt.event.ActionListener()
+ {
+ public void actionPerformed(java.awt.event.ActionEvent evt)
+ {
+ cm_playerActionPerformed(evt);
+ }
+ });
+
+ menu_window.add(cm_player);
+
+ menu_window.add(jSeparator2);
+
+ cm_800x600.setText("800 x 600");
+ cm_800x600.addActionListener(new java.awt.event.ActionListener()
+ {
+ public void actionPerformed(java.awt.event.ActionEvent evt)
+ {
+ cm_800x600ActionPerformed(evt);
+ }
+ });
+
+ menu_window.add(cm_800x600);
+
+ CheckBoxMenuItem_anonInputStream.setText("Anonymous Input Stream");
+ menu_window.add(CheckBoxMenuItem_anonInputStream);
+
+ cmCheck_verbose.setText("Verbose");
+ cmCheck_verbose.addActionListener(new java.awt.event.ActionListener()
+ {
+ public void actionPerformed(java.awt.event.ActionEvent evt)
+ {
+ cmCheck_verboseActionPerformed(evt);
+ }
+ });
+
+ menu_window.add(cmCheck_verbose);
+
+ jMenuBar1.add(menu_window);
+
+ menu_help.setText("Help");
+ cm_about.setText("About...");
+ cm_about.addActionListener(new java.awt.event.ActionListener()
+ {
+ public void actionPerformed(java.awt.event.ActionEvent evt)
+ {
+ cm_aboutActionPerformed(evt);
+ }
+ });
+
+ menu_help.add(cm_about);
+
+ jMenuBar1.add(menu_help);
+
+ setJMenuBar(jMenuBar1);
+
+ pack();
+ }// </editor-fold>//GEN-END:initComponents
+
+ private void cm_loadUrlActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_cm_loadUrlActionPerformed
+ {//GEN-HEADEREND:event_cm_loadUrlActionPerformed
+ String urlStrn = JOptionPane.showInputDialog(this, "Enter URL of SVG file");
+ if (urlStrn == null) return;
+
+ try
+ {
+ URL url = new URL(urlStrn);
+ loadURL(url);
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+
+ }//GEN-LAST:event_cm_loadUrlActionPerformed
+
+ private void cmCheck_verboseActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_cmCheck_verboseActionPerformed
+ {//GEN-HEADEREND:event_cmCheck_verboseActionPerformed
+// TODO add your handling code here:
+ }//GEN-LAST:event_cmCheck_verboseActionPerformed
+
+ private void cm_playerActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_cm_playerActionPerformed
+ {//GEN-HEADEREND:event_cm_playerActionPerformed
+ playerDialog.setVisible(true);
+ }//GEN-LAST:event_cm_playerActionPerformed
+
+ private void cm_aboutActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_cm_aboutActionPerformed
+ {//GEN-HEADEREND:event_cm_aboutActionPerformed
+ VersionDialog dia = new VersionDialog(this, true, cmCheck_verbose.isSelected());
+ dia.setVisible(true);
+// JOptionPane.showMessageDialog(this, "Salamander SVG - Created by Mark McKay\nhttp://www.kitfox.com");
+ }//GEN-LAST:event_cm_aboutActionPerformed
+
+ private void cm_800x600ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cm_800x600ActionPerformed
+ setSize(800, 600);
+ }//GEN-LAST:event_cm_800x600ActionPerformed
+
+ private void cm_loadFileActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRST:event_cm_loadFileActionPerformed
+ {//GEN-HEADEREND:event_cm_loadFileActionPerformed
+ boolean verbose = cmCheck_verbose.isSelected();
+
+ try
+ {
+ int retVal = fileChooser.showOpenDialog(this);
+ if (retVal == JFileChooser.APPROVE_OPTION)
+ {
+ File chosenFile = fileChooser.getSelectedFile();
+
+ URL url = chosenFile.toURI().toURL();
+
+ loadURL(url);
+ }
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+
+ }//GEN-LAST:event_cm_loadFileActionPerformed
+
+ /** Exit the Application */
+ private void exitForm(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_exitForm
+ System.exit(0);
+ }//GEN-LAST:event_exitForm
+
+ /**
+ * @param args the command line arguments
+ */
+ public static void main(String args[]) {
+ new SVGPlayer().setVisible(true);
+ }
+
+ public void updateTime(double curTime, double timeStep, int playState)
+ {
+ }
+
+ // Variables declaration - do not modify//GEN-BEGIN:variables
+ private javax.swing.JCheckBoxMenuItem CheckBoxMenuItem_anonInputStream;
+ private javax.swing.JCheckBoxMenuItem cmCheck_verbose;
+ private javax.swing.JMenuItem cm_800x600;
+ private javax.swing.JMenuItem cm_about;
+ private javax.swing.JMenuItem cm_loadFile;
+ private javax.swing.JMenuItem cm_loadUrl;
+ private javax.swing.JMenuItem cm_player;
+ private javax.swing.JMenuBar jMenuBar1;
+ private javax.swing.JSeparator jSeparator2;
+ private javax.swing.JMenu menu_file;
+ private javax.swing.JMenu menu_help;
+ private javax.swing.JMenu menu_window;
+ private javax.swing.JScrollPane scrollPane_svgArea;
+ // End of variables declaration//GEN-END:variables
+
+}