package org.limewire.ui.swing.components; import java.awt.event.ActionEvent; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.List; import javax.swing.AbstractAction; import javax.swing.Action; /** * A collection of actions for use with {@link FancyTabList}. */ public class TabActionMap { /** An action command to be used for the select action. */ public static final String SELECT_COMMAND = "tab.select"; /** An action command to be used for the remove action. */ public static final String REMOVE_COMMAND = "tab.remove"; /** A property in the main action that can indicate business. */ public static final String BUSY_KEY = "busy.indicator"; /** A property in the main action that can indicate 'newness'. */ public static final String NEW_HINT = "new.indicator"; /**A placeholder indicating that a separator should be put in the menu */ public static final Action SEPARATOR = new AbstractAction(){ @Override public void actionPerformed(ActionEvent e) {} }; private final Action main; private final Action remove; private final Action moreText; private final List<? extends Action> rightClick; private Action removeOthers; private Action removeAll; public TabActionMap(Action mainAction, Action removeAction, Action moreTextAction, List<? extends Action> rightClickActions) { this.main = mainAction; this.remove = removeAction; this.moreText = moreTextAction; if (rightClickActions == null) { this.rightClick = Collections.emptyList(); } else { this.rightClick = rightClickActions; } } public Action getRemoveOthers() { return removeOthers; } void setRemoveOthers(Action removeOthers) { this.removeOthers = removeOthers; } public Action getRemoveAll() { return removeAll; } void setRemoveAll(Action removeAll) { this.removeAll = removeAll; } public Action getMainAction() { return main; } public Action getRemoveAction() { return remove; } public Action getMoreTextAction() { return moreText; } public List<? extends Action> getRightClickActions() { return rightClick; } /** * Wraps the given {@link Action} for use within a list {@link TabActionMap}, * suitable for constructing a {@link FancyTabList}. */ public static List<TabActionMap> createMapForMainActions( Action... selectActions) { return createMapForMainActions(Arrays.asList(selectActions)); } /** * Wraps the given {@link Action} for use within a list {@link TabActionMap}, * suitable for constructing a {@link FancyTabList}. */ public static List<TabActionMap> createMapForMainActions( Collection<? extends Action> mainActions) { List<TabActionMap> maps = new ArrayList<TabActionMap>(); for(Action action : mainActions) { maps.add(new TabActionMap(action, null, null, null)); } return maps; } }