Search in sources :

Example 1 with SketchParser

use of processing.mode.java.tweak.SketchParser in project processing by processing.

the class JavaMode method handleTweak.

/** Start a sketch in tweak mode */
public Runner handleTweak(Sketch sketch, RunnerListener listener) throws SketchException {
    //                            final boolean present) throws SketchException {
    final JavaEditor editor = (JavaEditor) listener;
    // first try to build the unmodified code
    JavaBuild build = new JavaBuild(sketch);
    //    String appletClassName = build.build(false);
    String appletClassName = build.build(true);
    if (appletClassName == null) {
        // unmodified build failed, so fail
        return null;
    }
    // if compilation passed, modify the code and build again
    // save the original sketch code of the user
    editor.initBaseCode();
    // check for "// tweak" comment in the sketch
    boolean requiresTweak = SketchParser.containsTweakComment(editor.baseCode);
    // parse the saved sketch to get all (or only with "//tweak" comment) numbers
    final SketchParser parser = new SketchParser(editor.baseCode, requiresTweak);
    // add our code to the sketch
    final boolean launchInteractive = editor.automateSketch(sketch, parser);
    build = new JavaBuild(sketch);
    appletClassName = build.build(false);
    if (appletClassName != null) {
        final Runner runtime = new Runner(build, listener);
        new Thread(new Runnable() {

            public void run() {
                // these block until finished
                //          if (present) {
                //            runtime.present(null);
                //          } else {
                runtime.launch(null);
                // next lines are executed when the sketch quits
                if (launchInteractive) {
                    // fix swing deadlock issue: https://github.com/processing/processing/issues/3928
                    SwingUtilities.invokeLater(new Runnable() {

                        public void run() {
                            editor.initEditorCode(parser.allHandles, false);
                            editor.stopTweakMode(parser.allHandles);
                        }
                    });
                }
            }
        }).start();
        if (launchInteractive) {
            // fix swing deadlock issue: https://github.com/processing/processing/issues/3928
            SwingUtilities.invokeLater(new Runnable() {

                public void run() {
                    // replace editor code with baseCode
                    editor.initEditorCode(parser.allHandles, false);
                    editor.updateInterface(parser.allHandles, parser.colorBoxes);
                    editor.startTweakMode();
                }
            });
        }
        return runtime;
    }
    return null;
}
Also used : Runner(processing.mode.java.runner.Runner) SketchParser(processing.mode.java.tweak.SketchParser)

Aggregations

Runner (processing.mode.java.runner.Runner)1 SketchParser (processing.mode.java.tweak.SketchParser)1