diff --git a/pdex/src/processing/mode/experimental/DebugEditor.java b/pdex/src/processing/mode/experimental/DebugEditor.java
index 5ac4a9811..640589460 100755
--- a/pdex/src/processing/mode/experimental/DebugEditor.java
+++ b/pdex/src/processing/mode/experimental/DebugEditor.java
@@ -22,7 +22,10 @@ import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Component;
+import java.awt.Container;
import java.awt.EventQueue;
+import java.awt.FlowLayout;
+import java.awt.Font;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
@@ -40,8 +43,14 @@ import java.util.concurrent.atomic.AtomicBoolean;
import java.util.logging.Level;
import java.util.logging.Logger;
+import javax.swing.BorderFactory;
import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
import javax.swing.JCheckBoxMenuItem;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
@@ -49,6 +58,7 @@ import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
import javax.swing.SwingWorker;
+import javax.swing.border.Border;
import javax.swing.border.EtchedBorder;
import javax.swing.table.TableModel;
import javax.swing.text.Document;
@@ -59,6 +69,7 @@ import processing.app.Base;
import processing.app.EditorState;
import processing.app.EditorToolbar;
import processing.app.Mode;
+import processing.app.Preferences;
import processing.app.Sketch;
import processing.app.SketchCode;
import processing.app.Toolkit;
@@ -922,7 +933,7 @@ public class DebugEditor extends JavaEditor implements ActionListener {
vi.setTitle(getSketch().getName());
}
// if file location has changed, update autosaver
-// autosaver.reloadAutosaveDir();
+ autosaver.reloadAutosaveDir();
return saved;
}
@@ -1080,36 +1091,95 @@ public class DebugEditor extends JavaEditor implements ActionListener {
public void prepareRun() {
super.prepareRun();
if (!ExperimentalMode.autoSaveEnabled)
- return;
-
+ return;
+
try {
-// if (sketch.isUntitled() && ExperimentalMode.untitledAutoSaveEnabled) {
-// if (handleSave(true))
-// statusTimedNotice("Saved. Running...", 5);
-// else
-// statusTimedNotice("Save Canceled. Running anyway...", 5);
-// }
-// else
- if (sketch.isModified() && !sketch.isUntitled())// TODO: Fix ugly UI
- // TODO: Add to preferences
- {
- Object[] options = { "Save", "Continue Without Saving" };
- int op = JOptionPane
- .showOptionDialog(
- new Frame(),
- "There are unsaved changes in your sketch. Save before proceeding?",
- this.getSketch().getName(), JOptionPane.YES_NO_OPTION,
- JOptionPane.PLAIN_MESSAGE, null, options, options[0]);
- if (op == JOptionPane.YES_OPTION) {
- if (handleSave(true))
- statusTimedNotice("Saved. Running...", 5);
- }
- else
- if (op == JOptionPane.NO_OPTION)
- statusTimedNotice("Not saved. Running...", 5);
+ // if (sketch.isUntitled() &&
+ // ExperimentalMode.untitledAutoSaveEnabled) {
+ // if (handleSave(true))
+ // statusTimedNotice("Saved. Running...", 5);
+ // else
+ // statusTimedNotice("Save Canceled. Running anyway...", 5);
+ // }
+ // else
+ if (sketch.isModified() && !sketch.isUntitled()) {
+ if (ExperimentalMode.autoSavePromptEnabled) {
+ final JDialog autoSaveDialog = new JDialog(
+ base.getActiveEditor(), this.getSketch().getName(),
+ true);
+ Container container = autoSaveDialog.getContentPane();
+
+ JPanel panel = new JPanel();
+ panel.setBorder(BorderFactory.createEmptyBorder(4, 0, 2, 2));
+ panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
+
+ JPanel panel1 = new JPanel(new FlowLayout(FlowLayout.LEFT));
+ JLabel label = new JLabel(
+ "
There are unsaved"
+ + " changes in your sketch.
"
+ + " Do you want to save it before"
+ + " running? ");
+ label.setFont(new Font(label.getFont().getName(),
+ Font.PLAIN, label.getFont().getSize() + 1));
+ panel1.add(label);
+ panel.add(panel1);
+ final JCheckBox dontRedisplay = new JCheckBox(
+ "Remember this decision");
+
+ panel1 = new JPanel(new FlowLayout(
+ FlowLayout.CENTER, 8, 2));
+ JButton button = new JButton("Save and Run");
+ button.addActionListener(new ActionListener() {
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ if (handleSave(true))
+ statusTimedNotice("Saved. Running...", 5);
+ if (dontRedisplay.isSelected()) {
+ ExperimentalMode.autoSavePromptEnabled = !dontRedisplay
+ .isSelected();
+ ExperimentalMode.defaultAutoSaveEnabled = true;
+ dmode.savePreferences();
+ }
+ autoSaveDialog.dispose();
+ }
+ });
+ panel1.add(button);
+ button = new JButton("Run, Don't Save");
+ button.addActionListener(new ActionListener() {
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ statusTimedNotice("Not saved. Running...", 5);
+ if (dontRedisplay.isSelected()) {
+ ExperimentalMode.autoSavePromptEnabled = !dontRedisplay
+ .isSelected();
+ ExperimentalMode.defaultAutoSaveEnabled = false;
+ dmode.savePreferences();
+ }
+ autoSaveDialog.dispose();
+ }
+ });
+ panel1.add(button);
+ panel.add(panel1);
+
+ panel1 = new JPanel();
+ panel1.setLayout(new FlowLayout(FlowLayout.CENTER, 0, 0));
+ panel1.add(dontRedisplay);
+ panel.add(panel1);
+
+ container.add(panel);
+
+ autoSaveDialog.setResizable(false);
+ autoSaveDialog.pack();
+ autoSaveDialog
+ .setLocationRelativeTo(base.getActiveEditor());
+ autoSaveDialog.setVisible(true);
+
+ } else if (ExperimentalMode.defaultAutoSaveEnabled)
+ handleSave(true);
}
} catch (Exception e) {
- // show the error as a message in the window
statusError(e);
}
}
@@ -1126,13 +1196,13 @@ public class DebugEditor extends JavaEditor implements ActionListener {
@Override
protected Void doInBackground() throws Exception {
- statusNotice(msg);
- try {
- Thread.sleep(secs * 1000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- statusEmpty();
+ statusNotice(msg);
+ try {
+ Thread.sleep(secs * 1000);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ statusEmpty();
return null;
}
};
diff --git a/pdex/src/processing/mode/experimental/ExperimentalMode.java b/pdex/src/processing/mode/experimental/ExperimentalMode.java
index 29941ad87..26cb99f56 100755
--- a/pdex/src/processing/mode/experimental/ExperimentalMode.java
+++ b/pdex/src/processing/mode/experimental/ExperimentalMode.java
@@ -128,14 +128,16 @@ public class ExperimentalMode extends JavaMode {
volatile public static boolean errorCheckEnabled = true, warningsEnabled = true,
codeCompletionsEnabled = true, debugOutputEnabled = false, errorLogsEnabled = false,
- autoSaveEnabled = true; //,untitledAutoSaveEnabled;
+ autoSaveEnabled = true, autoSavePromptEnabled = true,
+ defaultAutoSaveEnabled = true; // ,untitledAutoSaveEnabled;
public static int autoSaveInterval = 3; //in minutes
public static final String prefErrorCheck = "pdex.errorCheckEnabled",
prefWarnings = "pdex.warningsEnabled",
prefCodeCompletionEnabled = "pdex.ccEnabled",
prefDebugOP = "pdex.dbgOutput", prefErrorLogs = "pdex.writeErrorLogs", prefAutoSaveInterval = "pdex.autoSaveInterval",
- prefAutoSave = "pdex.autoSaveEnabled"; //prefUntitledAutoSave = "pdex.autoSave.untitledAutoSaveEnabled"
+ prefAutoSave = "pdex.autoSave.autoSaveEnabled", // prefUntitledAutoSave = "pdex.autoSave.untitledAutoSaveEnabled",
+ prefAutoSavePrompt = "pdex.autoSave.promptDisplay", prefDefaultAutoSave = "pdex.autoSave.autoSaveByDefault";
public void loadPreferences(){
log("Load PDEX prefs");
@@ -148,6 +150,8 @@ public class ExperimentalMode extends JavaMode {
autoSaveInterval = Preferences.getInteger(prefAutoSaveInterval);
// untitledAutoSaveEnabled = Preferences.getBoolean(prefUntitledAutoSave);
autoSaveEnabled = Preferences.getBoolean(prefAutoSave);
+ autoSavePromptEnabled = Preferences.getBoolean(prefAutoSavePrompt);
+ defaultAutoSaveEnabled = Preferences.getBoolean(prefDefaultAutoSave);
}
public void savePreferences(){
@@ -160,6 +164,8 @@ public class ExperimentalMode extends JavaMode {
Preferences.setInteger(prefAutoSaveInterval,autoSaveInterval);
// Preferences.setBoolean(prefUntitledAutoSave,untitledAutoSaveEnabled);
Preferences.setBoolean(prefAutoSave,autoSaveEnabled);
+ Preferences.setBoolean(prefAutoSavePrompt, autoSavePromptEnabled);
+ Preferences.setBoolean(prefDefaultAutoSave, defaultAutoSaveEnabled);
}
public void ensurePrefsExist(){
@@ -179,6 +185,10 @@ public class ExperimentalMode extends JavaMode {
// Preferences.setBoolean(prefUntitledAutoSave,untitledAutoSaveEnabled);
if(Preferences.get(prefAutoSave) == null)
Preferences.setBoolean(prefAutoSave,autoSaveEnabled);
+ if(Preferences.get(prefAutoSavePrompt) == null)
+ Preferences.setBoolean(prefAutoSavePrompt,autoSavePromptEnabled);
+ if(Preferences.get(prefDefaultAutoSave) == null)
+ Preferences.setBoolean(prefDefaultAutoSave,defaultAutoSaveEnabled);
}