package husacct.graphics.presentation.menubars;
import husacct.ServiceProvider;
import husacct.common.Resource;
import husacct.common.locale.ILocaleService;
import husacct.graphics.presentation.UserInputListener;
import java.awt.Component;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.HashMap;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import org.apache.log4j.Logger;
public class ContextMenuButton extends JPopupMenu {
private static final long serialVersionUID = -6033808567664371902L;
protected ILocaleService localeService = ServiceProvider
.getInstance()
.getLocaleService();
protected Logger logger = Logger.getLogger(GraphicsMenuBar.class);
private ArrayList<UserInputListener> listeners = new ArrayList<UserInputListener>();
private HashMap<String, String> icons;
private JMenuItem zoomModuleContext;
private JMenuItem zoomModule;
private JButton parentZoomButton;
public ContextMenuButton() {
ImageIcon icon;
icons = new HashMap<String, String>();
icons.put("zoomIn", Resource.ICON_ZOOM);
icons.put("zoomInContext", Resource.ICON_ZOOMCONTEXT);
icon = new ImageIcon(Resource.get(Resource.ICON_ZOOMCONTEXT));
zoomModuleContext = new JMenuItem(localeService.getTranslatedString("ZoomContext"), icon);
add(zoomModuleContext);
icon = new ImageIcon(Resource.get(Resource.ICON_ZOOM));
zoomModule = new JMenuItem(localeService.getTranslatedString("ZoomIn"), icon);
zoomModule.setEnabled(true);
add(zoomModule);
hookupEventHandlers();
}
public void addListener(UserInputListener listener) {
listeners.add(listener);
}
public boolean canZoomModule() {
return zoomModuleContext.isEnabled();
}
public boolean canZoomModuleContext() {
return zoomModule.isEnabled();
}
private void hookupEventHandlers() {
zoomModuleContext.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
setButtonIcon(parentZoomButton, "zoomInContext");
zoomModuleContext.setEnabled(false);
zoomModule.setEnabled(true);
for (UserInputListener listener : listeners)
listener.zoomTypeChange("context");
}
});
zoomModule.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
setButtonIcon(parentZoomButton, "zoomIn");
zoomModuleContext.setEnabled(true);
zoomModule.setEnabled(false);
for (UserInputListener listener : listeners)
listener.zoomTypeChange("zoom");
}
});
}
public void removeListener(UserInputListener listener) {
listeners.remove(listener);
}
private void setButtonIcon(JButton button, String iconKey) {
try {
ImageIcon icon = new ImageIcon(Resource.get(icons.get(iconKey)));
button.setIcon(icon);
button.setMargin(new Insets(1, 5, 1, 5));
} catch (Exception e) {
logger.warn("Could not find icon for \"" + iconKey + "\".");
}
}
@Override
public void show(Component invoker, int x, int y) {
super.show(invoker, x, y);
parentZoomButton = (JButton) invoker;
}
protected void triggerHideModules() {
for (UserInputListener l : listeners)
l.moduleHide();
}
protected void triggerRestoreModules() {
for (UserInputListener l : listeners)
l.moduleRestoreHiddenModules();
}
protected void triggerZoomInContext() {
for (UserInputListener l : listeners)
l.zoomIn();
}
}