Package net.sf.fmj.ui

Source Code of net.sf.fmj.ui.FmjStudio

package net.sf.fmj.ui;

import java.awt.BorderLayout;
import java.awt.CheckboxMenuItem;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ContainerEvent;
import java.awt.event.ContainerListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.logging.Logger;

import javax.swing.JFrame;

import net.sf.fmj.ui.application.PlayerPanel;
import net.sf.fmj.ui.dialogs.AboutPanel;
import net.sf.fmj.ui.registry.RegistryEditorPanel;
import net.sf.fmj.utility.FmjStartup;
import net.sf.fmj.utility.LoggerSingleton;

import com.lti.utils.OSUtils;

/**
* Main class for the FMJ media player application.
*
* @author Warren Bloomer
* @author Ken Larson
*
*/
public class FmjStudio {
  private static final Logger logger = LoggerSingleton.logger;

  private JFrame frame;
  private JFrame registryFrame;
  private PlayerPanel playerPanel;
 
  /**
   *
   * @param args
   */
  private void run(String[] args) {
    frame = new JFrame("FMJ Studio");
    frame.setSize(new Dimension(640, 480));
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

   
    Container contentPane = frame.getContentPane();
    playerPanel = new PlayerPanel();
    contentPane.add(playerPanel);
   
    frame.setMenuBar(getMenuBar());
   
        //  Resize frame whenever new Component is added
    playerPanel.getVideoPanel().addContainerListener(
            new ContainerListener() {
                public void componentAdded(ContainerEvent e) {
                    frame.pack();
                }
                public void componentRemoved(ContainerEvent e) {
                    frame.pack();
                }
            }
        );
       
    frame.setVisible(true);
   
    if (args.length > 0)
    {
      // URL is first arg
      final String url = args[0];
      playerPanel.addMediaLocatorAndLoad(url);
    }
  }
 
