/* Copyright (C) 2001, 2007 United States Government as represented by
the Administrator of the National Aeronautics and Space Administration.
All Rights Reserved.
*/
package gov.nasa.worldwind.layers.rpf.wizard;
import gov.nasa.worldwind.util.Logging;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
/**
* @author dcollins
* @version $Id: FileChooserPanel.java 4565 2008-02-28 17:53:41Z dcollins $
*/
public class FileChooserPanel extends JPanel
{
private JLabel title;
private JLabel description;
private JFormattedTextField fileField;
private JButton chooseButton;
private JFileChooser fileChooser;
public FileChooserPanel()
{
makeComponents();
layoutComponents();
}
public String getTitle()
{
return this.title.getText();
}
public void setTitle(String title)
{
this.title.setText(title);
}
public String getDescription()
{
return this.description.getText();
}
public void setDescription(String description)
{
this.description.setText(description);
}
public JFileChooser getFileChooser()
{
return this.fileChooser;
}
public void setFileChooser(JFileChooser fileChooser)
{
if (fileChooser == null)
{
String message = "JFileChooser is null";
Logging.logger().severe(message);
throw new IllegalArgumentException(message);
}
this.fileChooser = fileChooser;
}
public File getSelectedFile()
{
return getValueAsFile(this.fileField.getValue());
}
private File getValueAsFile(Object value)
{
if (value != null)
{
if (value instanceof File)
return (File) value;
else
return new File(value.toString());
}
return null;
}
public void promptForNewSelection()
{
onChooseClicked();
}
private void onChooseClicked()
{
int returnCode = this.fileChooser.showDialog(this, "Choose");
if (returnCode == JFileChooser.APPROVE_OPTION && this.fileChooser.getSelectedFile() != null)
{
this.fileField.setValue(this.fileChooser.getSelectedFile());
}
}
private void onFileFieldChanged(Object newValue)
{
File newFile = getValueAsFile(newValue);
firePropertyChange("selectedFile", null, newFile);
}
private void makeComponents()
{
this.title = new JLabel(" ");
this.title.setBackground(Color.gray);
this.title.setOpaque(true);
this.description = new JLabel();
this.fileField = new JFormattedTextField("Click 'Choose...'");
Font font = this.fileField.getFont();
if (!font.isBold())
font = new Font(font.getName(), Font.BOLD | font.getStyle(), font.getSize());
this.fileField.setFont(font);
// Override input-path maximum size to avoid any vertical stretching by the layout manager.
Dimension preferred = this.fileField.getPreferredSize();
Dimension max = this.fileField.getMaximumSize();
this.fileField.setMaximumSize(new Dimension(max.width, preferred.height));
this.fileField.addPropertyChangeListener("value", new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent event) {
if (event != null) {
onFileFieldChanged(event.getNewValue());
}
}
});
this.chooseButton = new JButton("Choose...");
this.chooseButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
onChooseClicked();
}
});
this.fileChooser = new JFileChooser();
this.fileChooser.setDialogTitle("Choose Folder to Search");
this.fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
this.fileChooser.setMultiSelectionEnabled(false);
}
private void layoutComponents()
{
setLayout(new BorderLayout());
JPanel p = new JPanel();
p.setLayout(new BorderLayout());
p.setBackground(this.title.getBackground());
this.title.setBorder(new EmptyBorder(10, 10, 10, 10));
p.add(this.title, BorderLayout.WEST);
JSeparator separator = new JSeparator();
p.add(separator, BorderLayout.SOUTH);
add(p, BorderLayout.NORTH);
Box b = Box.createVerticalBox();
b.setBorder(new EmptyBorder(10, 10, 10, 10));
this.description.setAlignmentX(Component.LEFT_ALIGNMENT);
b.add(this.description);
b.add(Box.createVerticalStrut(10));
Box b2 = Box.createHorizontalBox();
b2.setAlignmentX(Component.LEFT_ALIGNMENT);
b2.add(this.fileField);
b2.add(Box.createHorizontalStrut(10));
b2.add(this.chooseButton);
b.add(b2);
b.add(Box.createVerticalStrut(Short.MAX_VALUE));
add(b, BorderLayout.CENTER);
}
}