001package jmri.jmrit.symbolicprog; 002 003import java.awt.event.ActionEvent; 004import java.awt.event.ItemEvent; 005import java.util.ResourceBundle; 006 007import javax.annotation.CheckForNull; 008import javax.swing.*; 009 010import jmri.InstanceManager; 011import jmri.jmrit.symbolicprog.tabbedframe.PaneProgFrame; 012import jmri.profile.ProfileManager; 013import jmri.swing.PreferencesPanel; 014import jmri.util.swing.JComboBoxUtil; 015 016import org.openide.util.lookup.ServiceProvider; 017 018/** 019 * Provide GUI to configure symbolic programmer defaults. 020 * 021 * @author Bob Jacobsen Copyright (C) 2001, 2003, 2017 022 */ 023@ServiceProvider(service = PreferencesPanel.class) 024public class ProgrammerConfigPane extends JPanel implements PreferencesPanel { 025 026 private final ResourceBundle apb = ResourceBundle.getBundle("apps.AppsConfigBundle"); 027 028 public ProgrammerConfigPane() { 029 setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS)); 030 JPanel p = new JPanel(); 031 p.setLayout(new java.awt.FlowLayout()); 032 p.add(new JLabel("Format:")); 033 p.add(programmerBox = new JComboBox<>(ProgDefault.findListOfProgFiles())); 034 JComboBoxUtil.setupComboBoxMaxRows(programmerBox); 035 programmerBox.setSelectedItem(ProgDefault.getDefaultProgFile()); 036 programmerBox.addActionListener((ActionEvent e) -> { 037 InstanceManager.getDefault(ProgrammerConfigManager.class).setDefaultFile(programmerBox.getSelectedItem().toString()); 038 }); 039 add(p); 040 041 // also create the advanced panel 042 advancedPanel = new JPanel(); 043 advancedPanel.setLayout(new BoxLayout(advancedPanel, BoxLayout.Y_AXIS)); 044 045 advancedPanel.add(showEmptyTabs = new JCheckBox(this.apb.getString("ProgShowEmptyTabs"))); 046 showEmptyTabs.setSelected(PaneProgFrame.getShowEmptyPanes()); 047 showEmptyTabs.addItemListener((ItemEvent e) -> { 048 InstanceManager.getDefault(ProgrammerConfigManager.class).setShowEmptyPanes(showEmptyTabs.isSelected()); 049 }); 050 051 advancedPanel.add(dontDetachPanes = new JCheckBox(this.apb.getString("ProgDontDetachTabs"))); 052 dontDetachPanes.setSelected(PaneProgFrame.getDontDetachPanes()); 053 dontDetachPanes.addItemListener((ItemEvent e) -> { 054 InstanceManager.getDefault(ProgrammerConfigManager.class).setDontDetachPanes(dontDetachPanes.isSelected()); 055 }); 056 057 advancedPanel.add(showCvNums = new JCheckBox(this.apb.getString("ProgShowCVInTips"))); 058 showCvNums.setSelected(PaneProgFrame.getShowCvNumbers()); 059 showCvNums.addItemListener((ItemEvent e) -> { 060 InstanceManager.getDefault(ProgrammerConfigManager.class).setShowCvNumbers(showCvNums.isSelected()); 061 }); 062 063 advancedPanel.add(canCacheDefault = new JCheckBox(this.apb.getString("ProgCanCacheDefault"))); 064 canCacheDefault.setSelected(PaneProgFrame.getCanCacheDefault()); 065 canCacheDefault.addItemListener((ItemEvent e) -> { 066 InstanceManager.getDefault(ProgrammerConfigManager.class).setCanCacheDefault(canCacheDefault.isSelected()); 067 }); 068 069 advancedPanel.add(doConfirmRead = new JCheckBox(this.apb.getString("ProgDoConfirmRead"))); 070 doConfirmRead.setSelected(PaneProgFrame.getDoConfirmRead()); 071 doConfirmRead.addItemListener((ItemEvent e) -> { 072 InstanceManager.getDefault(ProgrammerConfigManager.class).setDoConfirmRead(doConfirmRead.isSelected()); 073 }); 074 075 advancedPanel.add(new JSeparator(JSeparator.HORIZONTAL)); 076 077 advancedPanel.add(disableProgrammingTrack = new JCheckBox(this.apb.getString("DisableProgrammingTrack"))); 078 disableProgrammingTrack.setSelected(PaneProgFrame.getDisableProgrammingTrack()); 079 disableProgrammingTrack.addItemListener((ItemEvent e) -> { 080 InstanceManager.getDefault(ProgrammerConfigManager.class).setDisableProgrammingTrack(disableProgrammingTrack.isSelected()); 081 }); 082 083 advancedPanel.add(disableProgrammingOnMain = new JCheckBox(this.apb.getString("DisableProgrammingOnMain"))); 084 disableProgrammingOnMain.setSelected(PaneProgFrame.getDisableProgrammingOnMain()); 085 disableProgrammingOnMain.addItemListener((ItemEvent e) -> { 086 InstanceManager.getDefault(ProgrammerConfigManager.class).setDisableProgrammingOnMain(disableProgrammingOnMain.isSelected()); 087 }); 088 089 this.add(advancedPanel); 090 this.add(Box.createVerticalGlue()); 091 } 092 JComboBox<String> programmerBox; 093 094 @CheckForNull 095 public String getSelectedItem() { 096 return (String) programmerBox.getSelectedItem(); 097 } 098 099 public JPanel getAdvancedPanel() { 100 return advancedPanel; 101 } 102 103 JPanel advancedPanel; 104 JCheckBox showEmptyTabs; 105 JCheckBox dontDetachPanes; 106 JCheckBox showCvNums; 107 JCheckBox canCacheDefault; 108 JCheckBox doConfirmRead; 109 JCheckBox disableProgrammingTrack; 110 JCheckBox disableProgrammingOnMain; 111 112 public boolean getShowEmptyTabs() { 113 return showEmptyTabs.isSelected(); 114 } 115 116 public boolean getDontDetachPanes() { 117 return dontDetachPanes.isSelected(); 118 } 119 120 public boolean getShowCvNums() { 121 return showCvNums.isSelected(); 122 } 123 124 public boolean getCanCacheDefault() { 125 return canCacheDefault.isSelected(); 126 } 127 128 public boolean getDoConfirmRead() { 129 return doConfirmRead.isSelected(); 130 } 131 132 @Override 133 public String getPreferencesItem() { 134 return "ROSTER"; // NOI18N 135 } 136 137 @Override 138 public String getPreferencesItemText() { 139 return this.apb.getString("MenuRoster"); // NOI18N 140 } 141 142 @Override 143 public String getTabbedPreferencesTitle() { 144 return this.apb.getString("TabbedLayoutProgrammer"); // NOI18N 145 } 146 147 @Override 148 public String getLabelKey() { 149 return this.apb.getString("LabelTabbedLayoutProgrammer"); // NOI18N 150 } 151 152 @Override 153 public JComponent getPreferencesComponent() { 154 return this; 155 } 156 157 @Override 158 public boolean isPersistant() { 159 return true; 160 } 161 162 @Override 163 public String getPreferencesTooltip() { 164 return null; 165 } 166 167 @Override 168 public void savePreferences() { 169 InstanceManager.getDefault(ProgrammerConfigManager.class).savePreferences(ProfileManager.getDefault().getActiveProfile()); 170 } 171 172 @Override 173 public boolean isDirty() { 174 String programmer = this.getSelectedItem(); 175 return (this.getShowEmptyTabs() != PaneProgFrame.getShowEmptyPanes() 176 || this.getDontDetachPanes() != PaneProgFrame.getDontDetachPanes() 177 || this.getShowCvNums() != PaneProgFrame.getShowCvNumbers() 178 || this.getCanCacheDefault() != PaneProgFrame.getCanCacheDefault() 179 || this.getDoConfirmRead() != PaneProgFrame.getDoConfirmRead() 180 || ((programmer != null) 181 ? !programmer.equals(ProgDefault.getDefaultProgFile()) 182 : ProgDefault.getDefaultProgFile() != null)); 183 } 184 185 @Override 186 public boolean isRestartRequired() { 187 return this.isDirty(); 188 } 189 190 @Override 191 public boolean isPreferencesValid() { 192 return true; // no validity checking performed 193 } 194}