  private final MenuBar getMenuBar() {
    MenuBar menuBar = new MenuBar();
   
    final Menu menuFile = new Menu();
    menuFile.setLabel("File");
    menuBar.add(menuFile);
   
    // File>Open File
    {
      final MenuItem menuItemOpenFile = new MenuItem("Open File...");
      menuItemOpenFile.addActionListener(
          new ActionListener() {
            public void actionPerformed(ActionEvent e) {
              playerPanel.onOpenFile();
            }
          }
        );
      menuFile.add(menuItemOpenFile);
    }

    // File>Open URL
    {
      final MenuItem menuItemOpenURL = new MenuItem("Open URL...");
      menuItemOpenURL.addActionListener(
          new ActionListener() {
            public void actionPerformed(ActionEvent e) {
              playerPanel.onOpenURL();
            }
          }
        );
      menuFile.add(menuItemOpenURL);
    }
   
    // File>Open RTP Session
    {
      final MenuItem menuItemReceiveRTP = new MenuItem("Open RTP Session...");
      menuItemReceiveRTP.addActionListener(
          new ActionListener() {
            public void actionPerformed(ActionEvent e) {
              playerPanel.onReceiveRTP();
            }
          }
        );
      menuFile.add(menuItemReceiveRTP);
    }
   
    // File>Capture
    {
      final MenuItem menuItemOpenCaptureDevice = new MenuItem("Capture...");
      menuItemOpenCaptureDevice.addActionListener(
          new ActionListener() {
            public void actionPerformed(ActionEvent e) {
              playerPanel.onOpenCaptureDevice();
            }
          }
        );
      menuFile.add(menuItemOpenCaptureDevice);
    }
   

    // separator
    menuFile.addSeparator();

    // TODO: export

    // File>Transmit RTP
    {
      final MenuItem menuItemTransmitRTP = new MenuItem("Transmit RTP...");
      menuItemTransmitRTP.addActionListener(
          new ActionListener() {
            public void actionPerformed(ActionEvent e) {
              playerPanel.onTransmitRTP();
            }
          }
        );
      menuFile.add(menuItemTransmitRTP);
    }

    // File>Transcode
    {
      final MenuItem menuItemTranscode = new MenuItem("Transcode...");
      menuItemTranscode.addActionListener(
          new ActionListener() {
            public void actionPerformed(ActionEvent e) {
              playerPanel.onTranscode();
            }
          }
        );
      menuFile.add(menuItemTranscode);
    }
   
    // separator
    menuFile.addSeparator();
   
    // File>Registry Editor
    {
      final MenuItem menuItemRegistryEditor = new MenuItem("Registry Editor...");
      menuItemRegistryEditor.addActionListener(
          new ActionListener() {
            public void actionPerformed(ActionEvent e) {
              onOpenRegistryEditor();
            }
          }
        );
      menuFile.add(menuItemRegistryEditor);
    }
   
    // File>Exit
    {
      final MenuItem menuItemExit = new MenuItem("Exit");
      menuItemExit.addActionListener(
          new ActionListener() {
            public void actionPerformed(ActionEvent e) {
              onExit();
            }
          }
        );
      menuFile.add(menuItemExit);
    }
   
   
    final Menu menuPlayer = new Menu();
    menuPlayer.setLabel("Player");
    menuBar.add(menuPlayer);
   
    // Player>Auto-play
    {
      final CheckboxMenuItem menuItemAutoPlay = new CheckboxMenuItem("Auto-play");
      menuItemAutoPlay.addItemListener(new ItemListener() {

        public void itemStateChanged(ItemEvent e)
        {
          playerPanel.onAutoPlay(menuItemAutoPlay.getState());
        }
       
      });

      menuPlayer.add(menuItemAutoPlay);
      menuItemAutoPlay.setState(playerPanel.getPrefs().autoPlay);
    }
   
    // Player>Auto-loop
    {
      final CheckboxMenuItem menuItemAutoLoop = new CheckboxMenuItem("Auto-loop");
      menuItemAutoLoop.addItemListener(new ItemListener() {

        public void itemStateChanged(ItemEvent e)
        {
          playerPanel.onAutoLoop(menuItemAutoLoop.getState());
        }
       
      });
      menuPlayer.add(menuItemAutoLoop);
      playerPanel.onAutoLoop(false);   // TODO: not working right yet.
      menuItemAutoLoop.setState(playerPanel.getPrefs().autoLoop);
      menuItemAutoLoop.setEnabled(false)// TODO: not working right yet.
     

    }

   
    final Menu menuHelp = new Menu();
    menuHelp.setLabel("Help");
    menuBar.add(menuHelp);
   
    // Help>About
    {
      final MenuItem menuItemHelpAbout = new MenuItem("About...");
      menuItemHelpAbout.addActionListener(
          new ActionListener() {
            public void actionPerformed(ActionEvent e) {
              AboutPanel.run(frame);
            }
          }
        );

      menuHelp.add(menuItemHelpAbout);
     
    }
   
    return menuBar;
  }
 
  /**
   * Display the registry editor frame
   *
   */
  private void onOpenRegistryEditor() {
    if (registryFrame == null) {
      registryFrame = new JFrame("Registry Editor");
      RegistryEditorPanel panel = new RegistryEditorPanel();

      Container contentPane = registryFrame.getContentPane();
      contentPane.setLayout(new BorderLayout());
      contentPane.add(panel, BorderLayout.CENTER);
     
      //frame.setMinimumSize(new Dimension(480, 320));  // doesn't seem to have any effect (at least in linux), and is not 1.4-compatible anyway.
      registryFrame.setSize(640, 480);
    }
    registryFrame.setVisible(true);
  }
 
  private void onExit()
  {
    if (registryFrame != null)
      registryFrame.dispose();
    frame.dispose();
  }
 
 
  /**
   * Main method.
   *
   * @param args the arguments pased to this application
   */
  public static void main(String[] args)
  {
    FmjStartup.init(); // initialize default FMJ/JMF/logging
   

    // see http://developer.apple.com/technotes/tn/tn2031.html
    // see http://java.sun.com/developer/technicalArticles/JavaLP/JavaToMac/
    // It doesn't seem to work to set these in code, they have to be set by the calling environment
    if (OSUtils.isMacOSX())
    {  System.setProperty("com.apple.mrj.application.apple.menu.about.name", "FMJ Studio");
      //System.setProperty("com.apple.mrj.application.growbox.intrudes", "false");   // doesn't seem to work
    }
   
        //
        FmjStudio main = new FmjStudio();
        main.run(args);
  }
 
}
TOP

Related Classes of net.sf.fmj.ui.FmjStudio

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.