/* * @(#)Main.java * * Copyright (c) 2011 Werner Randelshofer, Goldau, Switzerland. * All rights reserved. * * You may not use, copy or modify this file, except in compliance with the * license agreement you entered into with Werner Randelshofer. * For details see accompanying license terms. */ package org.monte.jmftsccdemo; import java.awt.BorderLayout; import java.io.File; import javax.media.Controller; import javax.media.ControllerEvent; import javax.media.ControllerListener; import javax.media.Manager; import javax.media.Player; import javax.swing.JComponent; import javax.swing.JFileChooser; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JProgressBar; import javax.swing.SwingWorker; /** * Main. * * @author Werner Randelshofer * @version $Id: Main.java 304 2013-01-03 07:45:40Z werner $ */ public class Main extends javax.swing.JFrame { private JFileChooser generateChooser; private JFileChooser openChooser; private Player player; /** Creates new form Main */ public Main() { initComponents(); setSize(400, 400); } /** 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. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { infoLabel = new javax.swing.JLabel(); menuBar = new javax.swing.JMenuBar(); fileMenu = new javax.swing.JMenu(); generateVideoItem = new javax.swing.JMenuItem(); openVideoItem = new javax.swing.JMenuItem(); FormListener formListener = new FormListener(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setTitle("TSCC Codec for JMF - Demo"); infoLabel.setText("<html><b>This is a demo for the TSCCCodec class.</b><br>\nThis class supports encoding and decoding of the Techsmith Screen Capture format with the Java Media Framework ( JMF).<br>\nCopyright © 2011 Werner Randelshofer.<br>\nThis software can be licensed under Creative Commons Attribution 3.0<br>"); infoLabel.setBorder(javax.swing.BorderFactory.createEmptyBorder(8, 12, 12, 12)); getContentPane().add(infoLabel, java.awt.BorderLayout.PAGE_START); fileMenu.setText("File"); generateVideoItem.setText("Generate Sample Movies..."); generateVideoItem.addActionListener(formListener); fileMenu.add(generateVideoItem); openVideoItem.setText("Open Movie..."); openVideoItem.addActionListener(formListener); fileMenu.add(openVideoItem); menuBar.add(fileMenu); setJMenuBar(menuBar); pack(); } // Code for dispatching events from components to event handlers. private class FormListener implements java.awt.event.ActionListener { FormListener() {} public void actionPerformed(java.awt.event.ActionEvent evt) { if (evt.getSource() == generateVideoItem) { Main.this.generatePerformed(evt); } else if (evt.getSource() == openVideoItem) { Main.this.openPerformed(evt); } } }// </editor-fold>//GEN-END:initComponents private void generatePerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_generatePerformed if (generateChooser == null) { generateChooser = new JFileChooser(); generateChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); } if (JFileChooser.APPROVE_OPTION == generateChooser.showDialog(this, "Choose Output Folder")) { final File f = generateChooser.getSelectedFile(); final JProgressBar pb = new JProgressBar(); pb.setIndeterminate(true); getContentPane().add(pb, BorderLayout.SOUTH); ((JComponent) getContentPane()).revalidate(); SwingWorker w = new SwingWorker() { @Override protected Object doInBackground() throws Exception { org.monte.jmfavidemo.Main.main(new String[]{f.getPath()}); return null; } @Override protected void done() { pb.setIndeterminate(false); getContentPane().remove(pb); ((JComponent) getContentPane()).revalidate(); getContentPane().repaint(); } }; new Thread(w).start(); } }//GEN-LAST:event_generatePerformed private void openPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_openPerformed if (openChooser == null) { openChooser = new JFileChooser(); } if (JFileChooser.APPROVE_OPTION == openChooser.showOpenDialog(this)) { final File f = openChooser.getSelectedFile(); try { final Player newPlayer = Manager.createPlayer(Manager.createDataSource(f.toURI().toURL())); newPlayer.addControllerListener(new ControllerListener() { @Override public void controllerUpdate(ControllerEvent event) { if (newPlayer.getState() == Controller.Realized) { newPlayer.removeControllerListener(this); getContentPane().removeAll(); JPanel panel = new JPanel(new BorderLayout()); panel.add(newPlayer.getVisualComponent(), BorderLayout.CENTER); panel.add(newPlayer.getControlPanelComponent(), BorderLayout.SOUTH); add(panel, BorderLayout.CENTER); pack(); if (player != null) { player.close(); } player = newPlayer; getRootPane().putClientProperty("Window.documentFile", f); setTitle(f.getName()); } } }); newPlayer.realize(); } catch (Exception ex) { JLabel label = new JLabel(ex.toString()); add(label, BorderLayout.CENTER); ((JComponent) getContentPane()).revalidate(); getContentPane().repaint(); ex.printStackTrace(); } } }//GEN-LAST:event_openPerformed /** * @param args the command line arguments */ public static void main(String args[]) { Manager.setHint(Manager.LIGHTWEIGHT_RENDERER, true); java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new Main().setVisible(true); } }); } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JMenu fileMenu; private javax.swing.JMenuItem generateVideoItem; private javax.swing.JLabel infoLabel; private javax.swing.JMenuBar menuBar; private javax.swing.JMenuItem openVideoItem; // End of variables declaration//GEN-END:variables }