001package arcommon.ui.window; 002 003import java.awt.Window; 004import java.awt.event.ActionEvent; 005import java.awt.event.ActionListener; 006import java.awt.event.ComponentAdapter; 007import java.awt.event.ComponentEvent; 008 009import javax.swing.SwingUtilities; 010 011import arcommon.MyTimer; 012import arcommon.persistens.AbstractSettingWithFrameDialogAndTableSettings; 013import arcommon.persistens.DialogSettings; 014import arcommon.persistens.SettingsUtil; 015import arcommon.ui.other.GUIUtil; 016 017public abstract class AbstractSettingsJDialog extends AbstractJDialog { 018 019 private DialogSettings dialogSettings; 020 private String dialogSettingsId; 021 private boolean created; 022 023 public AbstractSettingsJDialog(String title) { 024 this(title, true); 025 } 026 027 public AbstractSettingsJDialog(String title, boolean closeOnESC) { 028 this(title, null, closeOnESC); 029 } 030 031 public AbstractSettingsJDialog(String title, String pdialogSettingsId) { 032 this(title, pdialogSettingsId, true); 033 } 034 035 public AbstractSettingsJDialog(String title, String pdialogSettingsId, boolean closeOnESC) { 036 super(title, closeOnESC); 037 038 init(pdialogSettingsId, true); 039 } 040 041 public AbstractSettingsJDialog(Window owner, String title, boolean closeOnESC, boolean useSettings) { 042 super(owner, title, closeOnESC); 043 044 init(null, useSettings); 045 } 046 047 private void init(String pdialogSettingsId, boolean useSettings) { 048 if (useSettings) { 049 if (pdialogSettingsId == null) { 050 setDialogSettingsIdAndLoadDialogSettings(getClass().getName()); 051 } else { 052 setDialogSettingsIdAndLoadDialogSettings(pdialogSettingsId); 053 } 054 } 055 056 addComponentListener( 057 new ComponentAdapter() { 058 public void componentResized(ComponentEvent e) { 059 eventComponentResize(); 060 } 061 public void componentMoved(ComponentEvent e) { 062 eventComponentMoved(); 063 } 064 } 065 ); 066 } 067 068 private void setDialogSettingsIdAndLoadDialogSettings(String pdialogSettingsId) { 069 dialogSettingsId = pdialogSettingsId; 070 071 if (dialogSettingsId != null) { 072 AbstractSettingWithFrameDialogAndTableSettings abstractSettingWithFrameDialogAndTableSettings = ((AbstractSettingWithFrameDialogAndTableSettings)SettingsUtil.load()); 073 dialogSettings = abstractSettingWithFrameDialogAndTableSettings.getDialogSettings(dialogSettingsId, false); 074 } 075 } 076 077 public DialogSettings getDialogSettings() { 078 return dialogSettings; 079 } 080 081 public void setDialogSettings(DialogSettings pdialogSettings) { 082 dialogSettings = pdialogSettings; 083 } 084 085 public void saveDialogSettings() { 086 AbstractSettingWithFrameDialogAndTableSettings abstractSettingWithFrameDialogAndTableSettings = ((AbstractSettingWithFrameDialogAndTableSettings)SettingsUtil.load()); 087 abstractSettingWithFrameDialogAndTableSettings.saveDialogSettings(dialogSettingsId, this); 088 } 089 090 private boolean ensureDialogSettings() { 091 if (!created) { 092 return false; 093 } 094 if (dialogSettings != null) { 095 return true; 096 } 097 if (dialogSettingsId == null) { 098 return false; 099 } 100 101 AbstractSettingWithFrameDialogAndTableSettings abstractSettingWithFrameDialogAndTableSettings = ((AbstractSettingWithFrameDialogAndTableSettings)SettingsUtil.load()); 102 dialogSettings = abstractSettingWithFrameDialogAndTableSettings.getDialogSettings(dialogSettingsId, true); 103 104 return true; 105 } 106 107 private void eventComponentResize() { 108 if (!ensureDialogSettings()) { 109 return ; 110 } 111 dialogSettings.saveDialogSettings(this); 112 } 113 114 private void eventComponentMoved() { 115 if (!ensureDialogSettings()) { 116 return ; 117 } 118 dialogSettings.saveDialogSettings(this); 119 } 120 121 public void setVisible(boolean visible) { 122 if (visible) { 123 if (dialogSettings != null) { 124 dialogSettings.loadDialogSettings(this); 125 } else { 126 GUIUtil.packAndCenterOnScreen(this); 127 } 128 } 129 130 // Must be done before super.setVisible(visible) on modal dialogs 131 if (visible) { 132 MyTimer.addActionListener(10, new ActionListener() { 133 @Override 134 public void actionPerformed(ActionEvent e) { 135 MyTimer.removeActionListener(this); 136 Runnable runnable = new Runnable() { 137 public void run() { 138 created = true; 139 } 140 }; 141 SwingUtilities.invokeLater(runnable); 142 } 143 }); 144 } 145 146 super.setVisible(visible); 147 } 148 149 private static final long serialVersionUID = 1609495835753943920L; 150}