/*
* @(#)MediaPlayerMediaLocationEditor.java 1.7 02/08/21
*
* Copyright (c) 1996-2002 Sun Microsystems, Inc. All rights reserved.
*/
// Last Updated: 02/26/99
// Notes: N/A
package javax.media.bean.playerbean;
import java.beans.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
/**
* Special case property editor for the media location property
* of a <CODE>MediaPlayer</CODE> bean.
*
* Invoked by Java Beans application builders.
*
* @version 1.0
*/
public class MediaPlayerMediaLocationEditor extends Panel
implements java.beans.PropertyEditor,
ActionListener,
ItemListener
{
PropertyChangeSupport support = new PropertyChangeSupport(this);;
String mediaLocationString;
TextField mediaLocationTextField= new TextField(mediaLocationString, 60);
private String browseString = "...";
private Button browseB = new Button(browseString);
// private String readyString = MediaPlayerResource.getString("READY");
// private Button readyB = new Button(readyString);
private Choice protocolChooser = new Choice();
private String httpString = MediaPlayerResource.getString("HTTP");
private String httpsString = MediaPlayerResource.getString("HTTPS");
private String fileString = MediaPlayerResource.getString("FILE");
private String rtpString = MediaPlayerResource.getString("RTP");
private String ftpString = MediaPlayerResource.getString("FTP");
private String codeString = MediaPlayerResource.getString("CODEBASE");
private String chooseOneString = MediaPlayerResource.getString("CHOOSE_ONE");
private boolean isFile = false;
Panel editPanel = new Panel();
/**
* Default constructor that adds the <CODE>KeyListener</CODE> for the
* visual text field.
*/
public MediaPlayerMediaLocationEditor()
{
setLayout(new BorderLayout());
editPanel.setLayout(new BorderLayout());
editPanel.add("Center", mediaLocationTextField);
editPanel.add("East", browseB);
browseB.addActionListener(this);
browseB.setEnabled(false);
protocolChooser.add(chooseOneString);
protocolChooser.add(fileString);
protocolChooser.add(httpString);
protocolChooser.add(httpsString);
protocolChooser.add(rtpString);
protocolChooser.add(ftpString);
protocolChooser.add(codeString);
protocolChooser.addItemListener(this);
editPanel.add("West", protocolChooser);
//Ready button originally was designed for WebRunner's BeanTool.
//For other IDEs, when OK button is clicked, the event will be
//generated, and MediaLocation value will get set. This is true
//for Symantec Cafe, VisualAge for Java, and JBuilder. For other
//IDEs, if event doesn't get generated, it is user's responsibility
//to make sure the value will be set when OK button is clicked.
// editPanel.add("South",readyB);
// readyB.addActionListener(this);
// readyB.setEnabled(false);
add("Center", editPanel);
KeyListener l = new KeyAdapter()
{
/**
* The actions to take when a key is typed in the
* medial location property.
*
* @param keyEvent The <CODE>KeyEvent</CODE> for the key just typed.
*
*/
public void keyReleased(KeyEvent keyEvent)
{
mediaLocationString = mediaLocationTextField.getText();
/*
if (mediaLocationString.length()==0)
readyB.setEnabled(false);
else
readyB.setEnabled(true);
*/
}
};
mediaLocationTextField.addKeyListener(l);
mediaLocationTextField.setEnabled(false);
}
/**
*
* Generates a code fragment that can be used
* to initialize a variable with the current mediaLocation
* property value.
*
* @return The initialization <CODE>String</CODE>.
*
*/
public String getJavaInitializationString()
{
String initString;
if (mediaLocationString.length() == 0)
{
initString = "new java.lang.String(\"\\\")";
}
else
{
initString = "new java.lang.String(\""
+ mediaLocationString
+ "\")";
}
return initString;
}
/**
*
* Gets the preferred dimensions for this media location editor.
*
* @return A <CODE>Dimension</CODE> that contains the preferred dimensions.
*/
public Dimension getPreferredSize()
{
return new Dimension(400, 100);
}
/**
*
* Sets the value for the media location property.
*
* @param o The new media location property object.
*
*/
public void setValue(Object o)
{
setAsText(o.toString());
}
/**
*
* Gets the value from the media location property.
*
* @return The media location property value.
*/
public Object getValue() {
return getAsText();
}
/**
* Sets the property value to the specified string.
*
* @param s The String to set the media location property value to.
*/
public void setAsText(String s)
{
mediaLocationString = s;
}
/**
*
* Gets the mediaLocation property.
*
* @return The value of the media location property as a <CODE>String</CODE>.
*
*/
public String getAsText()
{
return this.mediaLocationString;
}
/**
*
* Determines whether or not this class honors
* the <CODE>paintValue</CODE> method. Used by bean builders.
*
* @return <CODE>true</CODE> if it honors the <CODE>paintValue</CODE> method,
* <CODE>false</CODE> if it does not.
*/
public boolean isPaintable()
{
return true;
}
/**
*
* Paints the media location's editor box.
*
* @param g The graphics context in which to paint the editor box.
* @param area The area in which the editor box should be rendered.
*
*/
public void paintValue(Graphics g, Rectangle area)
{
Color c = g.getColor();
g.setColor(Color.black);
g.drawString(mediaLocationString,
area.x, area.y + area.height - 6);
g.setColor(c);
}
/**
*
* Determines whether or not this is a tagged value.
* @return null to tell the bean builder that this
* is not a tagged value property.
*
*/
public String[] getTags()
{
return null;
}
/**
*
* Gets the panel that supports the media location
* editing.
* @param The panel as a <CODE>Component</CODE>.
*
*/
public Component getCustomEditor()
{
return editPanel;
}
/**
* Determines whether or not this property editor supports a custom editor.
* @return true since the media location property
* can provide a custom editor.
*
*/
public boolean supportsCustomEditor()
{
return true;
}
/**
*
* Registers a listener for the <CODE>PropertyChangeEvent</CODE> .
*
* @param listener An object to be invoked when a <CODE>PropertyChangeEvent</CODE>
* is fired.
*
*/
public void addPropertyChangeListener(PropertyChangeListener listener)
{
support.addPropertyChangeListener(listener);
}
/**
*
* Removes the specified listener from the property change listener list.
*
* @param listener The <CODE>PropertyChangeListener</CODE> to be removed.
*
*/
public void removePropertyChangeListener(PropertyChangeListener listener)
{
support.removePropertyChangeListener(listener);
}
/**
*
* Determines which controls have had the specified
* action performed and acts accordingly.
*
* @param evt The <CODE>ActionEvent</CODE>.
*
*/
public void actionPerformed(ActionEvent evt)
{
String command = evt.getActionCommand();
String filename;
if (command.equals(browseString))
{
if (isFile==true)
{
FileDialog fd = new FileDialog(getFrame(editPanel),
MediaPlayerResource.getString("SET_MEDIA_LOCATION"),
FileDialog.LOAD);
fd.setDirectory("c:\\");
fd.setTitle(MediaPlayerResource.getString("SET_MEDIA_LOCATION"));
fd.show();
filename = fd.getFile();
if (filename != null && fd.getDirectory() != null)
{
filename = fd.getDirectory() + filename;
}
if (filename != null) {
filename = filename.replace('\\', '/');
String tmp = "file:///"+filename;
mediaLocationTextField.setText(tmp);
setAsText(tmp);
// readyB.setEnabled(true);
}
}
else
{
MediaPlayerRTPDialog rtpDlg= new MediaPlayerRTPDialog(getFrame(editPanel));
rtpDlg.show();
filename = rtpDlg.getRTPAdr();
if (filename !=null)
{
String tmp = "rtp://"+filename;
mediaLocationTextField.setText(tmp);
setAsText(tmp);
}
}
}
//The code below is to handle Ready button
/*
else if (command.equals(readyString))
{
String tmp = mediaLocationString;
String choiceSelection = protocolChooser.getSelectedItem();
setAsText(tmp);
support.firePropertyChange("mediaLocation",
null,
mediaLocationString);
}
*/
}
/**
*
* Determines which protocol is selected and acts accordingly.
*
* @param evt The <CODE>ItemEvent</CODE>.
*
*/
public void itemStateChanged(ItemEvent evt)
{
String item = (String)evt.getItem();
if (!item.equals(chooseOneString) )
{
mediaLocationTextField.setEnabled(true);
if (item.equals(fileString))
{
browseB.setEnabled(true);
isFile=true;
}
else if (item.equals(rtpString))
{
browseB.setEnabled(true);
}
else
{
browseB.setEnabled(false);
}
if (!item.equals(codeString))
{
mediaLocationTextField.setText(item);
}
else
{
mediaLocationTextField.setText("");
}
// readyB.setEnabled(false);
mediaLocationString = mediaLocationTextField.getText();
}
else
{
mediaLocationTextField.setEnabled(false);
browseB.setEnabled(false);
// readyB.setEnabled(false);
}
}
/**
* Sets up a <CODE>Frame</CODE> at the position where the specified
* <CODE><CODE>Component</CODE></CODE> located.
*
* @param comp The <CODE>Component</CODE> where the <CODE>Frame</CODE> will be located.
*
*/
Frame getFrame(Component comp)
{
Point p = comp.getLocationOnScreen();
Frame f = new Frame();
f.setLocation(p);
return f;
}
}
|