package edu.cmu.minorthird.ui;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFileChooser;
import javax.swing.JTextField;
import edu.cmu.minorthird.util.gui.ComponentViewer;
import edu.cmu.minorthird.util.gui.Viewer;
/**
* A panel with a text area and a browse button
* @author ksteppe
*/
public class FileChooserViewer extends ComponentViewer implements
ActionListener{
static final long serialVersionUID=20080517L;
private JFileChooser chooser=new JFileChooser();
private JTextField textField=new JTextField(30);
private File selectedFile=null;
private boolean openFile=true;
private JButton button=new JButton("Browse");
private String defaultDir="."; //= System.getProperty("minorthird");
public FileChooserViewer(Viewer superView){
setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
setSuperView(superView);
setContent(selectedFile,true);
button.addActionListener(this);
componentFor(null);
}
public void setFileSelectionMode(int mode){
chooser.setFileSelectionMode(mode);
}
public void setFile(File f){
selectedFile=f;
textField.setText(selectedFile.getAbsolutePath());
//fire the action up the chain
sendSignal(OBJECT_SELECTED,selectedFile);
componentFor(null);
}
@Override
public JComponent componentFor(Object o){
removeAll();
log.debug("build panel");
//build up panel
setLayout(new GridLayout(0,2));
add(textField);
textField.setEditable(false);
add(button);
this.setVisible(true);
return this;
}
public void addActionListener(ActionListener l){
button.addActionListener(l);
}
@Override
public void actionPerformed(ActionEvent e){
if(selectedFile!=null)
chooser.setSelectedFile(selectedFile);
else{
chooser.setSelectedFile(new File(defaultDir));
}
int returnVal=
openFile?chooser.showOpenDialog(null):chooser.showSaveDialog(null);
if(returnVal==JFileChooser.APPROVE_OPTION)
setFile(chooser.getSelectedFile());
}
// default: recieve anything that can be converted to a component
@Override
public boolean canReceive(Object obj){
return false;
}
@Override
public void receiveContent(Object content){
return;
}
public String getDefaultDir(){
return defaultDir;
}
public void setDefaultDir(String defaultDir){
if(defaultDir!=null)
this.defaultDir=defaultDir;
}
}