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