/*
* BackRendererEditorPane.java
*
* Created on 29 ������ 2006 �., 23:33
*
*/
package datechooser.beans.editor.backrender;
import static datechooser.beans.locale.LocaleUtils.getEditorLocaleString;
import datechooser.view.BackRenderer;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.*;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import javax.swing.*;
/**
* Visual panel to set background picture.<br>
* ���������� ������ ��������� ����������� �� ���.
* @author Androsov Vadim
* @since 1.0
*/
public class BackRendererEditorPane extends JPanel implements PropertyChangeListener {
private PropertyEditorSupport editor = null;
private JComboBox selStyle;
private Preview previewPane;
private JFileChooser fileChoose;
public BackRendererEditorPane(PropertyEditorSupport editor) {
fileChoose = new JFileChooser();
setEditor(editor);
generateInterface();
updateInterface();
}
public void setEditor(PropertyEditorSupport editor) {
if (this.editor != null) {
this.editor.removePropertyChangeListener(this);
}
this.editor = editor;
editor.addPropertyChangeListener(this);
}
private void updateInterface() {
BackRenderer renderer = getEditorValue();
if (renderer == null) return;
selStyle.setSelectedIndex(renderer.getStyle());
previewPane.repaint();
}
private void generateInterface() {
selStyle = createStyleChooser();
previewPane = new Preview();
JButton bFile = createFileButton();
previewPane.setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createEmptyBorder(5, 5, 5, 5),
BorderFactory.createEtchedBorder()));
setLayout(new BorderLayout());
JPanel controlPane = new JPanel(new GridLayout(1, 2, 2, 2));
JPanel selStylePane = new JPanel(new FlowLayout(FlowLayout.CENTER));
JPanel buttonPane = new JPanel(new FlowLayout(FlowLayout.CENTER));
buttonPane.add(bFile);
selStylePane.add(selStyle);
controlPane.add(selStylePane);
controlPane.add(buttonPane);
add(controlPane, BorderLayout.NORTH);
add(previewPane, BorderLayout.CENTER);
revalidate();
}
private JComboBox createStyleChooser() {
JComboBox combo = new JComboBox(new String[] {
getEditorLocaleString("BackImageCenter"),
getEditorLocaleString("BackImageFill"),
getEditorLocaleString("BackImageTile")
});
combo.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
setStyle(selStyle.getSelectedIndex());
}
});
return combo;
}
private JButton createFileButton() {
JButton button = new JButton(getEditorLocaleString("Load"));
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int result = fileChoose.showOpenDialog(null);
if (result != JFileChooser.APPROVE_OPTION) return;
try {
setURL(fileChoose.getSelectedFile().toURL());
} catch (MalformedURLException ex) {
ex.printStackTrace();
}
}
});
return button;
}
private void setStyle(int style) {
BackRenderer value = getEditorValue();
if ((value == null) || (style == value.getStyle())) return;
editor.setValue(new BackRenderer(style,
value != null ? value.getUrl() : null,
getEditorValue().getImage()));
}
private void setURL(URL url) {
BackRenderer value = getEditorValue();
if ((value != null) && (url.equals(value.getUrl()))) return;
editor.setValue(new BackRenderer(selStyle.getSelectedIndex(), url));
}
public void propertyChange(PropertyChangeEvent evt) {
updateInterface();
}
private BackRenderer getEditorValue() {
return (BackRenderer) editor.getValue();
}
private class Preview extends JPanel {
protected void paintComponent(Graphics g) {
super.paintComponent(g);
BackRenderer renderer = getEditorValue();
if (renderer == null) return;
renderer.render((Graphics2D) g, getBounds());
}
public Dimension getPreferredSize() {
return new Dimension(200, 200);
}
}
}