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(showCvNums = new JCheckBox(this.apb.getString("ProgShowCVInTips"))); 052 showCvNums.setSelected(PaneProgFrame.getShowCvNumbers()); 053 showCvNums.addItemListener((ItemEvent e) -> { 054 InstanceManager.getDefault(ProgrammerConfigManager.class).setShowCvNumbers(showCvNums.isSelected()); 055 }); 056 057 advancedPanel.add(canCacheDefault = new JCheckBox(this.apb.getString("ProgCanCacheDefault"))); 058 canCacheDefault.setSelected(PaneProgFrame.getCanCacheDefault()); 059 canCacheDefault.addItemListener((ItemEvent e) -> { 060 InstanceManager.getDefault(ProgrammerConfigManager.class).setCanCacheDefault(canCacheDefault.isSelected()); 061 }); 062 063 advancedPanel.add(doConfirmRead = new JCheckBox(this.apb.getString("ProgDoConfirmRead"))); 064 doConfirmRead.setSelected(PaneProgFrame.getDoConfirmRead()); 065 doConfirmRead.addItemListener((ItemEvent e) -> { 066 InstanceManager.getDefault(ProgrammerConfigManager.class).setDoConfirmRead(doConfirmRead.isSelected()); 067 }); 068 069 advancedPanel.add(new JSeparator(JSeparator.HORIZONTAL)); 070 071 advancedPanel.add(disableProgrammingTrack = new JCheckBox(this.apb.getString("DisableProgrammingTrack"))); 072 disableProgrammingTrack.setSelected(PaneProgFrame.getDisableProgrammingTrack()); 073 disableProgrammingTrack.addItemListener((ItemEvent e) -> { 074 InstanceManager.getDefault(ProgrammerConfigManager.class).setDisableProgrammingTrack(disableProgrammingTrack.isSelected()); 075 }); 076 077 advancedPanel.add(disableProgrammingOnMain = new JCheckBox(this.apb.getString("DisableProgrammingOnMain"))); 078 disableProgrammingOnMain.setSelected(PaneProgFrame.getDisableProgrammingOnMain()); 079 disableProgrammingOnMain.addItemListener((ItemEvent e) -> { 080 InstanceManager.getDefault(ProgrammerConfigManager.class).setDisableProgrammingOnMain(disableProgrammingOnMain.isSelected()); 081 }); 082 083 this.add(advancedPanel); 084 this.add(Box.createVerticalGlue()); 085 } 086 JComboBox<String> programmerBox; 087 088 @CheckForNull 089 public String getSelectedItem() { 090 return (String) programmerBox.getSelectedItem(); 091 } 092 093 public JPanel getAdvancedPanel() { 094 return advancedPanel; 095 } 096 097 JPanel advancedPanel; 098 JCheckBox showEmptyTabs; 099 JCheckBox showCvNums; 100 JCheckBox canCacheDefault; 101 JCheckBox doConfirmRead; 102 JCheckBox disableProgrammingTrack; 103 JCheckBox disableProgrammingOnMain; 104 105 public boolean getShowEmptyTabs() { 106 return showEmptyTabs.isSelected(); 107 } 108 109 public boolean getShowCvNums() { 110 return showCvNums.isSelected(); 111 } 112 113 public boolean getCanCacheDefault() { 114 return canCacheDefault.isSelected(); 115 } 116 117 public boolean getDoConfirmRead() { 118 return doConfirmRead.isSelected(); 119 } 120 121 @Override 122 public String getPreferencesItem() { 123 return "ROSTER"; // NOI18N 124 } 125 126 @Override 127 public String getPreferencesItemText() { 128 return this.apb.getString("MenuRoster"); // NOI18N 129 } 130 131 @Override 132 public String getTabbedPreferencesTitle() { 133 return this.apb.getString("TabbedLayoutProgrammer"); // NOI18N 134 } 135 136 @Override 137 public String getLabelKey() { 138 return this.apb.getString("LabelTabbedLayoutProgrammer"); // NOI18N 139 } 140 141 @Override 142 public JComponent getPreferencesComponent() { 143 return this; 144 } 145 146 @Override 147 public boolean isPersistant() { 148 return true; 149 } 150 151 @Override 152 public String getPreferencesTooltip() { 153 return null; 154 } 155 156 @Override 157 public void savePreferences() { 158 InstanceManager.getDefault(ProgrammerConfigManager.class).savePreferences(ProfileManager.getDefault().getActiveProfile()); 159 } 160 161 @Override 162 public boolean isDirty() { 163 String programmer = this.getSelectedItem(); 164 return (this.getShowEmptyTabs() != PaneProgFrame.getShowEmptyPanes() 165 || this.getShowCvNums() != PaneProgFrame.getShowCvNumbers() 166 || this.getCanCacheDefault() != PaneProgFrame.getCanCacheDefault() 167 || this.getDoConfirmRead() != PaneProgFrame.getDoConfirmRead() 168 || ((programmer != null) 169 ? !programmer.equals(ProgDefault.getDefaultProgFile()) 170 : ProgDefault.getDefaultProgFile() != null)); 171 } 172 173 @Override 174 public boolean isRestartRequired() { 175 return this.isDirty(); 176 } 177 178 @Override 179 public boolean isPreferencesValid() { 180 return true; // no validity checking performed 181 } 182}