001package jmri.jmrit.roster.swing;
002
003import java.awt.Component;
004import java.awt.Frame;
005import javax.swing.AbstractAction;
006import javax.swing.JMenu;
007import jmri.jmrit.roster.CopyRosterItemAction;
008import jmri.jmrit.roster.DeleteRosterItemAction;
009import jmri.jmrit.roster.ExportRosterItemAction;
010import jmri.jmrit.roster.FullBackupExportAction;
011import jmri.jmrit.roster.FullBackupImportAction;
012import jmri.jmrit.roster.ImportRosterItemAction;
013import jmri.jmrit.roster.PrintListAction;
014import jmri.jmrit.roster.PrintRosterAction;
015import jmri.jmrit.roster.swing.speedprofile.SpeedProfileAction;
016import org.slf4j.Logger;
017import org.slf4j.LoggerFactory;
018
019/**
020 * Provides a context-specific menu for handling the Roster.
021 *
022 * For DecoderPro's menus, see the
023 * xml/config/parts/jmri/jmrit/roster/swing/RosterFrameMenu.xml file.
024 *
025 * @author Bob Jacobsen Copyright (C) 2001, 2002, 2008
026 * @author Dennis Miller Copyright (C) 2005
027 * @see jmri.jmrit.roster.RosterEntry
028 * @see jmri.jmrit.roster.Roster
029 */
030public class RosterMenu extends JMenu {
031
032    /**
033     * Ctor argument defining that the menu object will be used as part of the
034     * main menu of the program, away from any GUI that can select or use a
035     * RosterEntry.
036     */
037    static public final int MAINMENU = 1;
038
039    /**
040     * Ctor argument defining that the menu object will be used as a menu on a
041     * GUI object that can select a RosterEntry.
042     */
043    static public final int SELECTMENU = 2;
044
045    /**
046     * Ctor argument defining that the menu object will be used as a menu on a
047     * GUI object that is dealing with a single RosterEntry.
048     */
049    static public final int ENTRYMENU = 3;
050
051    /**
052     * Create a menu of Roster tools.
053     *
054     * @param pMenuName Name for the menu
055     * @param pMenuType Select where the menu will be used, hence the right set
056     *                  of items to be enabled.
057     * @param pWho      The Component using this menu, used to ensure that
058     *                  dialog boxes will pop in the right place.
059     */
060    public RosterMenu(String pMenuName, int pMenuType, Component pWho) {
061        super(pMenuName);
062
063        // create the menu
064        AbstractAction dp3Action = new jmri.jmrit.roster.swing.RosterFrameAction(Bundle.getMessage("MenuItemRoster"), false);
065        dp3Action.setEnabled(true);
066
067        AbstractAction createAction = new jmri.jmrit.symbolicprog.tabbedframe.PaneNewProgAction(Bundle.getMessage("MenuItemCreate"));
068        createAction.setEnabled(false);
069
070        AbstractAction editAction = new jmri.jmrit.symbolicprog.tabbedframe.PaneEditAction(Bundle.getMessage("MenuItemEdit"));
071        editAction.setEnabled(false);
072
073        AbstractAction exportAction = new ExportRosterItemAction(Bundle.getMessage("MenuItemExport"), pWho);
074        exportAction.setEnabled(false);
075
076        AbstractAction importAction = new ImportRosterItemAction(Bundle.getMessage("MenuItemImport"), pWho);
077        importAction.setEnabled(false);
078
079        AbstractAction copyAction = new CopyRosterItemAction(Bundle.getMessage("MenuItemCopy"), pWho);
080        copyAction.setEnabled(false);
081
082        AbstractAction deleteAction = new DeleteRosterItemAction(Bundle.getMessage("MenuItemDelete"), pWho);
083        deleteAction.setEnabled(false);
084
085        AbstractAction deleteGroupAction = new DeleteRosterGroupAction(Bundle.getMessage("MenuGroupDelete"), pWho);
086        deleteGroupAction.setEnabled(false);
087
088        AbstractAction createGroupAction = new CreateRosterGroupAction(Bundle.getMessage("MenuGroupCreate"), pWho);
089        createGroupAction.setEnabled(false);
090
091        AbstractAction rosterEntryToGroupAction = new RosterEntryToGroupAction(Bundle.getMessage("MenuGroupAssociate"), pWho);
092        rosterEntryToGroupAction.setEnabled(false);
093
094        AbstractAction removeRosterEntryToGroupAction = new RemoveRosterEntryToGroupAction(Bundle.getMessage("MenuGroupDisassociate"), pWho);
095        removeRosterEntryToGroupAction.setEnabled(false);
096
097        AbstractAction rosterGroupTableAction = new jmri.jmrit.roster.swing.rostergroup.RosterGroupTableAction(Bundle.getMessage("MenuGroupTable"));
098        rosterGroupTableAction.setEnabled(false);
099
100        AbstractAction rosterExportAction = new FullBackupExportAction(Bundle.getMessage("MenuFullExport"), pWho);
101        rosterExportAction.setEnabled(false);
102
103        AbstractAction rosterImportAction = new FullBackupImportAction(Bundle.getMessage("MenuFullImport"), pWho);
104        rosterImportAction.setEnabled(false);
105
106        AbstractAction speedProfileAction = new SpeedProfileAction(Bundle.getMessage("MenuSpeedProfile"));
107        speedProfileAction.setEnabled(false);
108
109        // Need a frame here, but are not passed one
110        Frame newFrame = new Frame();
111        AbstractAction printAction = new PrintRosterAction(Bundle.getMessage("MenuItemPrintSummary"), newFrame, false);
112        printAction.setEnabled(false);
113        AbstractAction listAction = new PrintListAction(Bundle.getMessage("MenuItemPrintList"), newFrame, false);
114        listAction.setEnabled(false);
115        AbstractAction previewAction = new PrintRosterAction(Bundle.getMessage("MenuItemPreviewSummary"), newFrame, true);
116        previewAction.setEnabled(false);
117        AbstractAction previewListAction = new PrintListAction(Bundle.getMessage("MenuItemPreviewList"), newFrame, true);
118        previewListAction.setEnabled(false);
119
120        JMenu groupMenu = new JMenu(Bundle.getMessage("MenuRosterGroups"));
121        groupMenu.add(createGroupAction);
122        groupMenu.add(deleteGroupAction);
123        groupMenu.add(rosterGroupTableAction);
124        groupMenu.add(rosterEntryToGroupAction);
125        groupMenu.add(removeRosterEntryToGroupAction);
126
127        add(dp3Action);
128        addSeparator();
129        add(createAction);
130        add(editAction);
131        add(copyAction);
132        add(importAction);
133        add(exportAction);
134        add(deleteAction);
135        add(printAction);
136        add(listAction);
137        add(previewAction);
138        add(previewListAction);
139        addSeparator();
140        add(groupMenu);
141        addSeparator();
142        add(rosterExportAction);
143        add(rosterImportAction);
144        add(speedProfileAction);
145
146        // activate the correct items
147        switch (pMenuType) {
148            case MAINMENU:
149                createAction.setEnabled(true);
150                editAction.setEnabled(true);
151                deleteAction.setEnabled(true);
152                importAction.setEnabled(true);
153                exportAction.setEnabled(true);
154                copyAction.setEnabled(true);
155                deleteGroupAction.setEnabled(true);
156                createGroupAction.setEnabled(true);
157                rosterEntryToGroupAction.setEnabled(true);
158                removeRosterEntryToGroupAction.setEnabled(true);
159                printAction.setEnabled(true);
160                listAction.setEnabled(true);
161                previewAction.setEnabled(true);
162                previewListAction.setEnabled(true);
163                rosterGroupTableAction.setEnabled(true);
164                rosterExportAction.setEnabled(true);
165                rosterImportAction.setEnabled(true);
166                speedProfileAction.setEnabled(true);
167                break;
168            case SELECTMENU:
169            case ENTRYMENU:
170                printAction.setEnabled(true);
171                previewAction.setEnabled(true);
172                break;
173            default:
174                log.error("RosterMenu constructed without a valid menuType parameter: {}", pMenuType);
175        }
176    }
177
178    // initialize logging
179    private final static Logger log = LoggerFactory.getLogger(RosterMenu.class);
180
181}