001package jmri.jmrit.beantable; 002 003import java.awt.event.ActionEvent; 004import javax.swing.JButton; 005import javax.swing.JCheckBox; 006import javax.swing.JMenu; 007import javax.swing.JMenuItem; 008import javax.swing.JOptionPane; 009import javax.swing.JSeparator; 010import jmri.InstanceManager; 011import jmri.UserPreferencesManager; 012import jmri.util.JmriJFrame; 013import jmri.util.gui.GuiLafPreferencesManager; 014 015/** 016 * Create a "Tables" menu for the main menu bar. 017 * 018 * @author Bob Jacobsen Copyright 2003 019 * @author Matthew Harris copyright (c) 2009 020 * @author Bill Hood Copyright (C) 2024 021 */ 022public class TablesMenu extends JMenu { 023 024 public TablesMenu() { 025 super(); 026 setText(Bundle.getMessage("MenuTables")); 027 028 // Re-create the menu content here, following the pattern of OperationsMenu. 029 // This avoids component sharing issues and NullPointerExceptions. 030 add(new jmri.jmrit.beantable.ListedTableAction(Bundle.getMessage("MenuItemTurnoutTable"), "jmri.jmrit.beantable.TurnoutTableTabAction")); 031 add(new jmri.jmrit.beantable.ListedTableAction(Bundle.getMessage("MenuItemSensorTable"), "jmri.jmrit.beantable.SensorTableTabAction")); 032 add(new jmri.jmrit.beantable.ListedTableAction(Bundle.getMessage("MenuItemLightTable"), "jmri.jmrit.beantable.LightTableTabAction")); 033 034 JMenu signalMenu = new JMenu(Bundle.getMessage("MenuSignals")); 035 signalMenu.add(new jmri.jmrit.beantable.ListedTableAction(Bundle.getMessage("MenuItemSignalTable"), "jmri.jmrit.beantable.SignalHeadTableAction")); 036 signalMenu.add(new jmri.jmrit.beantable.ListedTableAction(Bundle.getMessage("MenuItemSignalMastTable"), "jmri.jmrit.beantable.SignalMastTableAction")); 037 signalMenu.add(new jmri.jmrit.beantable.ListedTableAction(Bundle.getMessage("MenuItemSignalGroupTable"), "jmri.jmrit.beantable.SignalGroupTableAction")); 038 signalMenu.add(new jmri.jmrit.beantable.ListedTableAction(Bundle.getMessage("MenuItemSignalMastLogicTable"), "jmri.jmrit.beantable.SignalMastLogicTableAction")); 039 add(signalMenu); 040 041 add(new jmri.jmrit.beantable.ListedTableAction(Bundle.getMessage("MenuItemReporterTable"), "jmri.jmrit.beantable.ReporterTableTabAction")); 042 add(new jmri.jmrit.beantable.ListedTableAction(Bundle.getMessage("MenuItemMemoryTable"), "jmri.jmrit.beantable.MemoryTableAction")); 043 add(new jmri.jmrit.beantable.ListedTableAction(Bundle.getMessage("MenuItemStringIOTable"), "jmri.jmrit.beantable.StringIOTableAction")); 044 add(new jmri.jmrit.beantable.ListedTableAction(Bundle.getMessage("MenuItemRouteTable"), "jmri.jmrit.beantable.RouteTableAction")); 045 add(new jmri.jmrit.beantable.ListedTableAction(Bundle.getMessage("MenuItemLRouteTable"), "jmri.jmrit.beantable.LRouteTableAction")); 046 add(new jmri.jmrit.beantable.ListedTableAction(Bundle.getMessage("MenuItemLogixTable"), "jmri.jmrit.beantable.LogixTableAction")); 047 048 JMenu logixNG_Menu = new JMenu(Bundle.getMessage("MenuLogixNG")); 049 logixNG_Menu.add(new jmri.jmrit.beantable.ListedTableAction(Bundle.getMessage("MenuItemLogixNGTable"), "jmri.jmrit.beantable.LogixNGTableAction")); 050 logixNG_Menu.add(new jmri.jmrit.beantable.ListedTableAction(Bundle.getMessage("MenuItemLogixNGModuleTable"), "jmri.jmrit.beantable.LogixNGModuleTableAction")); 051 logixNG_Menu.add(new jmri.jmrit.beantable.ListedTableAction(Bundle.getMessage("MenuItemLogixNGTableTable"), "jmri.jmrit.beantable.LogixNGTableTableAction")); 052 logixNG_Menu.add(new jmri.jmrit.beantable.ListedTableAction(Bundle.getMessage("MenuItemLogixNGGlobalVariableTableAction"), "jmri.jmrit.beantable.LogixNGGlobalVariableTableAction")); 053 add(logixNG_Menu); 054 055 add(new jmri.jmrit.beantable.ListedTableAction(Bundle.getMessage("MenuItemBlockTable"), "jmri.jmrit.beantable.BlockTableAction")); 056 if (InstanceManager.getDefault(GuiLafPreferencesManager.class).isOblockEditTabbed()) { // turn on or off in prefs 057 add(new jmri.jmrit.beantable.ListedTableAction(Bundle.getMessage("MenuItemOBlockTable"), "jmri.jmrit.beantable.OBlockTableAction")); 058 } else { 059 add(new jmri.jmrit.beantable.OBlockTableAction(Bundle.getMessage("MenuItemOBlockTable"))); 060 } 061 add(new jmri.jmrit.beantable.ListedTableAction(Bundle.getMessage("MenuItemSectionTable"), "jmri.jmrit.beantable.SectionTableAction")); 062 add(new jmri.jmrit.beantable.ListedTableAction(Bundle.getMessage("MenuItemTransitTable"), "jmri.jmrit.beantable.TransitTableAction")); 063 add(new jmri.jmrit.beantable.ListedTableAction(Bundle.getMessage("MenuItemAudioTable"), "jmri.jmrit.beantable.AudioTableAction")); 064 add(new jmri.jmrit.beantable.ListedTableAction(Bundle.getMessage("MenuItemIdTagTable"), "jmri.jmrit.beantable.IdTagTableTabAction")); 065 add(new jmri.jmrit.beantable.ListedTableAction(Bundle.getMessage("MenuItemRailComTable"), "jmri.jmrit.beantable.RailComTableAction")); 066 067 add(new JSeparator()); 068 JMenuItem settingsItem = new JMenuItem(Bundle.getMessage("MenuItemTablesSettings")); 069 add(settingsItem); 070 settingsItem.addActionListener((ActionEvent e) -> { 071 JmriJFrame f = new JmriJFrame(Bundle.getMessage("MenuItemTablesSettings")); 072 f.getContentPane().setLayout(new java.awt.GridBagLayout()); 073 java.awt.GridBagConstraints c = new java.awt.GridBagConstraints(); 074 c.gridwidth = 1; 075 c.gridheight = 1; 076 c.fill = java.awt.GridBagConstraints.HORIZONTAL; 077 c.anchor = java.awt.GridBagConstraints.CENTER; 078 c.weightx = 1.0; 079 080 JCheckBox showTablesMenu = new JCheckBox(Bundle.getMessage("MenuItemAddTablesMenuToMainMenu")); 081 UserPreferencesManager prefMgr = InstanceManager.getDefault(UserPreferencesManager.class); 082 Object pref = prefMgr.getProperty("jmri.jmrit.ToolsMenu", "showTablesMenu"); 083 boolean showMenu = false; // Default to false 084 if (pref instanceof Boolean) { 085 showMenu = (Boolean) pref; 086 } 087 showTablesMenu.setSelected(showMenu); 088 c.gridx = 0; 089 c.gridy = 0; 090 f.getContentPane().add(showTablesMenu, c); 091 092 JButton saveButton = new JButton(Bundle.getMessage("ButtonSave")); 093 c.gridy = 1; 094 f.getContentPane().add(saveButton, c); 095 saveButton.addActionListener((java.awt.event.ActionEvent ev) -> { 096 prefMgr.setProperty("jmri.jmrit.ToolsMenu", "showTablesMenu", showTablesMenu.isSelected()); 097 JOptionPane.showMessageDialog(f, 098 Bundle.getMessage("RestartRequiredHint"), 099 Bundle.getMessage("RestartRequired"), 100 JOptionPane.INFORMATION_MESSAGE); 101 }); 102 103 f.pack(); 104 f.setVisible(true); 105 }); 106 } 107}