📄 entrypanel.java
字号:
package net.sf.fmj.ui.registry;import java.awt.BorderLayout;import java.awt.Dimension;import java.awt.GridBagConstraints;import java.awt.GridBagLayout;import java.awt.GridLayout;import java.awt.Insets;import java.io.IOException;import java.util.Collections;import java.util.HashSet;import java.util.List;import java.util.Set;import java.util.Vector;import java.util.logging.Level;import java.util.logging.Logger;import javax.media.CaptureDeviceInfo;import javax.media.CaptureDeviceManager;import javax.media.Format;import javax.media.PackageManager;import javax.media.PlugInManager;import javax.swing.DefaultComboBoxModel;import javax.swing.JButton;import javax.swing.JLabel;import javax.swing.JList;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTextField;import javax.swing.ListSelectionModel;import javax.swing.event.ListSelectionEvent;import javax.swing.event.ListSelectionListener;import net.sf.fmj.media.MimeManager;import net.sf.fmj.utility.LoggerSingleton;/** * Can be used for adding entries to: * - plugins, demuxes, codecs, effects, renderers, muxes * - content package prefixes * - protocol package prefixes * * TODO send details of selected item to listeners, e.g. PlugInInfo for plugins. * * @author Warren Bloomer * @author Ken Larson * */public class EntryPanel extends JPanel { private static final Logger logger = LoggerSingleton.logger; public static final int TYPE_DEMUX = PlugInManager.DEMULTIPLEXER; public static final int TYPE_CODEC = PlugInManager.CODEC; public static final int TYPE_EFFECT = PlugInManager.EFFECT; public static final int TYPE_RENDERER = PlugInManager.RENDERER; public static final int TYPE_MUX = PlugInManager.MULTIPLEXER; public static final int TYPE_CONTENT = 10001; public static final int TYPE_PROTOCOL = 10002; public static final int TYPE_CAPTURE_DEVICE = 10003; public static final int TYPE_MIME_TYPES = 10004; private final int type; private JPanel actionPanel = null; private JButton addButton = null; private JButton moveUpButton = null; private JButton moveDownButton = null; private JButton removeButton = null; private JButton commitButton = null; private JPanel entryPanel = null; private JPanel entryTopPanel = null; private JLabel entryLabel = null; private JTextField entryTextField = null; private JTextField entryTextField2 = null; // only used for MIME types private JList entryList = null; private DefaultComboBoxModel entryListModel = null; // @jve:decl-index=0:visual-constraint="583,242" private JScrollPane listScrollPane = null; private DetailsListener detailsListener; /** * This method initializes * */ public EntryPanel(int type) { super(); this.type = type; initialize(); } public void setTitle(String title) { getEntryLabel().setText(title); } private void addEntry(String entry, String value2) { //logger.info("Adding entry" + entry); switch(type) { case TYPE_DEMUX: case TYPE_CODEC: case TYPE_EFFECT: case TYPE_RENDERER: case TYPE_MUX: // TODO get in and out formats Format[] in = null; Format[] out = null; boolean added = PlugInManager.addPlugIn(entry, in, out, type); if (added) { getEntryListModel().addElement(entry); } break; case TYPE_CONTENT: // TODO check if package is valid Vector contentList = PackageManager.getContentPrefixList(); if (!contentList.contains(entry)) { contentList.add(entry); PackageManager.setContentPrefixList(contentList); getEntryListModel().addElement(entry); } break; case TYPE_PROTOCOL: // TODO check if package is valid Vector protocolList = PackageManager.getProtocolPrefixList(); if (!protocolList.contains(entry)) { protocolList.add(entry); PackageManager.setContentPrefixList(protocolList); getEntryListModel().addElement(entry); } break; case TYPE_CAPTURE_DEVICE: // TODO break; case TYPE_MIME_TYPES: final List existingExtensions = MimeManager.getExtensions(entry); if (!existingExtensions.contains(value2)) { MimeManager.addMimeType(value2, entry); getEntryListModel().addElement(entry); } break; } } private void removeEntry(String entry) { //logger.info("Removing entry" + entry); switch(type) { case TYPE_DEMUX: case TYPE_CODEC: case TYPE_EFFECT: case TYPE_RENDERER: case TYPE_MUX: // TODO get in and out formats Format[] in = null; Format[] out = null; boolean removed = PlugInManager.removePlugIn(entry, type); if (removed) { getEntryListModel().removeElement(entry); } break; case TYPE_CONTENT: Vector contentList = PackageManager.getContentPrefixList(); if (contentList.remove(entry)) { PackageManager.setContentPrefixList(contentList); getEntryListModel().removeElement(entry); } break; case TYPE_PROTOCOL: Vector protocolList = PackageManager.getProtocolPrefixList(); if (protocolList.remove(entry)) { PackageManager.setProtocolPrefixList(protocolList); getEntryListModel().removeElement(entry); } break; case TYPE_CAPTURE_DEVICE: // TODO: break; case TYPE_MIME_TYPES: // TODO: warn if attempt to remove "default" extensions. // this code will not actually remove default extensions, but no warning is given. final List extensions = MimeManager.getExtensions(entry); int numRemoved = 0; if (extensions.size() > 0) { for (int i = 0; i < extensions.size(); ++i) { if (MimeManager.removeMimeType((String) extensions.get(i))) ++numRemoved; } } if (numRemoved > 0) { getEntryListModel().removeElement(entry); } break; } } private void commit() { try { switch(type) { case TYPE_DEMUX: case TYPE_CODEC: case TYPE_EFFECT: case TYPE_RENDERER: case TYPE_MUX: // read list of values from JList, set, and commit Vector plugins = new Vector(); for (int i=0; i<getEntryListModel().getSize(); i++) { Object value = getEntryListModel().getElementAt(i); plugins.add(value); } PlugInManager.setPlugInList(plugins, type); PlugInManager.commit(); break; case TYPE_CONTENT: // read list of values from JList, set, and commit Vector contentPrefixes = new Vector(); for (int i=0; i<getEntryListModel().getSize(); i++) { Object value = getEntryListModel().getElementAt(i); contentPrefixes.add(value); } PackageManager.setContentPrefixList(contentPrefixes); PackageManager.commitContentPrefixList(); break; case TYPE_PROTOCOL: // read list of values from JList, set, and commit Vector protocolPrefixes = new Vector(); for (int i=0; i<getEntryListModel().getSize(); i++) { Object value = getEntryListModel().getElementAt(i); protocolPrefixes.add(value); } PackageManager.setProtocolPrefixList(protocolPrefixes); PackageManager.commitProtocolPrefixList(); break; case TYPE_CAPTURE_DEVICE: // TODO: capture device manager list is being updated already // by the auto-detect, so we just commit here. CaptureDeviceManager.commit(); break; case TYPE_MIME_TYPES: MimeManager.commit(); break; } } catch (IOException e) { logger.log(Level.WARNING, "" + e, e); } } void load() { Vector list = null; getEntryListModel().removeAllElements(); switch(type) { case TYPE_DEMUX: list = PlugInManager.getPlugInList(null, null, PlugInManager.DEMULTIPLEXER); setTitle("Demultiplexer"); break; case TYPE_CODEC: list = PlugInManager.getPlugInList(null, null, PlugInManager.CODEC); setTitle("Codec"); break; case TYPE_EFFECT: list = PlugInManager.getPlugInList(null, null, PlugInManager.EFFECT); setTitle("Effect"); break; case TYPE_RENDERER: list = PlugInManager.getPlugInList(null, null, PlugInManager.RENDERER); setTitle("Renderer"); break; case TYPE_MUX: list = PlugInManager.getPlugInList(null, null, PlugInManager.MULTIPLEXER); setTitle("Multiplexer"); break; case TYPE_CONTENT: list = PackageManager.getContentPrefixList(); setTitle("Content Prefix List"); break; case TYPE_PROTOCOL: list = PackageManager.getProtocolPrefixList(); setTitle("Protocol Prefix List"); break; case TYPE_CAPTURE_DEVICE: list = new Vector(); Vector captureDeviceList = CaptureDeviceManager.getDeviceList(null); for (int i = 0; i < captureDeviceList.size(); ++i) { final CaptureDeviceInfo info = (CaptureDeviceInfo) captureDeviceList.get(i); list.add(info.getLocator().toString()); } setTitle("Capture Devices"); break; case TYPE_MIME_TYPES: list = new Vector(); final Set s = new HashSet(); // to remove dups s.addAll(MimeManager.getMimeTable().values()); list.addAll(s); Collections.sort(list); setTitle("MIME Types"); break; default: list = new Vector(); } for (int i=0; i<list.size(); i++) { getEntryListModel().addElement(list.get(i)); } } private void updateDetailsPane(int selectedIndex, Object selectedValue) { if (detailsListener == null) return; if (selectedValue == null) { detailsListener.onDetails(""); return; } final StringBuffer b = new StringBuffer(); switch(type) { // all plug ins: case TYPE_DEMUX: case TYPE_CODEC: case TYPE_EFFECT: case TYPE_RENDERER: case TYPE_MUX: final String plugIn = (String) selectedValue; final Format[] inputFormats = PlugInManager.getSupportedInputFormats(plugIn, type); final Format[] outputFormats = PlugInManager.getSupportedOutputFormats(plugIn, type); b.append("Input Formats ---->\n\n"); if (inputFormats != null) { for (int i = 0; i < inputFormats.length; ++i)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -