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