/*
* #######################################################
*
* Copyright (c) 2013, A. Weinberger. All rights reserved.
* --------------------------------------------------------
*/
package ale.view.gui.editor.fields;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import ale.view.gui.GUIConstants;
import ale.view.gui.util.VerticalLayout;
public abstract class SizeField extends Field {
private static final long serialVersionUID = 1L;
private int numberLength;
private JTextField width;
private JTextField height;
private static final int FIELDHEIGHT = 88;
public SizeField(int[] initialValue, int maxInputLength, Color bg, String fieldTitle, boolean showResetBtn) {
if ((initialValue == null) || (initialValue.length != 2)) {
throw new IllegalArgumentException();
}
this.numberLength = maxInputLength;
if (bg == null) {
bg = Color.WHITE;
}
if (fieldTitle == null) {
fieldTitle = "";
}
create(initialValue, bg, fieldTitle, showResetBtn);
}
public abstract void widthOnKeyReleased(String input);
public abstract void heightOnKeyReleased(String input);
public abstract void resetOnClick();
public void update(int w, int h) {
this.width.setText(w + "");
this.height.setText(h + "");
}
public void updateWidthfieldColor(Color color) {
this.width.setForeground(color);
}
public void updateHeightfieldColor(Color color) {
this.height.setForeground(color);
}
private void create(int[] initialValue, Color bg, String fieldTitle, boolean showResetBtn) {
setPreferredSize(new Dimension(GUIConstants.DEFAULT_FIELD_WIDTH, FIELDHEIGHT));
setBackground(bg);
setBorder(BorderFactory.createTitledBorder(fieldTitle));
setLayout(new VerticalLayout(5, VerticalLayout.CENTER));
JPanel panel = new JPanel();
panel.setBackground(bg);
this.add(panel);
this.width = new JTextField();
this.width.setColumns(this.numberLength);
this.width.setToolTipText(Field.strWidthTooltip);
this.width.setText(initialValue[0] + "");
panel.add(this.width);
JLabel x = new JLabel("x");
panel.add(x);
this.height = new JTextField();
this.height.setColumns(this.numberLength);
this.height.setToolTipText(Field.strHeightTooltip);
this.height.setText(initialValue[1] + "");
panel.add(this.height);
this.width.addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(KeyEvent e) {
if (controlSizeInput(SizeField.this.width) && controlSizeInputLength(SizeField.this.width, SizeField.this.numberLength)) {
SizeField.this.width.setForeground(Color.BLACK);
widthOnKeyReleased(SizeField.this.width.getText());
} else {
SizeField.this.width.setForeground(Color.RED);
widthOnKeyReleased(null);
}
}
});
this.height.addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(KeyEvent e) {
if (controlSizeInput(SizeField.this.height) && controlSizeInputLength(SizeField.this.height, SizeField.this.numberLength)) {
SizeField.this.height.setForeground(Color.BLACK);
heightOnKeyReleased(SizeField.this.height.getText());
} else {
SizeField.this.height.setForeground(Color.RED);
heightOnKeyReleased(null);
}
}
});
JPanel panel2 = new JPanel();
panel2.setBackground(bg);
this.add(panel2);
JButton resetBtn = new JButton(Field.strReset);
resetBtn.setEnabled(showResetBtn);
resetBtn.setBackground(bg);
panel2.add(resetBtn);
resetBtn.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
resetOnClick();
}
});
}
}