001package jmri.configurexml.swing;
002
003import java.awt.FlowLayout;
004import java.awt.GridLayout;
005
006import javax.swing.*;
007
008import org.openide.util.lookup.ServiceProvider;
009
010import jmri.InstanceManager;
011import jmri.swing.PreferencesPanel;
012import jmri.configurexml.LoadAndStorePreferences;
013
014/**
015 * Preferences panel for Load and store tables and panel files.
016 *
017 * @author Dave Sand         Copyright 2022
018 * @author Daniel Bergqvist  Copyright 2025
019 */
020@ServiceProvider(service = PreferencesPanel.class)
021public class LoadAndStorePreferencesPanel extends JPanel implements PreferencesPanel {
022
023    private final LoadAndStorePreferences _preferences;
024
025    private JCheckBox _excludeFileHistoryCheckBox;
026    private JCheckBox _excludeMemoryIMCURRENTTIME_CheckBox;
027    private JCheckBox _excludeMemoryContents_CheckBox;
028    private JCheckBox _excludeJmriVersionCheckBox;
029    private JCheckBox _excludeTimebaseCheckBox;
030    private JCheckBox _excludeFontExtensionsCheckBox;
031
032    public LoadAndStorePreferencesPanel() {
033        _preferences = InstanceManager.getDefault(LoadAndStorePreferences.class);
034        initGUI();
035    }
036
037    private void initGUI() {
038        setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
039        add(getPanel());
040    }
041
042    /**
043     * set the local prefs to match the GUI Local prefs are independent from the
044     * singleton instance prefs.
045     *
046     * @return true if set, false if values are unacceptable.
047     */
048    private boolean setValues() {
049        boolean didSet = true;
050        _preferences.setExcludeFileHistory(_excludeFileHistoryCheckBox.isSelected());
051        _preferences.setExcludeMemoryIMCURRENTTIME(_excludeMemoryIMCURRENTTIME_CheckBox.isSelected());
052        _preferences.setExcludeMemoryContents(_excludeMemoryContents_CheckBox.isSelected());
053        _preferences.setExcludeJmriVersion(_excludeJmriVersionCheckBox.isSelected());
054        _preferences.setExcludeTimebase(_excludeTimebaseCheckBox.isSelected());
055        _preferences.setExcludeFontExtensions(_excludeFontExtensionsCheckBox.isSelected());
056        return didSet;
057    }
058
059    private JPanel getPanel() {
060        JLabel infoLabel = new JLabel(Bundle.getMessage("LabelExcludeInfo"));
061
062        _excludeFileHistoryCheckBox = new JCheckBox(Bundle.getMessage("LabelExcludeFileHistory"));
063        _excludeFileHistoryCheckBox.setSelected(_preferences.isExcludeFileHistory());
064
065        _excludeMemoryIMCURRENTTIME_CheckBox = new JCheckBox(Bundle.getMessage("ExcludeMemoryIMCURRENTTIME"));
066        _excludeMemoryIMCURRENTTIME_CheckBox.setSelected(_preferences.isExcludeMemoryIMCURRENTTIME());
067
068        _excludeMemoryContents_CheckBox = new JCheckBox(Bundle.getMessage("ExcludeMemoryContents"));
069        _excludeMemoryContents_CheckBox.setSelected(_preferences.isExcludeMemoryContents());
070
071        _excludeJmriVersionCheckBox = new JCheckBox(Bundle.getMessage("ExcludeJmriVersion"));
072        _excludeJmriVersionCheckBox.setSelected(_preferences.isExcludeJmriVersion());
073
074        _excludeTimebaseCheckBox = new JCheckBox(Bundle.getMessage("ExcludeTimebase"));
075        _excludeTimebaseCheckBox.setSelected(_preferences.isExcludeTimebase());
076
077        _excludeFontExtensionsCheckBox = new JCheckBox(Bundle.getMessage("ExcludeFontExtensions"));
078        _excludeFontExtensionsCheckBox.setSelected(_preferences.isExcludeFontExtensions());
079
080        JPanel gridPanel = new JPanel(new GridLayout(0, 1));
081//        gridPanel.add(new JLabel());
082        gridPanel.add(infoLabel);
083        gridPanel.add(_excludeMemoryIMCURRENTTIME_CheckBox);
084        gridPanel.add(_excludeMemoryContents_CheckBox);
085        gridPanel.add(_excludeJmriVersionCheckBox);
086        gridPanel.add(_excludeFileHistoryCheckBox);
087        gridPanel.add(_excludeTimebaseCheckBox);
088        gridPanel.add(_excludeFontExtensionsCheckBox);
089//        gridPanel.add(new jmri.swing.JTitledSeparator(Bundle.getMessage("IgnoreSeparator")));
090
091        JPanel panel = new JPanel();
092        panel.setLayout(new FlowLayout(FlowLayout.CENTER, 40, 0));
093        panel.add(gridPanel);
094
095        return panel;
096    }
097
098    @Override
099    public String getPreferencesItem() {
100        return "LOAD_AND_STORE"; // NOI18N
101    }
102
103    @Override
104    public String getPreferencesItemText() {
105        return Bundle.getMessage("LoadAndStoreMenu"); // NOI18N
106    }
107
108    @Override
109    public String getTabbedPreferencesTitle() {
110        return getPreferencesItemText();
111    }
112
113    @Override
114    public String getLabelKey() {
115        return Bundle.getMessage("LoadAndStorePrefLabel");
116    }
117
118    @Override
119    public JComponent getPreferencesComponent() {
120        return this;
121    }
122
123    @Override
124    public boolean isPersistant() {
125        return false;
126    }
127
128    @Override
129    public String getPreferencesTooltip() {
130        return null;
131    }
132
133    @Override
134    public void savePreferences() {
135        if (setValues()) {
136            _preferences.save();
137        }
138    }
139
140    @Override
141    public boolean isDirty() {
142        return _preferences.isDirty();
143    }
144
145    @Override
146    public boolean isRestartRequired() {
147        return _preferences.isRestartRequired();
148    }
149
150    @Override
151    public boolean isPreferencesValid() {
152        return true; // no validity checking performed
153    }
154
155    @Override
156    public int getSortOrder() {
157        return 450; // Place between "Start Up" and "Display"
158    }
159}