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}