/*
* #######################################################
*
* 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.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.BorderFactory;
import javax.swing.JCheckBox;
import javax.swing.JPanel;
import javax.swing.border.Border;
import ale.model.skin.SkinConstants.Position;
import ale.view.gui.GUIConstants;
import ale.view.gui.util.VerticalLayout;
public abstract class PositionField extends Field {
private static final long serialVersionUID = 1L;
private static final int FIELDHEIGHT = 95;
private JCheckBox[] checkboxes;
public PositionField(Position initialValue, boolean[] active, Color bg, String fieldTitle) {
if ((active == null) || (active.length != 9)) {
throw new IllegalArgumentException();
}
if (bg == null) {
bg = Color.WHITE;
}
if (fieldTitle == null) {
fieldTitle = "";
}
create(initialValue, active, bg, fieldTitle);
}
public abstract void topleftOnPressed();
public abstract void topOnPressed();
public abstract void toprightOnPressed();
public abstract void centerleftOnPressed();
public abstract void centerOnPressed();
public abstract void centerrightOnPressed();
public abstract void bottomleftOnPressed();
public abstract void bottomOnPressed();
public abstract void bottomrightOnPressed();
public void setSelectionOnPosition(Position pos) {
for (JCheckBox checkboxe : this.checkboxes) {
checkboxe.setSelected(false);
}
switch (pos) {
case TOPLEFT:
this.checkboxes[0].setSelected(true);
break;
case TOP:
this.checkboxes[1].setSelected(true);
break;
case TOPRIGHT:
this.checkboxes[2].setSelected(true);
break;
case LEFT:
this.checkboxes[3].setSelected(true);
break;
case CENTER:
this.checkboxes[4].setSelected(true);
break;
case RIGHT:
this.checkboxes[5].setSelected(true);
break;
case BOTTOMLEFT:
this.checkboxes[6].setSelected(true);
break;
case BOTTOM:
this.checkboxes[7].setSelected(true);
break;
case BOTTOMRIGHT:
this.checkboxes[8].setSelected(true);
break;
default:
}
}
/*
*
*/
private void create(Position initialValue, boolean[] active, Color bg, String fieldTitle) {
setBackground(bg);
setPreferredSize(new Dimension(GUIConstants.DEFAULT_FIELD_WIDTH, FIELDHEIGHT));
setLayout(new VerticalLayout(0, VerticalLayout.CENTER));
setBorder(BorderFactory.createTitledBorder(fieldTitle));
this.checkboxes = new JCheckBox[9];
Border cb = BorderFactory.createEmptyBorder(0, 3, 0, 3);
for (int i = 0; i < this.checkboxes.length; i++) {
this.checkboxes[i] = new JCheckBox();
this.checkboxes[i].setBorder(cb);
this.checkboxes[i].setFocusable(false);
this.checkboxes[i].setBackground(bg);
this.checkboxes[i].setEnabled(active[i]);
this.checkboxes[i].setToolTipText(Field.strPosTooltip[i]);
}
if (active[0]) {
this.checkboxes[0].addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
clear(0);
PositionField.this.checkboxes[0].setSelected(false);
topleftOnPressed();
}
});
}
if (active[1]) {
this.checkboxes[1].addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
clear(1);
PositionField.this.checkboxes[1].setSelected(false);
topOnPressed();
}
});
}
if (active[2]) {
this.checkboxes[2].addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
clear(2);
PositionField.this.checkboxes[2].setSelected(false);
toprightOnPressed();
}
});
}
if (active[3]) {
this.checkboxes[3].addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
clear(3);
PositionField.this.checkboxes[3].setSelected(false);
centerleftOnPressed();
}
});
}
if (active[4]) {
this.checkboxes[4].addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
clear(4);
PositionField.this.checkboxes[4].setSelected(false);
centerOnPressed();
}
});
}
if (active[5]) {
this.checkboxes[5].addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
clear(5);
PositionField.this.checkboxes[5].setSelected(false);
centerrightOnPressed();
}
});
}
if (active[6]) {
this.checkboxes[6].addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
clear(6);
PositionField.this.checkboxes[6].setSelected(false);
bottomleftOnPressed();
}
});
}
if (active[7]) {
this.checkboxes[7].addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
clear(7);
PositionField.this.checkboxes[7].setSelected(false);
bottomOnPressed();
}
});
}
if (active[8]) {
this.checkboxes[8].addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
clear(8);
PositionField.this.checkboxes[8].setSelected(false);
bottomrightOnPressed();
}
});
}
if (initialValue != null) {
switch (initialValue) {
case BOTTOM:
this.checkboxes[7].setSelected(true);
break;
case BOTTOMLEFT:
this.checkboxes[6].setSelected(true);
break;
case BOTTOMRIGHT:
this.checkboxes[8].setSelected(true);
break;
case CENTER:
this.checkboxes[4].setSelected(true);
break;
case LEFT:
this.checkboxes[3].setSelected(true);
break;
case RIGHT:
this.checkboxes[5].setSelected(true);
break;
case TOP:
this.checkboxes[1].setSelected(true);
break;
case TOPLEFT:
this.checkboxes[0].setSelected(true);
break;
case TOPRIGHT:
this.checkboxes[2].setSelected(true);
break;
default:
break;
}
}
JPanel panelTop = new JPanel();
panelTop.setBorder(null);
panelTop.setBackground(bg);
panelTop.add(this.checkboxes[0]);
panelTop.add(this.checkboxes[1]);
panelTop.add(this.checkboxes[2]);
this.add(panelTop);
JPanel panelMiddle = new JPanel();
panelMiddle.setBorder(null);
panelMiddle.setBackground(bg);
panelMiddle.add(this.checkboxes[3]);
panelMiddle.add(this.checkboxes[4]);
panelMiddle.add(this.checkboxes[5]);
this.add(panelMiddle);
JPanel panelBottom = new JPanel();
panelBottom.setBorder(null);
panelBottom.setBackground(bg);
panelBottom.add(this.checkboxes[6]);
panelBottom.add(this.checkboxes[7]);
panelBottom.add(this.checkboxes[8]);
this.add(panelBottom);
}
private void clear(int exceptFor) {
for (int i = 0; i < this.checkboxes.length; i++) {
if (i != exceptFor) {
this.checkboxes[i].setSelected(false);
}
}
}
}