001package jmri.jmrit.logixng.tools.swing; 002 003import jmri.jmrit.logixng.LogixNGPreferences; 004import jmri.jmrit.logixng.implementation.DefaultLogixNGPreferences; 005 006import java.awt.FlowLayout; 007import java.awt.GridLayout; 008 009import javax.swing.*; 010 011import org.openide.util.lookup.ServiceProvider; 012 013import jmri.InstanceManager; 014import jmri.jmrit.logixng.MaleSocket.ErrorHandlingType; 015import jmri.jmrit.logixng.actions.IfThenElse; 016// import jmri.swing.JTitledSeparator; 017import jmri.swing.PreferencesPanel; 018import jmri.util.swing.JComboBoxUtil; 019 020/** 021 * Preferences panel for LogixNG 022 * 023 * @author Daniel Bergqvist Copyright 2018 024 */ 025@ServiceProvider(service = PreferencesPanel.class) 026public class LogixNGPreferencesPanel extends JPanel implements PreferencesPanel { 027 028 private final DefaultLogixNGPreferences preferences; 029 030 JCheckBox _startLogixNGOnLoadCheckBox; 031 JCheckBox _installDebuggerCheckBox; 032 JCheckBox _showSystemUserNamesCheckBox; 033 JCheckBox _treeEditorHighlightRow; 034 JCheckBox _showSystemNameInException; 035 JCheckBox _strictTypingGlobalVariables; 036 JCheckBox _strictTypingLocalVariables; 037 private JComboBox<ErrorHandlingType> _errorHandlingComboBox; 038 private JComboBox<IfThenElse.ExecuteType> _ifThenElseExecuteTypeDefault; 039 040 041 public LogixNGPreferencesPanel() { 042 LogixNGPreferences prefs = InstanceManager.getDefault(LogixNGPreferences.class); 043 if (!(prefs instanceof DefaultLogixNGPreferences)) { 044 throw new RuntimeException("LogixNGPreferences is not of type DefaultLogixNGPreferences"); 045 } 046 preferences = (DefaultLogixNGPreferences)prefs; 047 initGUI(); 048 } 049 050 private void initGUI() { 051 setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS)); 052// add(new JTitledSeparator(Bundle.getMessage("TitleStartupSettingsPanel"))); 053 add(getStartupPanel()); 054 } 055 056 /** 057 * set the local prefs to match the GUI Local prefs are independent from the 058 * singleton instance prefs. 059 * 060 * @return true if set, false if values are unacceptable. 061 */ 062 private boolean setValues() { 063 boolean didSet = true; 064 preferences.setStartLogixNGOnStartup(_startLogixNGOnLoadCheckBox.isSelected()); 065 preferences.setInstallDebugger(_installDebuggerCheckBox.isSelected()); 066 preferences.setShowSystemUserNames(_showSystemUserNamesCheckBox.isSelected()); 067 preferences.setTreeEditorHighlightRow(_treeEditorHighlightRow.isSelected()); 068 preferences.setErrorHandlingType(_errorHandlingComboBox.getItemAt( 069 _errorHandlingComboBox.getSelectedIndex())); 070 preferences.setShowSystemNameInException(_showSystemNameInException.isSelected()); 071 preferences.setStrictTypingGlobalVariables(_strictTypingGlobalVariables.isSelected()); 072 preferences.setStrictTypingLocalVariables(_strictTypingLocalVariables.isSelected()); 073 preferences.setIfThenElseExecuteTypeDefault(_ifThenElseExecuteTypeDefault.getItemAt( 074 _ifThenElseExecuteTypeDefault.getSelectedIndex())); 075 return didSet; 076 } 077 078 private JPanel getStartupPanel() { 079 JPanel panel = new JPanel(); 080 081 _startLogixNGOnLoadCheckBox = new JCheckBox(Bundle.getMessage("LabelStartLogixNGOnLoad")); 082 _startLogixNGOnLoadCheckBox.setToolTipText(Bundle.getMessage("ToolTipStartLogixNGOnLoad")); 083 084 _installDebuggerCheckBox = new JCheckBox(Bundle.getMessage("LabelInstallDebugger")); 085 _installDebuggerCheckBox.setToolTipText(Bundle.getMessage("ToolTipLabelInstallDebugger")); 086 087 _showSystemUserNamesCheckBox = new JCheckBox(Bundle.getMessage("LabelShowSystemUserNames")); 088 _showSystemUserNamesCheckBox.setToolTipText(Bundle.getMessage("ToolTipLabeShowSystemUserNames")); 089 090 _treeEditorHighlightRow = new JCheckBox(Bundle.getMessage("LabelTreeEditorHighlightRow")); 091 _treeEditorHighlightRow.setToolTipText(Bundle.getMessage("ToolTipTreeEditorHighlightRow")); 092 093 _showSystemNameInException = new JCheckBox(Bundle.getMessage("LabelShowSystemNameInException")); 094 _showSystemNameInException.setToolTipText(Bundle.getMessage("ToolTipShowSystemNameInException")); 095 096 _strictTypingGlobalVariables = new JCheckBox(Bundle.getMessage("LabelStrictTypingGlobalVariables")); 097 _strictTypingGlobalVariables.setToolTipText(Bundle.getMessage("ToolTipStrictTypingGlobalVariables")); 098 099 _strictTypingLocalVariables = new JCheckBox(Bundle.getMessage("LabelStrictTypingLocalVariables")); 100 _strictTypingLocalVariables.setToolTipText(Bundle.getMessage("ToolTipStrictTypingLocalVariables")); 101 102 JPanel gridPanel = new JPanel(new GridLayout(0, 1)); 103 104 gridPanel.add(_startLogixNGOnLoadCheckBox); 105 gridPanel.add(_installDebuggerCheckBox); 106 gridPanel.add(_showSystemUserNamesCheckBox); 107 gridPanel.add(_treeEditorHighlightRow); 108 gridPanel.add(Box.createVerticalStrut(2)); 109 gridPanel.add(_strictTypingGlobalVariables); 110 gridPanel.add(_strictTypingLocalVariables); 111 gridPanel.add(Box.createVerticalStrut(2)); 112 gridPanel.add(_showSystemNameInException); 113 114 _startLogixNGOnLoadCheckBox.setSelected(preferences.getStartLogixNGOnStartup()); 115 _installDebuggerCheckBox.setSelected(preferences.getInstallDebugger()); 116 _showSystemUserNamesCheckBox.setSelected(preferences.getShowSystemUserNames()); 117 _treeEditorHighlightRow.setSelected(preferences.getTreeEditorHighlightRow()); 118 _showSystemNameInException.setSelected(preferences.getShowSystemNameInException()); 119 _strictTypingGlobalVariables.setSelected(preferences.getStrictTypingGlobalVariables()); 120 _strictTypingLocalVariables.setSelected(preferences.getStrictTypingLocalVariables()); 121 122 gridPanel.add(Box.createVerticalStrut(2)); 123 gridPanel.add(new JLabel(Bundle.getMessage("LabelDefaultErrorHandling"))); 124 _errorHandlingComboBox = new JComboBox<>(); 125 for (ErrorHandlingType type : ErrorHandlingType.values()) { 126 // ErrorHandlingType.Default cannot be used as default 127 if (type != ErrorHandlingType.Default) { 128 _errorHandlingComboBox.addItem(type); 129 if (preferences.getErrorHandlingType() == type) { 130 _errorHandlingComboBox.setSelectedItem(type); 131 } 132 } 133 } 134 JComboBoxUtil.setupComboBoxMaxRows(_errorHandlingComboBox); 135 gridPanel.add(_errorHandlingComboBox); 136 137 138 gridPanel.add(Box.createVerticalStrut(2)); 139 gridPanel.add(new JLabel(Bundle.getMessage("LabelDefaultIfThenElseExecution"))); 140 _ifThenElseExecuteTypeDefault = new JComboBox<>(); 141 for (IfThenElse.ExecuteType type : IfThenElse.ExecuteType.values()) { 142 _ifThenElseExecuteTypeDefault.addItem(type); 143 if (preferences.getIfThenElseExecuteTypeDefault() == type) { 144 _ifThenElseExecuteTypeDefault.setSelectedItem(type); 145 } 146 } 147 JComboBoxUtil.setupComboBoxMaxRows(_ifThenElseExecuteTypeDefault); 148 gridPanel.add(_ifThenElseExecuteTypeDefault); 149 150 panel.setLayout(new FlowLayout(FlowLayout.CENTER, 40, 0)); 151 panel.add(gridPanel); 152 153 return panel; 154 } 155 156 @Override 157 public String getPreferencesItem() { 158 return "LOGIXNG"; // NOI18N 159 } 160 161 @Override 162 public String getPreferencesItemText() { 163 return Bundle.getMessage("MenuLogixNG"); // NOI18N 164 } 165 166 @Override 167 public String getTabbedPreferencesTitle() { 168 return getPreferencesItemText(); 169 } 170 171 @Override 172 public String getLabelKey() { 173 return null; 174 } 175 176 @Override 177 public JComponent getPreferencesComponent() { 178 return this; 179 } 180 181 @Override 182 public boolean isPersistant() { 183 return false; 184 } 185 186 @Override 187 public String getPreferencesTooltip() { 188 return null; 189 } 190 191 @Override 192 public void savePreferences() { 193 if (setValues()) { 194 preferences.save(); 195 } 196 } 197 198 @Override 199 public boolean isDirty() { 200 return preferences.isDirty(); 201 } 202 203 @Override 204 public boolean isRestartRequired() { 205 return preferences.isRestartRequired(); 206 } 207 208 @Override 209 public boolean isPreferencesValid() { 210 return true; // no validity checking performed 211 } 212 213}