Package net.sf.fmj.media.datasink.render

Source Code of net.sf.fmj.media.datasink.render.Handler

package net.sf.fmj.media.datasink.render;

import java.awt.event.ContainerEvent;
import java.awt.event.ContainerListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.media.CannotRealizeException;
import javax.media.IncompatibleSourceException;
import javax.media.Manager;
import javax.media.NoPlayerException;
import javax.media.Player;
import javax.media.protocol.DataSource;
import javax.swing.JFrame;

import net.sf.fmj.ejmf.toolkit.util.PlayerPanel;
import net.sf.fmj.media.AbstractDataSink;
import net.sf.fmj.utility.LoggerSingleton;

/**
* DataSink that creates a player and renders.  Really only for testing.
* @author Ken Larson
*
*/
public class Handler extends AbstractDataSink
{
  private static final Logger logger = LoggerSingleton.logger;

  private DataSource source;
 
  // TODO: additional listener notifications?
 
  public Object getControl(String controlType)
  {
    logger.warning("TODO: getControl " + controlType);
    return null;
  }

  public Object[] getControls()
  {
    logger.warning("TODO: getControls");
    return new Object[0];
  }

  public void close()
  {
    try
    {
      stop();
    } catch (IOException e)
    {
      logger.log(Level.WARNING, "" + e, e);
    }
   
//     TODO: disconnect source?
  }

  public String getContentType()
  {
    // TODO: do we get this from the source, or the outputLocator?
    if (source != null)
      return source.getContentType();
    else
      return null;
  }


  private Player player;
 
  public void open() throws IOException, SecurityException
  {
   
    //source.connect();  // Manager/player will take care of this.
   
    try
    {
      player = Manager.createRealizedPlayer(source);
    } catch (NoPlayerException e)
    {
      logger.log(Level.WARNING, "" + e, e);
      throw new IOException("" + e);
    } catch (CannotRealizeException e)
    {
      logger.log(Level.WARNING, "" + e, e);
      throw new IOException("" + e);
    }
   
    // TODO: GUI
   
  }

  public void start() throws IOException
  {
    //  no need to open GUI for just audio.
   
    // create GUI frame, add player's GUI components to it:
    if (player.getVisualComponent() != null)
    {
      final PlayerPanel playerpanel;
      try
      {
        playerpanel = new PlayerPanel(player);
      } catch (NoPlayerException e)
      {
        logger.log(Level.WARNING, "" + e, e);
        throw new IOException("" + e);
      }
 
      // already realized so this will work:
          //playerpanel.addControlComponent(); // no need for control component
          playerpanel.addVisualComponent();
         
      final JFrame frame = new JFrame( "Renderer" );
 
      // exit on close:
          //  Allow window to close
          frame.addWindowListener(
              new WindowAdapter() {
                  @Override
          public void windowClosing(WindowEvent e) {
                    // TODO: close player?
                     // System.exit(0);
                  }
              }
          );
 
          //  Resize frame whenever new Component is added
          playerpanel.getMediaPanel().addContainerListener(
              new ContainerListener() {
                  public void componentAdded(ContainerEvent e) {
                      frame.pack();
                  }
                  public void componentRemoved(ContainerEvent e) {
                      frame.pack();
                  }
              }
          );
 
          // finish constructing window, and open it
          frame.getContentPane().add(playerpanel);
 
          frame.pack();
          frame.setVisible(true);
    }
       
    player.start();
  }

  public void stop() throws IOException
  {
    if (player != null)
      player.stop();
   
  }
 

 
  public void setSource(DataSource source) throws IOException, IncompatibleSourceException
  {
    this.source = source;
  }
 


}
TOP

Related Classes of net.sf.fmj.media.datasink.render.Handler

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.