diff --git a/processing/app/PdeBase.java b/processing/app/PdeBase.java index ca4aad8f2..f690bdac0 100644 --- a/processing/app/PdeBase.java +++ b/processing/app/PdeBase.java @@ -92,8 +92,9 @@ public class PdeBase implements ActionListener { //rebuildSketchbookMenu(openMenu); menu.add(sketchbookMenu); menu.add(new MenuItem("Save", new MenuShortcut('S'))); - menu.add(new MenuItem("Rename", new MenuShortcut('S', true))); - menu.add(new MenuItem("Duplicate", new MenuShortcut('D'))); + menu.add(new MenuItem("Save as...", new MenuShortcut('S', true))); + //menu.add(new MenuItem("Rename", new MenuShortcut('S', true))); + //menu.add(new MenuItem("Duplicate", new MenuShortcut('D'))); menu.add(new MenuItem("Export to Web", new MenuShortcut('E'))); item = new MenuItem("Export Application", new MenuShortcut('E', true)); item.setEnabled(false); @@ -126,7 +127,9 @@ public class PdeBase implements ActionListener { menu.add(new MenuItem("Present", new MenuShortcut('P'))); menu.add(new MenuItem("Stop")); menu.addSeparator(); - menu.add(new MenuItem("Beautify", new MenuShortcut('B'))); + item = new MenuItem("Beautify", new MenuShortcut('B')); + item.setEnabled(false); + menu.add(item); menu.addActionListener(this); menubar.add(menu); @@ -304,11 +307,16 @@ public class PdeBase implements ActionListener { } else if (command.equals("Save")) { editor.doSave(); + } else if (command.equals("Save as...")) { + editor.skSaveAs(); + + /* } else if (command.equals("Rename")) { editor.skDuplicateRename(true); } else if (command.equals("Duplicate")) { editor.skDuplicateRename(false); + */ } else if (command.equals("Export to Web")) { editor.skExport(); diff --git a/processing/app/PdeEditor.java b/processing/app/PdeEditor.java index c8851db34..52c3fb379 100644 --- a/processing/app/PdeEditor.java +++ b/processing/app/PdeEditor.java @@ -624,6 +624,52 @@ public class PdeEditor extends Panel { } + public void skSaveAs() { + status.edit("Save sketch as...", sketchName); + } + + public void skSaveAs2(String newSketchName) { + if (newSketchName.equals(sketchName)) { + // nothing changes + return; + } + //doSave(); // save changes before renaming.. risky but oh well + String textareaContents = textarea.getText(); + int textareaPosition = textarea.getCaretPosition(); + + File newSketchDir = new File(sketchDir.getParent() + + File.separator + newSketchName); + File newSketchFile = new File(newSketchDir, newSketchName + ".pde"); + + // make new dir + newSketchDir.mkdirs(); + // copy the sketch file itself with new name + copyFile(sketchFile, newSketchFile); + + // copy everything from the old dir to the new one + copyDir(sketchDir, newSketchDir); + + // remove the old sketch file from the new dir + new File(newSketchDir, sketchName + ".pde").delete(); + + // remove the old dir (!) + //if (rename) removeDir(sketchDir); + // oops.. has to be done before opening, otherwise the new + // dir is set to sketchDir.. duh.. + + base.rebuildSketchbookMenu(); + + // open the new guy + handleOpen(newSketchName, newSketchFile, newSketchDir); + + // update with the new junk and save that as the new code + textarea.setText(textareaContents); + textarea.setCaretPosition(textareaPosition); + doSave(); + } + + + /* public void skDuplicateRename(boolean rename) { status.edit(rename ? "Rename to?" : "Duplicate title?", sketchName, rename); @@ -632,10 +678,10 @@ public class PdeEditor extends Panel { public void skDuplicateRename2(String newSketchName, boolean rename) { if (newSketchName.equals(sketchName)) { // explain to the user that they're lame - System.err.println("what kind of a loser " + - (rename ? "renames the directory" : - "creates a duplicate") + - " using the same name?"); + // System.err.println("what kind of a loser " + + // (rename ? "renames the directory" : + // "creates a duplicate") + + // " using the same name?"); return; } //System.out.println("rename to " + newname); @@ -652,12 +698,11 @@ public class PdeEditor extends Panel { //boolean result = sketchDir.renameTo(newSketchDir); //System.out.println(result); - /* - System.out.println("move \"" + sketchFile.getPath() + "\" " + - newSketchName + ".pde"); - System.out.println("move \"" + sketchDir.getPath() + "\" " + - newSketchName); - */ + + // System.out.println("move \"" + sketchFile.getPath() + "\" " + + // newSketchName + ".pde"); + // System.out.println("move \"" + sketchDir.getPath() + "\" " + + // newSketchName); // make new dir newSketchDir.mkdirs(); @@ -680,6 +725,15 @@ public class PdeEditor extends Panel { // open the new guy if (rename) handleOpen(newSketchName, newSketchFile, newSketchDir); + //if (result) { + //if (sketchDir.renameTo(newSketchDir)) { + //} else { + //System.err.println("couldn't rename " + sketchDir + " to " + + // newSketchDir); + //} + } + */ + /* try { Runtime rt = Runtime.getRuntime(); @@ -706,19 +760,6 @@ public class PdeEditor extends Panel { } */ - //if (result) { - //if (sketchDir.renameTo(newSketchDir)) { - //} else { - //System.err.println("couldn't rename " + sketchDir + " to " + - // newSketchDir); - //} - } - - - //public void skDuplicate() { - //System.err.println("sketch duplicate not yet implemented"); - //} - public void skExport() { message("Exporting for the web..."); diff --git a/processing/app/PdeEditorStatus.java b/processing/app/PdeEditorStatus.java index 0a6863b38..5a965330e 100644 --- a/processing/app/PdeEditorStatus.java +++ b/processing/app/PdeEditorStatus.java @@ -44,7 +44,7 @@ public class PdeEditorStatus extends Panel Button cancelButton; Button okButton; TextField editField; - boolean editRename; + //boolean editRename; //Thread promptThread; int response; @@ -148,10 +148,10 @@ public class PdeEditorStatus extends Panel } - public void edit(String message, String dflt, boolean rename) { + public void edit(String message, String dflt /*, boolean rename*/) { mode = EDIT; this.message = message; - this.editRename = rename; + //this.editRename = rename; response = 0; okButton.setVisible(true); @@ -212,7 +212,8 @@ public class PdeEditorStatus extends Panel if (code == KeyEvent.VK_ENTER) { // accept the input - editor.skDuplicateRename2(editField.getText(), editRename); + //editor.skDuplicateRename2(editField.getText(), editRename); + editor.skSaveAs2(editField.getText()); unedit(); event.consume(); @@ -368,7 +369,8 @@ public class PdeEditorStatus extends Panel editor.buttons.clear(); } else if (e.getSource() == okButton) { - editor.skDuplicateRename2(editField.getText(), editRename); + editor.skSaveAs2(editField.getText()); + //editor.skDuplicateRename2(editField.getText(), editRename); unedit(); } else if (e.getSource() == editField) { diff --git a/processing/todo.txt b/processing/todo.txt index 8c2a7b4d0..06d90c257 100644 --- a/processing/todo.txt +++ b/processing/todo.txt @@ -10,7 +10,9 @@ X fix curve()/bezier() X make curve() work as 6 point with doubled endpoints X translate is disabling color X (probably because of lighting) - +X save as instead of rename/duplicate +X this makes more sense, hopefully it won't break everything +X put newline after imports header in exported .java files bagel a _ fold simpleserial into BApplet @@ -331,6 +333,7 @@ _ make some kind of internal color picker _ could be a separate window that's always around if needed _ regexps: http://javaregex.com/cgi-bin/pat/tutorial.asp _ a better editor: +_ line numbers like bbedit _ syntax coloring _ emacs indents and key commands _ http://mathsrv.ku-eichstaett.de/MGF/homes/grothmann/je/index.html