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