001package apps.swing;
002
003import java.util.*;
004
005import javax.annotation.Nonnull;
006import javax.swing.JMenuItem;
007import javax.swing.UIManager;
008
009import apps.*;
010import apps.plaf.macosx.Application;
011
012import jmri.jmrit.XmlFileLocationAction;
013import jmri.util.*;
014
015import org.openide.util.lookup.ServiceProvider;
016
017import apps.util.issuereporter.swing.IssueReporterAction;
018
019/**
020 * Common utility methods for working with Java Help.
021 * <p>
022 * This class was created to contain common Java Help information.
023 * <p>
024 * It assumes that Java Help 1.1.8 is in use
025 *
026 * @author Bob Jacobsen Copyright 2007
027 */
028@ServiceProvider(service = HelpUtil.MenuProvider.class)
029public class HelpMenuProvider implements HelpUtil.MenuProvider {
030
031    public HelpMenuProvider() {
032        // do nothing
033    }
034
035    @Nonnull
036    @Override
037    public List<JMenuItem> getHelpMenuItems() {
038        List<JMenuItem> items = new ArrayList<>();
039
040        JMenuItem item = new JMenuItem(Bundle.getMessage("MenuItemHelp"));
041        HelpUtil.enableHelpOnButton(item, "index");
042        items.add(item);
043
044        JMenuItem license = new JMenuItem(Bundle.getMessage("MenuItemLicense"));
045        items.add(license);
046        license.addActionListener(new LicenseAction());
047
048        JMenuItem directories = new JMenuItem(Bundle.getMessage("MenuItemFileLocations"));
049        items.add(directories);
050        directories.addActionListener(new XmlFileLocationAction());
051
052        JMenuItem updates = new JMenuItem(Bundle.getMessage("MenuItemCheckUpdates"));
053        items.add(updates);
054        updates.addActionListener(new CheckForUpdateAction());
055
056        JMenuItem context = new JMenuItem(Bundle.getMessage("MenuItemContext"));
057        items.add(context);
058        context.addActionListener(new ReportContextAction());
059
060        JMenuItem console = new JMenuItem(Bundle.getMessage("MenuItemConsole"));
061        items.add(console);
062        console.addActionListener(new SystemConsoleAction());
063
064        items.add(new JMenuItem(new IssueReporterAction()));
065
066        JMenuItem jmriusers = new JMenuItem(Bundle.getMessage("MenuItemJmriUsers"));
067        items.add(jmriusers);
068        jmriusers.addActionListener(new JmriUsersAction());
069
070        // Put about dialog in Apple's preferred area on Mac OS X
071        if (SystemType.isMacOSX()) {
072            try {
073                Objects.requireNonNull(Application.getApplication()).setAboutHandler((EventObject eo) ->
074                        new AboutDialog(null, true).setVisible(true));
075            } catch (java.lang.RuntimeException re) {
076                log.error("Unable to put About handler in default location", re);
077            }
078        }
079        // Include About in Help menu if not on Mac OS X or not using Aqua Look and Feel
080        if (!SystemType.isMacOSX() || !UIManager.getLookAndFeel().isNativeLookAndFeel()) {
081            items.add(null);
082            JMenuItem about = new JMenuItem(Bundle.getMessage("MenuItemAbout") + " " + jmri.Application.getApplicationName());
083            items.add(about);
084            about.addActionListener(new AboutAction());
085        }
086        return items;
087    }
088
089    // initialize logging
090    private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(HelpMenuProvider.class);
091}