/** * */ package ie.dcu.apps.ist; import ie.dcu.apps.ist.actions.ActionManager; import ie.dcu.apps.ist.actions.HoverMenuManager; import ie.dcu.apps.ist.actions.OpenAction; import ie.dcu.apps.ist.actions.OpenRecentAction; import java.io.File; import java.net.MalformedURLException; import java.net.URL; import java.util.Properties; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; /** * Recent files menu. * * @author Kevin McGuinness */ class AppRecentMenu extends HoverMenuManager { private final AppRecentFiles history; private final EmptyAction empty; private final AppWindow window; private IAction action; public AppRecentMenu(AppWindow window, IMenuManager parent) { super("Open &Recent"); this.window = window; setParent(parent); history = AppRecentFiles.getInstance(); add(empty = new EmptyAction()); addMenuListener(menuListener); ActionManager actions = window.getActions(); if (actions != null) { OpenAction openAction = actions.get(OpenAction.class); openAction.addPropertyChangeListener(actionListener); action = openAction; } try { Properties props = window.getProperties(); String icon = props.getProperty("AppRecentMenu.icon", "file:icons/open-recent.png"); setImageURL(new URL(icon)); } catch (MalformedURLException e) { // Ignore } } @Override public void fill(Menu parent, int index) { super.fill(parent, index); MenuItem item = getMenuItem(); if (item != null) { item.setEnabled(action.isEnabled()); } } private void buildMenu() { removeAll(); if (history.empty()) { add(empty); } else { for (File file : history) { add(new OpenRecentAction(window.getActions(), file)); } } update(false); } private final class EmptyAction extends Action { public EmptyAction() { setText("No Recent Files"); setEnabled(false); } }; private final IMenuListener menuListener = new IMenuListener() { public void menuAboutToShow(IMenuManager manager) { buildMenu(); } }; private final IPropertyChangeListener actionListener = new IPropertyChangeListener() { public void propertyChange(PropertyChangeEvent event) { MenuItem item = getMenuItem(); if (item != null) { item.setEnabled(action.isEnabled()); } } }; }