In Jskad, you can now clear the preferences and return to default values.
This commit is contained in:
parent
fbb6245fdb
commit
45b87b0fb4
2 changed files with 68 additions and 5 deletions
|
@ -121,9 +121,14 @@ public class Jskad extends JPanel implements DocumentListener {
|
|||
private Jskad(LayoutManager lm, boolean isDB) { super(lm, isDB); }
|
||||
|
||||
/** Saves user preferences to disk if possible. */
|
||||
private static void savePreferencesAction() {
|
||||
private void savePreferencesAction() {
|
||||
try {
|
||||
ThdlOptions.saveUserPreferences();
|
||||
if (!ThdlOptions.saveUserPreferences()) {
|
||||
JOptionPane.showMessageDialog(Jskad.this,
|
||||
"You previously cleared preferences,\nso you cannot now save them.",
|
||||
"Cannot Save User Preferences",
|
||||
JOptionPane.PLAIN_MESSAGE);
|
||||
}
|
||||
} catch (IOException ioe) {
|
||||
System.out.println("IO Exception saving user preferences to " + ThdlOptions.getUserPreferencesPath());
|
||||
ioe.printStackTrace();
|
||||
|
@ -131,6 +136,22 @@ public class Jskad extends JPanel implements DocumentListener {
|
|||
}
|
||||
}
|
||||
|
||||
/** Clears user preferences by deleting the preferences file on
|
||||
disk. Prompts the user to quit and reopen Jskad. */
|
||||
private void clearPreferencesAction() {
|
||||
try {
|
||||
ThdlOptions.clearUserPreferences();
|
||||
} catch (IOException ioe) {
|
||||
System.out.println("IO Exception deleting user preferences file " + ThdlOptions.getUserPreferencesPath());
|
||||
ioe.printStackTrace();
|
||||
ThdlDebug.noteIffyCode();
|
||||
}
|
||||
JOptionPane.showMessageDialog(Jskad.this,
|
||||
"You must now exit this application and restart\nbefore default preferences will take effect.",
|
||||
"Clearing Preferences",
|
||||
JOptionPane.PLAIN_MESSAGE);
|
||||
}
|
||||
|
||||
/** pane displaying Jskad's single HTML help file */
|
||||
private static HTMLPane helpPane;
|
||||
|
||||
|
@ -294,6 +315,17 @@ public class Jskad extends JPanel implements DocumentListener {
|
|||
editMenu.add(preferencesItem);
|
||||
}
|
||||
|
||||
{
|
||||
JMenuItem preferencesItem = new JMenuItem("Clear preferences");
|
||||
preferencesItem.addActionListener(new ThdlActionListener() {
|
||||
public void theRealActionPerformed(ActionEvent e) {
|
||||
clearPreferencesAction();
|
||||
}
|
||||
});
|
||||
editMenu.addSeparator();
|
||||
editMenu.add(preferencesItem);
|
||||
}
|
||||
|
||||
menuBar.add(editMenu);
|
||||
|
||||
JMenu toolsMenu = new JMenu("Tools");
|
||||
|
@ -1172,7 +1204,8 @@ public class Jskad extends JPanel implements DocumentListener {
|
|||
y_size = d.height/4*3;
|
||||
f.setSize(x_size, y_size);
|
||||
f.setLocation(d.width/8, d.height/8);
|
||||
f.getContentPane().add(new Jskad(f));
|
||||
final Jskad jskad = new Jskad(f);
|
||||
f.getContentPane().add(jskad);
|
||||
f.setVisible(true);
|
||||
|
||||
/* Make it so that any time the user exits Jskad by
|
||||
|
@ -1181,7 +1214,7 @@ public class Jskad extends JPanel implements DocumentListener {
|
|||
* correct. */
|
||||
Runtime.getRuntime().addShutdownHook(new Thread() {
|
||||
public void run() {
|
||||
savePreferencesAction();
|
||||
jskad.savePreferencesAction();
|
||||
}
|
||||
}
|
||||
);
|
||||
|
|
|
@ -372,12 +372,40 @@ public final class ThdlOptions {
|
|||
}
|
||||
}
|
||||
|
||||
/** Deletes the user's preferences file, a file whose path is the
|
||||
* value of {@link #getUserPreferencesPath()}. You must restart
|
||||
* the application before this will take effect.
|
||||
*
|
||||
* @throws IOException if an IO or security exception occurs
|
||||
* while deleting from disk. */
|
||||
public static void clearUserPreferences() throws IOException {
|
||||
// Avoid saving the preferences to disk at program exit. Do
|
||||
// this first in case an exception is thrown during deletion.
|
||||
userProperties = null;
|
||||
|
||||
File pf = new File(getUserPreferencesPath());
|
||||
|
||||
try {
|
||||
if (pf.exists() && !pf.delete()) {
|
||||
throw new IOException("Could not delete the preferences file "
|
||||
+ pf.getAbsolutePath());
|
||||
}
|
||||
} catch (SecurityException e) {
|
||||
throw new IOException("Could not delete the preferences file because a SecurityManager is in place and your security policy does not allow deleting "
|
||||
+ pf.getAbsolutePath());
|
||||
}
|
||||
}
|
||||
|
||||
/** Saves the user's preferences to a file whose path is the value
|
||||
* of {@link #getUserPreferencesPath()}. You must call
|
||||
* <code>setUserPreference(..)</code> for this to be effective.
|
||||
*
|
||||
* @return true on success, false if no preferences exist to be
|
||||
* saved, such as after calling clearUserPreferences()
|
||||
*
|
||||
* @throws IOException if an IO exception occurs while writing to
|
||||
* the disk. */
|
||||
public static void saveUserPreferences() throws IOException {
|
||||
public static boolean saveUserPreferences() throws IOException {
|
||||
if (null != userProperties) {
|
||||
userProperties.store(new FileOutputStream(getUserPreferencesPath()),
|
||||
" This file was automatically created by a THDL tool.\n"
|
||||
|
@ -400,7 +428,9 @@ public final class ThdlOptions {
|
|||
+ "# preferences mechanism at this time. Yell for it!\n"
|
||||
+ "# \n"
|
||||
+ "# Created at:"); // DLC FIXME: document the preferences mechanism.
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/** This returns the location of the user's preferences file.
|
||||
|
|
Loading…
Reference in a new issue