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}