/*
* File : Compass.java
* Created : 04-nov-2002 09:36
* By : fbusquets
*
* JClic - Authoring and playing system for educational activities
*
* Copyright (C) 2000 - 2005 Francesc Busquets & Departament
* d'Educacio de la Generalitat de Catalunya
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details (see the LICENSE file).
*/
package edu.xtec.jclic.beans;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
import javax.swing.JToggleButton;
/**
*
* @author Francesc Busquets (fbusquets@xtec.cat)
* @version 13.08.29
*/
public class Compass extends JPanel {
public static final String PROP_DIRECTION = "direction";
public static final String[] BT_NAMES={"nw", "n", "ne", "w", "c", "e", "sw", "s", "se"};
public static final java.awt.Dimension BT_DIMENSION=new java.awt.Dimension(16, 16);
private JToggleButton[] buttons;
private int direction;
/** Creates new Compass */
public Compass() {
super(new java.awt.GridLayout(3, 3));
setOpaque(false);
direction=-1;
ActionListener lst=new ActionListener(){
public void actionPerformed(ActionEvent ev){
String c=ev.getActionCommand();
for(int i=0; i<9; i++){
if(BT_NAMES[i].equals(c)){
setDirection(i);
break;
}
}
}
};
ButtonGroup bg=new ButtonGroup();
buttons=new JToggleButton[9];
for(int i=0; i<9; i++){
JToggleButton btn=new JToggleButton(new ImageIcon(getClass().getResource("/edu/xtec/resources/icons/"+BT_NAMES[i]+".gif")));
btn.setPreferredSize(BT_DIMENSION);
bg.add(btn);
btn.setActionCommand(BT_NAMES[i]);
btn.addActionListener(lst);
btn.setFocusPainted(false);
add(btn);
buttons[i]=btn;
}
}
public int getDirection() {
return direction;
}
public void setDirection(int value) {
int oldValue = direction;
direction = value;
firePropertyChange(PROP_DIRECTION, oldValue, direction);
if(value>=0){
if(buttons[value]!=null && !buttons[value].isSelected())
buttons[value].setSelected(true);
}
else
if(oldValue>=0)
buttons[oldValue].setSelected(false);
}
public int[] getDoubleDirection(){
int[] result=new int[2];
int v=(direction<0 ? 4 : direction);
result[0]=v%3;
result[1]=v/3;
return result;
}
public void setDoubleDirection(int[] value){
if(value==null || value.length!=2 || value[0]<0 || value[1]<0)
setDirection(-1);
else
setDirection(3*value[1]+value[0]);
}
}