package es.icarto.gvsig.navtableforms.gui.images;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.File;
import javax.swing.ImageIcon;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JTextField;
import com.jeta.forms.components.image.ImageComponent;
import es.icarto.gvsig.commons.utils.ImageUtils;
import es.icarto.gvsig.navtableforms.IValidatableForm;
public class WidgetBasedImageHandler implements ImageHandler, KeyListener,
ActionListener {
private final String imgComp;
private final JComponent widget;
private final IValidatableForm form;
private final String folderPath;
private final ImageComponent image;
private String extension = ".png";
private ImageIcon emptyImage;
public WidgetBasedImageHandler(String imgComp, String widgetName,
String folderPath, IValidatableForm form) {
this.imgComp = imgComp;
this.folderPath = folderPath.endsWith(File.separator) ? folderPath
: folderPath + File.separator;
this.form = form;
this.image = (ImageComponent) form.getFormPanel().getComponentByName(
imgComp);
widget = this.form.getWidgets().get(widgetName);
}
public void setEmptyImage(String imgPath) {
emptyImage = ImageUtils.getScaled(imgPath, new Dimension(105, 60));
}
public void setExtension(String ext) {
extension = ext.startsWith(".") ? ext : "." + ext;
}
@Override
public void setListeners() {
if (widget instanceof JTextField) {
((JTextField) widget).addKeyListener(this);
} else if (widget instanceof JComboBox) {
((JComboBox) widget).addActionListener(this);
}
}
@Override
/**
* The name of the components this handler is associated on, and commonly the name of the handler itself used in maps
*/
public String getName() {
return imgComp;
}
@Override
public void removeListeners() {
if (widget instanceof JTextField) {
((JTextField) widget).removeKeyListener(this);
} else if (widget instanceof JComboBox) {
((JComboBox) widget).removeActionListener(this);
}
}
@Override
public void fillValues() {
String value = "";
if (widget instanceof JTextField) {
value = ((JTextField) widget).getText();
} else if (widget instanceof JComboBox) {
Object tmpValue = ((JComboBox) widget).getSelectedItem();
value = (tmpValue != null) ? tmpValue.toString() : "";
}
String imgPath = folderPath + value.trim() + extension;
// System.out.println(image.getBounds());
// ImageIcon icon = ImageUtils.getScaled(imgPath,
// image.getBounds().getSize());
ImageIcon icon = ImageUtils.getScaled(imgPath, new Dimension(105, 60));
if (icon == null) {
icon = emptyImage;
}
image.setIcon(icon);
image.repaint();
}
@Override
public void fillEmptyValues() {
fillValues();
}
private void delegate() {
if (!form.isFillingValues()) {
form.validateForm();
fillValues();
}
}
@Override
public void actionPerformed(ActionEvent e) {
delegate();
}
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
delegate();
}
}