package apes.views;
import java.io.File;
import java.util.Observable;
import javax.swing.ImageIcon;
import javax.swing.JMenuItem;
import javax.swing.KeyStroke;
import apes.interfaces.LanguageObserver;
import apes.lib.Language;
import apes.models.KeyBinding;
/**
* This extends {@link javax.swing.JMenuItem JMenuItem} with locale
* functionality.
*
* @author Johan Andersson (johandy@student.chalmers.se)
*/
public class ApesMenuItem extends JMenuItem implements LanguageObserver
{
/**
* The locale tag.
*/
private String tag;
/**
* Language model.
*/
private Language language;
/**
* Key binding model.
*/
private KeyBinding keyBinding;
/**
* Creates a new <code>ApesMenuItem</code> instance.
*
* @param tag The Language tag.
*/
public ApesMenuItem(String tag)
{
this.keyBinding = KeyBinding.getInstance();
this.language = Language.getInstance();
this.tag = tag;
setText(language.get(tag));
language.addObserver(this);
// What should have been Arrays#join
String[] split = tag.split("\\.");
StringBuffer button = new StringBuffer();
int start = 2;
for(int i = start; i < split.length; i++)
{
if(i != start)
{
button.append("_");
}
button.append(split[i]);
}
// Set icon
File file = new File("images/menu/" + button + ".png");
if(file.exists())
{
ImageIcon icon = new ImageIcon(file.getAbsolutePath());
setIcon(icon);
}
}
/**
* Creates a new <code>ApesMenuItem</code> instance. The menu will then also
* be able to reach with key.
*
* @param tag The Language tag.
* @param keyStroke The keystroke as a string.
*/
public ApesMenuItem(String tag, String keyStroke)
{
this(tag);
// Set key binding.
setAccelerator(KeyStroke.getKeyStroke(keyBinding.get(keyStroke)));
}
public void update(Observable o, Object arg)
{
setText(language.get(tag));
this.updateUI();
}
}