001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.gui.dialogs.relation; 003 004import java.util.Arrays; 005import java.util.Collection; 006 007import javax.swing.Action; 008 009import org.openstreetmap.josm.actions.relation.DeleteRelationsAction; 010import org.openstreetmap.josm.actions.relation.DownloadMembersAction; 011import org.openstreetmap.josm.actions.relation.DownloadSelectedIncompleteMembersAction; 012import org.openstreetmap.josm.actions.relation.EditRelationAction; 013import org.openstreetmap.josm.actions.relation.SelectInRelationListAction; 014import org.openstreetmap.josm.actions.relation.SelectMembersAction; 015import org.openstreetmap.josm.actions.relation.SelectRelationAction; 016import org.openstreetmap.josm.gui.PopupMenuHandler; 017 018/** 019 * Utility class to setup a {@link PopupMenuHandler} with a consistent set of relation actions. 020 * @since 14685 021 */ 022public final class RelationPopupMenus { 023 private RelationPopupMenus() { 024 // Hide default constructor for utils classes 025 } 026 027 /** 028 * Adds relation actions to the given {@link PopupMenuHandler} 029 * @param menu handler to add actions to 030 * @param excludeActions 0 or more action classes to exclude, i.e., not add 031 * @return {@code menu} 032 */ 033 @SafeVarargs 034 public static PopupMenuHandler setupHandler(PopupMenuHandler menu, Class<? extends Action>... excludeActions) { 035 final Collection<Class<? extends Action>> exclude = Arrays.asList(excludeActions); 036 if (!exclude.contains(EditRelationAction.class)) { 037 menu.addAction(new EditRelationAction()); 038 } 039 040 if (!exclude.contains(DeleteRelationsAction.class)) { 041 menu.addAction(new DeleteRelationsAction()); 042 menu.addSeparator(); 043 } 044 045 if (!exclude.contains(SelectInRelationListAction.class)) { 046 menu.addAction(new SelectInRelationListAction()); 047 } 048 049 menu.addAction(new SelectRelationAction(false)); 050 menu.addAction(new SelectRelationAction(true)); 051 menu.addAction(new SelectMembersAction(false)); 052 menu.addAction(new SelectMembersAction(true)); 053 menu.addSeparator(); 054 055 menu.addAction(new DownloadMembersAction()); 056 menu.addAction(new DownloadSelectedIncompleteMembersAction()); 057 058 return menu; 059 } 060}