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