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 _excludeJmriVersionCheckBox;
028
029    public LoadAndStorePreferencesPanel() {
030        _preferences = InstanceManager.getDefault(LoadAndStorePreferences.class);
031        initGUI();
032    }
033
034    private void initGUI() {
035        setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
036        add(getPanel());
037    }
038
039    /**
040     * set the local prefs to match the GUI Local prefs are independent from the
041     * singleton instance prefs.
042     *
043     * @return true if set, false if values are unacceptable.
044     */
045    private boolean setValues() {
046        boolean didSet = true;
047        _preferences.setExcludeFileHistory(_excludeFileHistoryCheckBox.isSelected());
048        _preferences.setExcludeMemoryIMCURRENTTIME(_excludeMemoryIMCURRENTTIME_CheckBox.isSelected());
049        _preferences.setExcludeJmriVersion(_excludeJmriVersionCheckBox.isSelected());
050        return didSet;
051    }
052
053    private JPanel getPanel() {
054        JLabel infoLabel = new JLabel(Bundle.getMessage("LabelExcludeInfo"));
055
056        _excludeFileHistoryCheckBox = new JCheckBox(Bundle.getMessage("LabelExcludeFileHistory"));
057        _excludeFileHistoryCheckBox.setSelected(_preferences.isExcludeFileHistory());
058
059        _excludeMemoryIMCURRENTTIME_CheckBox = new JCheckBox(Bundle.getMessage("ExcludeMemoryIMCURRENTTIME"));
060        _excludeMemoryIMCURRENTTIME_CheckBox.setSelected(_preferences.isExcludeMemoryIMCURRENTTIME());
061
062        _excludeJmriVersionCheckBox = new JCheckBox(Bundle.getMessage("ExcludeJmriVersion"));
063        _excludeJmriVersionCheckBox.setSelected(_preferences.isExcludeJmriVersion());
064
065        JPanel gridPanel = new JPanel(new GridLayout(0, 1));
066//        gridPanel.add(new JLabel());
067        gridPanel.add(infoLabel);
068        gridPanel.add(_excludeMemoryIMCURRENTTIME_CheckBox);
069        gridPanel.add(_excludeJmriVersionCheckBox);
070        gridPanel.add(_excludeFileHistoryCheckBox);
071//        gridPanel.add(new jmri.swing.JTitledSeparator(Bundle.getMessage("IgnoreSeparator")));
072
073        JPanel panel = new JPanel();
074        panel.setLayout(new FlowLayout(FlowLayout.CENTER, 40, 0));
075        panel.add(gridPanel);
076
077        return panel;
078    }
079
080    @Override
081    public String getPreferencesItem() {
082        return "LOAD_AND_STORE"; // NOI18N
083    }
084
085    @Override
086    public String getPreferencesItemText() {
087        return Bundle.getMessage("LoadAndStoreMenu"); // NOI18N
088    }
089
090    @Override
091    public String getTabbedPreferencesTitle() {
092        return getPreferencesItemText();
093    }
094
095    @Override
096    public String getLabelKey() {
097        return Bundle.getMessage("LoadAndStorePrefLabel");
098    }
099
100    @Override
101    public JComponent getPreferencesComponent() {
102        return this;
103    }
104
105    @Override
106    public boolean isPersistant() {
107        return false;
108    }
109
110    @Override
111    public String getPreferencesTooltip() {
112        return null;
113    }
114
115    @Override
116    public void savePreferences() {
117        if (setValues()) {
118            _preferences.save();
119        }
120    }
121
122    @Override
123    public boolean isDirty() {
124        return _preferences.isDirty();
125    }
126
127    @Override
128    public boolean isRestartRequired() {
129        return _preferences.isRestartRequired();
130    }
131
132    @Override
133    public boolean isPreferencesValid() {
134        return true; // no validity checking performed
135    }
136
137    @Override
138    public int getSortOrder() {
139        return 450; // Place between "Start Up" and "Display"
140    }
141}