001package jmri.jmrit.operations.setup.gui;
002
003import java.awt.GridBagLayout;
004
005import javax.swing.*;
006
007import org.slf4j.Logger;
008import org.slf4j.LoggerFactory;
009
010import jmri.InstanceManager;
011import jmri.jmrit.operations.setup.OperationsSetupXml;
012import jmri.jmrit.operations.setup.Setup;
013import jmri.jmrit.operations.trains.TrainManager;
014
015/**
016 * Frame for user edit of additional manifest print options
017 *
018 * @author Dan Boudreau Copyright (C) 2012
019 * 
020 */
021public class PrintMoreOptionPanel extends OperationsPreferencesPanel {
022
023    private static final Logger log = LoggerFactory.getLogger(PrintMoreOptionPanel.class);
024
025    // labels
026    // major buttons
027    JButton saveButton = new JButton(Bundle.getMessage("ButtonSave"));
028
029    // radio buttons
030    // check boxes
031    // text field
032    JTextField tab1TextField = new JTextField(2);
033    JTextField tab2TextField = new JTextField(2);
034    JTextField tab3TextField = new JTextField(2);
035    JTextField manifestTabTextField = new JTextField(2);
036
037    // text area
038    // combo boxes
039    public PrintMoreOptionPanel() {
040
041        // the following code sets the frame's initial state
042        setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
043
044        // row 1 font type and size
045        JPanel p1 = new JPanel();
046        p1.setLayout(new BoxLayout(p1, BoxLayout.Y_AXIS));
047
048        JPanel pTab = new JPanel();
049        pTab.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("BorderLayoutTab1")));
050        pTab.add(tab1TextField);
051        p1.add(pTab);
052
053        JPanel pTab2 = new JPanel();
054        pTab2.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("BorderLayoutTab2")));
055        pTab2.add(tab2TextField);
056        p1.add(pTab2);
057
058        JPanel pTab3 = new JPanel();
059        pTab3.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("BorderLayoutTab3")));
060        pTab3.add(tab3TextField);
061        p1.add(pTab3);
062        
063        JPanel pManifestTab = new JPanel();
064        pManifestTab.setBorder(BorderFactory.createTitledBorder(Bundle.getMessage("BorderLayoutManifestTab")));
065        pManifestTab.add(manifestTabTextField);
066        p1.add(pManifestTab);
067
068        tab1TextField.setText(Integer.toString(Setup.getTab1Length()));
069        tab2TextField.setText(Integer.toString(Setup.getTab2Length()));
070        tab3TextField.setText(Integer.toString(Setup.getTab3Length()));
071        manifestTabTextField.setText(Integer.toString(Setup.getManifestTabLength()));
072
073        // add tool tips
074        saveButton.setToolTipText(Bundle.getMessage("SaveToolTip"));
075
076        // row 11
077        JPanel pControl = new JPanel();
078        pControl.setBorder(BorderFactory.createTitledBorder(""));
079        pControl.setLayout(new GridBagLayout());
080        addItem(pControl, saveButton, 0, 0);
081
082        add(p1);
083        add(pControl);
084
085        // setup buttons
086        addButtonAction(saveButton);
087    }
088
089    // Save buttons
090    @Override
091    public void buttonActionPerformed(java.awt.event.ActionEvent ae) {
092        if (ae.getSource() == saveButton) {
093            this.savePreferences();
094            var topLevelAncestor = getTopLevelAncestor();
095            if (Setup.isCloseWindowOnSaveEnabled() && topLevelAncestor instanceof PrintMoreOptionFrame) {
096                ((PrintMoreOptionFrame) topLevelAncestor).dispose();
097            }
098        }
099    }
100
101    @Override
102    public String getTabbedPreferencesTitle() {
103        return Bundle.getMessage("TitlePrintMoreOptions");
104    }
105
106    @Override
107    public String getPreferencesTooltip() {
108        return null;
109    }
110
111    @Override
112    public void savePreferences() {
113
114        try {
115            Setup.setTab1length(Integer.parseInt(tab1TextField.getText()));
116            Setup.setTab2length(Integer.parseInt(tab2TextField.getText()));
117            Setup.setTab3length(Integer.parseInt(tab3TextField.getText()));
118            Setup.setManifestTablength(Integer.parseInt(manifestTabTextField.getText()));
119        } catch (NumberFormatException e) {
120            log.error("Tab wasn't a number");
121        }
122
123        InstanceManager.getDefault(OperationsSetupXml.class).writeOperationsFile();
124
125        // recreate all train manifests
126        InstanceManager.getDefault(TrainManager.class).setTrainsModified();
127    }
128
129    @Override
130    public boolean isDirty() {
131        try {
132            return (Setup.getTab1Length() != Integer.parseInt(tab1TextField.getText()) ||
133                    Setup.getTab2Length() != Integer.parseInt(tab2TextField.getText()) ||
134                    Setup.getTab3Length() != Integer.parseInt(tab3TextField.getText()) ||
135                    Setup.getManifestTabLength() != Integer.parseInt(manifestTabTextField.getText()));
136        } catch (NumberFormatException e) {
137            log.error("Tab wasn't a number");
138        }
139        return true;
140    }
141}