diff --git a/app/src/processing/app/Editor.java b/app/src/processing/app/Editor.java index 52a1c48af..0117e2d43 100644 --- a/app/src/processing/app/Editor.java +++ b/app/src/processing/app/Editor.java @@ -304,6 +304,11 @@ public abstract class Editor extends JFrame implements RunnerListener { } + public Base getBase() { + return base; + } + + public Mode getMode() { return mode; } @@ -948,6 +953,7 @@ public abstract class Editor extends JFrame implements RunnerListener { menu.add(createToolMenuItem("processing.app.tools.ColorSelector")); menu.add(createToolMenuItem("processing.app.tools.Archiver")); menu.add(createToolMenuItem("processing.app.tools.FixEncoding")); + menu.add(createToolMenuItem("processing.app.tools.ExportExamples")); // // These are temporary entries while Android mode is being worked out. // // The mode will not be in the tools menu, and won't involve a cmd-key diff --git a/app/src/processing/app/Mode.java b/app/src/processing/app/Mode.java index 53d7343dd..d23a675e6 100644 --- a/app/src/processing/app/Mode.java +++ b/app/src/processing/app/Mode.java @@ -352,7 +352,7 @@ public abstract class Mode { * Override this to control the order of the first set of example folders * and how they appear in the examples window. */ - protected File[] getExampleCategoryFolders() { + public File[] getExampleCategoryFolders() { return examplesFolder.listFiles(new FilenameFilter() { public boolean accept(File dir, String name) { return dir.isDirectory() && name.charAt(0) != '.'; diff --git a/app/src/processing/app/Sketch.java b/app/src/processing/app/Sketch.java index d6b1a4fe4..cb649f9fc 100644 --- a/app/src/processing/app/Sketch.java +++ b/app/src/processing/app/Sketch.java @@ -386,9 +386,9 @@ public class Sketch { if (renamingCode) { // If creating a new tab, don't show this error if (current == code[0]) { // If this is the main tab, disallow Base.showWarning("Problem with rename", - "The main .pde file cannot be .java file.\n" + + "The first tab cannot be ." + newExtension + " file.\n" + "(It may be time for your to graduate to a\n" + - "\"real\" programming environment)", null); + "\"real\" programming environment, hotshot.)", null); return; } } diff --git a/app/src/processing/app/tools/ExportExamples.java b/app/src/processing/app/tools/ExportExamples.java new file mode 100644 index 000000000..8eb000a86 --- /dev/null +++ b/app/src/processing/app/tools/ExportExamples.java @@ -0,0 +1,100 @@ +package processing.app.tools; + +import java.io.*; +//import java.util.HashMap; + +import processing.app.*; +import processing.mode.java.JavaBuild; + +public class ExportExamples implements Tool { + static final String DELETE_TARGET = "export.delete_target_folder"; + static final String SEPARATE_JAR = "export.applet.separate_jar_files"; + +// HashMap errors; +// Editor orig; + + Base base; + File[] folders; + + + public void init(Editor editor) { +// orig = editor; + base = editor.getBase(); + Mode mode = editor.getMode(); + folders = mode.getExampleCategoryFolders(); + } + + + public void run() { + new Thread(new Runnable() { public void run() { +// errors = new HashMap(); + boolean delete = Preferences.getBoolean(DELETE_TARGET); + Preferences.setBoolean(DELETE_TARGET, false); + boolean separate = Preferences.getBoolean(SEPARATE_JAR); + Preferences.setBoolean(SEPARATE_JAR, true); + + for (File folder : folders) { + if (!folder.getName().equals("Books")) { + handleFolder(folder); + } + } + + Preferences.setBoolean(DELETE_TARGET, delete); + Preferences.setBoolean(SEPARATE_JAR, separate); + } }).start(); + +// if (errors.size() > 0) { +// orig.statusError((errors.size() == 1 ? "One sketch" : (errors.size() + " sketches")) + " had errors."); +// } else { +// orig.statusNotice("Finished exporting examples."); +// } +// for (String path : errors.keySet()) { +// System.err.println("Error: " +// } + } + + + public void handleFolder(File folder) { + File pdeFile = new File(folder, folder.getName() + ".pde"); + if (pdeFile.exists()) { + String pdePath = pdeFile.getAbsolutePath(); + Editor editor = base.handleOpen(pdePath); + if (editor != null) { + try { +// System.out.println(pdePath); + if (handle(editor)) { + base.handleClose(editor, false); + try { + Thread.sleep(20); + } catch (InterruptedException e) { } + } + } catch (Exception e) { + // errors.put(pdePath, e); + // System.err.println("Error handling " + pdePath); + // e.printStackTrace(); + } + } + } else { // recurse into the folder + //System.out.println(" into " + folder.getAbsolutePath()); + File[] sub = folder.listFiles(); + for (File f : sub) { + if (f.isDirectory()) { + handleFolder(f); + } + } + } + } + + + public boolean handle(Editor editor) throws SketchException, IOException { + Sketch sketch = editor.getSketch(); + JavaBuild build = new JavaBuild(sketch); + File appletFolder = new File(sketch.getFolder(), "applet"); + return build.exportApplet(appletFolder); + } + + + public String getMenuTitle() { + return "Export Examples"; + } +} \ No newline at end of file diff --git a/app/src/processing/mode/android/AndroidMode.java b/app/src/processing/mode/android/AndroidMode.java index 1f409b401..bec45b328 100644 --- a/app/src/processing/mode/android/AndroidMode.java +++ b/app/src/processing/mode/android/AndroidMode.java @@ -62,7 +62,7 @@ public class AndroidMode extends JavaMode { } - protected File[] getExampleCategoryFolders() { + public File[] getExampleCategoryFolders() { return new File[] { new File(examplesFolder, "Basics"), new File(examplesFolder, "Topics"), diff --git a/app/src/processing/mode/java/JavaBuild.java b/app/src/processing/mode/java/JavaBuild.java index 144a64a16..5f40759fd 100644 --- a/app/src/processing/mode/java/JavaBuild.java +++ b/app/src/processing/mode/java/JavaBuild.java @@ -49,7 +49,7 @@ public class JavaBuild { protected Sketch sketch; protected Mode mode; - + // what happens in the build, stays in the build. // (which is to say that everything below this line, stays within this class) diff --git a/app/src/processing/mode/java/JavaMode.java b/app/src/processing/mode/java/JavaMode.java index 1375318e3..5afcf735c 100644 --- a/app/src/processing/mode/java/JavaMode.java +++ b/app/src/processing/mode/java/JavaMode.java @@ -139,7 +139,7 @@ public class JavaMode extends Mode { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - protected File[] getExampleCategoryFolders() { + public File[] getExampleCategoryFolders() { // Basics, Topics, 3D, Books return new File[] { new File(examplesFolder, "Basics"), diff --git a/app/src/processing/mode/javascript/JavaScriptMode.java b/app/src/processing/mode/javascript/JavaScriptMode.java index bb5cec9f0..2f5dc29b5 100644 --- a/app/src/processing/mode/javascript/JavaScriptMode.java +++ b/app/src/processing/mode/javascript/JavaScriptMode.java @@ -85,7 +85,7 @@ public class JavaScriptMode extends Mode { //TODO Add examples - protected File[] getExampleCategoryFolders() { + public File[] getExampleCategoryFolders() { return new File[] {}; /* return new File[] { diff --git a/todo.txt b/todo.txt index ac4b65f90..4bb9059da 100644 --- a/todo.txt +++ b/todo.txt @@ -1,5 +1,14 @@ 0196 +_ checkbox in mode menu smashing into things +_ remove opengl2 for 1.5 and examples + + +_ colors for 2.0 +_ nurbs or other arch stuff for 2.0? + +_ changing number of screens between run causes things to show up off-screen +_ so when running, check to make sure that things are out of the area _ help casey re-export all applets for the site _ remove .java files, use one central loading.gif and core.jar? @@ -7,6 +16,9 @@ _ use a custom applet.html template for the export _ the tool could copy this into the folder just before exporting _ build a new version of the reference +_ PDE change indicator partially broken +_ http://code.google.com/p/processing/issues/detail?id=620 + from peter n lewis _ Use Selection For Find _ http://code.google.com/p/processing/issues/detail?id=571