package husacct.control.presentation.toolbar;
import husacct.ServiceProvider;
import husacct.common.enums.States;
import husacct.common.locale.ILocaleService;
import husacct.common.services.IServiceListener;
import husacct.control.task.IStateChangeListener;
import husacct.control.task.StateController;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.List;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JMenuItem;
import javax.swing.border.BevelBorder;
import javax.swing.border.Border;
import javax.swing.border.EmptyBorder;
class ToolBarItem extends JButton {
private static final long serialVersionUID = 1L;
protected Border raisedBorder;
protected Border loweredBorder;
protected Border inactiveBorder;
private ILocaleService localeService = ServiceProvider.getInstance().getLocaleService();
private StateController stateController;
private String toolTipIdentifier;
private ImageIcon icon;
private JMenuItem menuItem;
public ToolBarItem(String toolTipIdentifier, ImageIcon icon, JMenuItem menuItem, StateController stateController) {
super();
this.localeService = ServiceProvider.getInstance().getLocaleService();
this.stateController = stateController;
this.raisedBorder = new BevelBorder(BevelBorder.RAISED);
this.loweredBorder = new BevelBorder(BevelBorder.LOWERED);
this.inactiveBorder = new EmptyBorder(2, 2, 2, 2);
this.toolTipIdentifier = toolTipIdentifier;
this.icon = icon;
this.menuItem = menuItem;
setup();
addComponents();
addListeners();
setRequestFocusEnabled(false);
}
private void setup(){
setBorder(inactiveBorder);
setMargin(new Insets(1, 1, 1, 1));
setToolTipText(localeService.getTranslatedString(toolTipIdentifier));
}
private void addComponents(){
setIcon(icon);
}
private void addListeners(){
addMouseListener(new MouseAdapter() {
@Override
public void mouseReleased(MouseEvent arg0) {
setBorder(inactiveBorder);
}
@Override
public void mousePressed(MouseEvent arg0) {
setBorder(loweredBorder);
}
@Override
public void mouseExited(MouseEvent arg0) {
setBorder(inactiveBorder);
}
@Override
public void mouseEntered(MouseEvent arg0) {
setBorder(raisedBorder);
}
});
addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
menuItem.doClick();
}
});
localeService.addServiceListener(new IServiceListener() {
@Override
public void update() {
setToolTipText(localeService.getTranslatedString(toolTipIdentifier));
}
});
stateController.addStateChangeListener(new IStateChangeListener() {
@Override
public void changeState(List<States> states) {
setEnabled(menuItem.isEnabled());
}
});
}
}