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