// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.gui; import java.util.Collection; import java.util.Collections; import java.util.HashSet; import java.util.Set; import javax.swing.Action; import javax.swing.JMenuItem; import javax.swing.JPopupMenu; import javax.swing.MenuElement; import javax.swing.event.PopupMenuListener; import org.openstreetmap.josm.actions.OsmPrimitiveAction; import org.openstreetmap.josm.data.osm.OsmPrimitive; /** * Handler to ease management of actions in different popup menus. * @since 5821 */ public class PopupMenuHandler { // Set of enabled osm primitives actions private final Set primitiveActions = new HashSet(); // Managed menu private final JPopupMenu menu; /** * Constructs a new {@code RelationActionMenuHandler} for the specified popup menu. * * @param menu The menu to be managed */ public PopupMenuHandler(JPopupMenu menu) { this.menu = menu; } /** * Appends a new separator at the end of the menu. * @see JPopupMenu#addSeparator */ public void addSeparator() { menu.addSeparator(); } /** * Appends a new menu item to the end of the menu which dispatches the specified Action object. * * @param a the Action to add to the menu * @return the new menu item * @see JPopupMenu#add(Action) */ public JMenuItem addAction(Action a) { if (a != null) { if (a instanceof OsmPrimitiveAction) { primitiveActions.add((OsmPrimitiveAction) a); } return menu.add(a); } return null; } /** * Removes the menu item which dispatches the specified Action object. * * @param a the Action to remove from the menu * @see JPopupMenu#remove(int) */ public void removeAction(Action a) { if (a != null) { if (a instanceof OsmPrimitiveAction) { primitiveActions.remove(a); } MenuElement[] elements = menu.getSubElements(); for (int i=0; iPopupMenu listener. * * @param l the PopupMenuListener to add * @see JPopupMenu#addPopupMenuListener */ public void addListener(PopupMenuListener l) { menu.addPopupMenuListener(l); } /** * Removes a PopupMenu listener. * * @param l the PopupMenuListener to remove * @see JPopupMenu#removePopupMenuListener */ public void removeListener(PopupMenuListener l) { menu.removePopupMenuListener(l); } /** * Returns all enabled primitive actions. * @return All primitive actions that have been added. * @see #addAction(Action) */ public Collection getPrimitiveActions() { return Collections.unmodifiableCollection(primitiveActions); } /** * Specifies the working set of primitives for all primitive actions. * @param primitives The new working set of primitives. Can be null or empty * @see OsmPrimitiveAction#setPrimitives */ public void setPrimitives(Collection primitives) { for (OsmPrimitiveAction action : primitiveActions) { action.setPrimitives(primitives); } } }