001package apps.gui3.tabbedpreferences; 002 003import java.awt.event.WindowEvent; 004import java.awt.event.WindowListener; 005 006import javax.swing.JDialog; 007import javax.swing.SwingUtilities; 008import javax.swing.WindowConstants; 009 010import jmri.*; 011import jmri.swing.PreferencesPanel; 012import jmri.util.swing.JmriJOptionPane; 013 014/** 015 * Provide a Connection preferences dialog. 016 * <p> 017 * References the status of an {@link EditConnectionPreferences} object that 018 * is created (via new()) as part of this constructor. 019 * 020 * @author Kevin Dickerson Copyright 2010 021 */ 022public final class EditConnectionPreferencesDialog extends JDialog implements WindowListener { 023 024 final EditConnectionPreferences editConnectionPreferences; 025 boolean restartProgram = false; 026 027 @Override 028 public String getTitle() { 029 return editConnectionPreferences.getTitle(); 030 } 031 032 public boolean isMultipleInstances() { 033 return true; 034 } 035 036 /** 037 * Displays a dialog for editing the connections. 038 * 039 * @return true if the program should restart, false if the program should quit. 040 */ 041 public static boolean showDialog() { 042 if (! InstanceManager.getDefault(PermissionManager.class) 043 .checkPermission(PermissionsSystemAdmin.PERMISSION_EDIT_PREFERENCES)) { 044 return false; 045 } 046 EditConnectionPreferencesDialog dialog = new EditConnectionPreferencesDialog(); 047 SwingUtilities.updateComponentTreeUI(dialog); // hack because sometimes this was created before L&F was set? 048 dialog.pack(); 049 dialog.setBounds( 050 (int) ( jmri.util.JmriJFrame.getScreenDimensions().get(0).getBounds().getSize().getWidth() * 0.10 ), 051 (int) ( jmri.util.JmriJFrame.getScreenDimensions().get(0).getBounds().getSize().getHeight() * 0.10 ), 052 (int) ( jmri.util.JmriJFrame.getScreenDimensions().get(0).getBounds().getSize().getWidth() * 0.80 ), 053 (int) (jmri.util.JmriJFrame.getScreenDimensions().get(0).getBounds().getSize().getHeight()* 0.80 )); 054 dialog.setVisible(true); 055 return dialog.restartProgram; 056 } 057 058 public EditConnectionPreferencesDialog() { 059 super(); 060 setModal(true); 061 editConnectionPreferences = new EditConnectionPreferences(this); 062 editConnectionPreferences.init(); 063 add(editConnectionPreferences); 064// addHelpMenu("package.apps.TabbedPreferences", true); // NOI18N 065 setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); 066 addWindowListener(EditConnectionPreferencesDialog.this); 067 } 068 069 public void gotoPreferenceItem(String item, String sub) { 070 editConnectionPreferences.gotoPreferenceItem(item, sub); 071 } 072 073 @Override 074 public void windowClosing(WindowEvent e) { 075 ShutDownManager sdm = InstanceManager.getDefault(ShutDownManager.class); 076 if (!editConnectionPreferences.isPreferencesValid() && !sdm.isShuttingDown()) { 077 for (PreferencesPanel panel : editConnectionPreferences.getPreferencesPanels().values()) { 078 if (!panel.isPreferencesValid()) { 079 switch (JmriJOptionPane.showConfirmDialog(this, 080 Bundle.getMessage("InvalidPreferencesMessage", panel.getTabbedPreferencesTitle()), 081 Bundle.getMessage("InvalidPreferencesTitle"), 082 JmriJOptionPane.YES_NO_OPTION, 083 JmriJOptionPane.ERROR_MESSAGE)) { 084 case JmriJOptionPane.YES_OPTION: 085 // abort window closing and return to broken preferences 086 editConnectionPreferences.gotoPreferenceItem(panel.getPreferencesItem(), panel.getTabbedPreferencesTitle()); 087 return; 088 default: 089 // do nothing 090 break; 091 } 092 } 093 } 094 } 095 if (editConnectionPreferences.isDirty()) { 096 switch (JmriJOptionPane.showConfirmDialog(this, 097 Bundle.getMessage("UnsavedChangesMessage", editConnectionPreferences.getTitle()), // NOI18N 098 Bundle.getMessage("UnsavedChangesTitle"), // NOI18N 099 JmriJOptionPane.YES_NO_CANCEL_OPTION, 100 JmriJOptionPane.QUESTION_MESSAGE)) { 101 case JmriJOptionPane.YES_OPTION: 102 // save preferences 103 editConnectionPreferences.savePressed(editConnectionPreferences.invokeSaveOptions()); 104 break; 105 case JmriJOptionPane.NO_OPTION: 106 // do nothing 107 break; 108 case JmriJOptionPane.CANCEL_OPTION: 109 default: 110 // abort window closing 111 return; 112 } 113 } 114 this.setVisible(false); 115 } 116 117 @Override 118 public void windowOpened(WindowEvent e) { 119 } 120 121 @Override 122 public void windowClosed(WindowEvent e) { 123 } 124 125 @Override 126 public void windowIconified(WindowEvent e) { 127 } 128 129 @Override 130 public void windowDeiconified(WindowEvent e) { 131 } 132 133 @Override 134 public void windowActivated(WindowEvent e) { 135 } 136 137 @Override 138 public void windowDeactivated(WindowEvent e) { 139 } 140}