package husacct.graphics.presentation.menubars;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.ImageIcon;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import husacct.ServiceProvider;
import husacct.common.Resource;
import husacct.common.locale.ILocaleService;
import husacct.graphics.presentation.UserInputListener;
public class ContextMenu extends JPopupMenu {
private static final long serialVersionUID = -6033808567664371902L;
protected ILocaleService localeService = ServiceProvider.getInstance().getLocaleService();
private ArrayList<UserInputListener> listeners = new ArrayList<UserInputListener>();
private JMenuItem zoomIn;
private JMenuItem zoomOut;
private JMenuItem hide;
private JMenuItem restore;
private boolean hasSelection = false;
private boolean hasHiddenFigures = false;
private boolean canZoomout = false;
public ContextMenu() {
ImageIcon icon;
icon = new ImageIcon(Resource.get(Resource.ICON_ZOOM));
zoomIn = new JMenuItem(localeService.getTranslatedString("ZoomIn"), icon);
add(zoomIn);
icon = new ImageIcon(Resource.get(Resource.ICON_BACK));
zoomOut = new JMenuItem(localeService.getTranslatedString("ZoomOut"), icon);
add(zoomOut);
addSeparator();
icon = new ImageIcon(Resource.get(Resource.ICON_FIGURES_HIDE));
hide = new JMenuItem(localeService.getTranslatedString("HideModules"), icon);
add(hide);
icon = new ImageIcon(Resource.get(Resource.ICON_FIGURES_SHOW));
restore = new JMenuItem(localeService.getTranslatedString("RestoreHiddenModules"), icon);
add(restore);
hookupEventHandlers();
}
public void addListener(UserInputListener listener) {
listeners.add(listener); // GraphicsPresentationController
}
private void hookupEventHandlers() {
zoomIn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
triggerZoomIn();
}
});
zoomOut.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
triggerZoomOut();
}
});
hide.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
triggerHideModules();
}
});
restore.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
triggerRestoreModules();
}
});
}
public void removeListener() {
listeners.clear();
}
public void setCanZoomout(boolean newValue) {
canZoomout = newValue;
}
public void setHasHiddenFigures(boolean newValue) {
hasHiddenFigures = newValue;
}
public void setHasSelection(boolean newValue) {
hasSelection = newValue;
}
@Override
public void show(Component invoker, int x, int y) {
updateMenuItems();
super.show(invoker, x, y);
}
protected void triggerHideModules() {
for (UserInputListener l : listeners)
l.moduleHide();
}
protected void triggerRestoreModules() {
for (UserInputListener l : listeners)
l.moduleRestoreHiddenModules();
}
protected void triggerZoomIn() {
for (UserInputListener l : listeners)
l.zoomIn();
}
private void triggerZoomOut() {
for (UserInputListener l : listeners)
l.zoomOut();
}
private void updateMenuItems() {
hide.setEnabled(hasSelection);
zoomIn.setEnabled(hasSelection);
restore.setEnabled(hasHiddenFigures);
zoomOut.setEnabled(canZoomout);
}
}