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}