diff --git a/.idea/misc.xml b/.idea/misc.xml
index 87a20fc38..f0c744c0c 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,7 +1,7 @@
-
+
\ No newline at end of file
diff --git a/java/preprocessor/build.gradle.kts b/java/preprocessor/build.gradle.kts
index 4f2817476..2af56fd2a 100644
--- a/java/preprocessor/build.gradle.kts
+++ b/java/preprocessor/build.gradle.kts
@@ -17,8 +17,8 @@ repositories{
sourceSets{
main{
java{
- srcDirs("../src/", "../generated")
- include("processing/mode/java/preproc/**/*")
+ srcDirs("src/main/java", "../src/", "../generated")
+ include("processing/mode/java/preproc/**/*", "processing/app/**/*")
}
}
}
diff --git a/java/preprocessor/src/main/java/processing/app/Base.java b/java/preprocessor/src/main/java/processing/app/Base.java
new file mode 100644
index 000000000..3cfad75a1
--- /dev/null
+++ b/java/preprocessor/src/main/java/processing/app/Base.java
@@ -0,0 +1,55 @@
+package processing.app;
+
+import java.io.File;
+
+public class Base {
+ static private final int REVISION = 1294;
+
+ static private File settingsOverride;
+ /**
+ * @return the current revision number, safe to be used for update checks
+ */
+ static public int getRevision() {
+ return REVISION;
+ }
+ /**
+ * Get the directory that can store settings. (Library on OS X, App Data or
+ * something similar on Windows, a dot folder on Linux.) Removed this as a
+ * preference for 3.0a3 because we need this to be stable, but adding back
+ * for 4.0 beta 4 so that folks can do 'portable' versions again.
+ */
+ static public File getSettingsFolder() {
+ File settingsFolder = null;
+
+ try {
+ settingsFolder = Platform.getSettingsFolder();
+
+ // create the folder if it doesn't exist already
+ if (!settingsFolder.exists()) {
+ if (!settingsFolder.mkdirs()) {
+ System.err.println("Could not create the folder " + settingsFolder);
+
+ }
+ }
+ } catch (Exception e) {
+ System.err.println("Could not get the settings folder");
+ }
+ return settingsFolder;
+ }
+
+
+
+ static public File getSettingsOverride() {
+ return settingsOverride;
+ }
+
+ /**
+ * Convenience method to get a File object for the specified filename inside
+ * the settings folder. Used to get preferences and recent sketch files.
+ * @param filename A file inside the settings folder.
+ * @return filename wrapped as a File object inside the settings folder
+ */
+ static public File getSettingsFile(String filename) {
+ return new File(getSettingsFolder(), filename);
+ }
+}
diff --git a/java/preprocessor/src/main/java/processing/app/Platform.java b/java/preprocessor/src/main/java/processing/app/Platform.java
new file mode 100644
index 000000000..079d9d79c
--- /dev/null
+++ b/java/preprocessor/src/main/java/processing/app/Platform.java
@@ -0,0 +1,22 @@
+package processing.app;
+
+import java.io.File;
+
+public class Platform {
+ static public File getSettingsFolder() {
+ File settingsFolder = null;
+ String os = System.getProperty("os.name").toLowerCase();
+ if (os.contains("mac")) {
+ settingsFolder = new File(System.getProperty("user.home") + "/Library/Processing");
+ } else if (os.contains("windows")) {
+ String appData = System.getenv("APPDATA");
+ if (appData == null) {
+ appData = System.getProperty("user.home");
+ }
+ settingsFolder = new File(appData + "\\Processing");
+ } else {
+ settingsFolder = new File(System.getProperty("user.home") + "/.processing");
+ }
+ return settingsFolder;
+ }
+}
diff --git a/java/preprocessor/src/main/java/processing/app/Preferences.java b/java/preprocessor/src/main/java/processing/app/Preferences.java
new file mode 100644
index 000000000..ec7f54da6
--- /dev/null
+++ b/java/preprocessor/src/main/java/processing/app/Preferences.java
@@ -0,0 +1,64 @@
+/* -*- mode: java; c-basic-offset: 2; indent-tabs-mode: nil -*- */
+
+/*
+ Part of the Processing project - http://processing.org
+
+ Copyright (c) 2014-19 The Processing Foundation
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License version 2
+ as published by the Free Software Foundation.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+
+package processing.app;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.util.Properties;
+
+/**
+ * Storage class for user preferences and environment settings.
+ *
+ * This class does not use the Properties class because .properties files use
+ * ISO 8859-1 encoding, which is highly likely to be a problem when trying to
+ * save sketch folders and locations. Like the rest of Processing, we use UTF8.
+ *
+ * We don't use the Java Preferences API because it would entail writing to
+ * the registry (on Windows), or an obscure file location (on Mac OS X) and
+ * make it far more difficult (impossible) to remove the preferences.txt to
+ * reset them (when they become corrupt), or to find the the file to make
+ * edits for numerous obscure preferences that are not part of the preferences
+ * window. If we added a generic editor (e.g. about:config in Mozilla) for
+ * such things, we could start using the Java Preferences API. But wow, that
+ * sounds like a lot of work. Not unlike writing this paragraph.
+ */
+public class Preferences {
+ static public String get(String attribute /*, String defaultValue */) {
+ try {
+ var settingsFile = Base.getSettingsFile("preferences.txt");
+ var reader = new BufferedReader(new FileReader(settingsFile));
+
+ var settings = new Properties();
+ settings.load(reader);
+ reader.close();
+
+ return settings.getProperty(attribute);
+ }catch (Exception e) {
+ return null;
+ }
+ }
+ static public boolean getBoolean(String attribute) {
+ String value = get(attribute); //, null);
+ return Boolean.parseBoolean(value);
+ }
+}
diff --git a/java/src/processing/mode/java/preproc/PdeParseTreeListener.java b/java/src/processing/mode/java/preproc/PdeParseTreeListener.java
index d1cf9534b..cb4fd0001 100644
--- a/java/src/processing/mode/java/preproc/PdeParseTreeListener.java
+++ b/java/src/processing/mode/java/preproc/PdeParseTreeListener.java
@@ -30,6 +30,8 @@ import org.antlr.v4.runtime.misc.Interval;
import org.antlr.v4.runtime.tree.ParseTree;
+import processing.app.Base;
+import processing.app.Preferences;
import processing.core.PApplet;
import processing.mode.java.preproc.PdePreprocessor.Mode;
@@ -1057,7 +1059,7 @@ public class PdeParseTreeListener extends ProcessingBaseListener {
String newCode = String.format(
"/* autogenerated by Processing revision %04d on %s */",
- 1234,
+ Base.getRevision(),
dateStr
);
@@ -1232,22 +1234,21 @@ public class PdeParseTreeListener extends ProcessingBaseListener {
{ // assemble line with applet args
StringJoiner argsJoiner = new StringJoiner(", ");
- // TODO: Add support for fullscreen. Not through settings.
-// boolean shouldFullScreen = Preferences.getBoolean("export.application.present");
-// shouldFullScreen = shouldFullScreen || Preferences.getBoolean("export.application.fullscreen");
-// if (shouldFullScreen) {
-// argsJoiner.add("\"" + PApplet.ARGS_FULL_SCREEN + "\"");
-//
-// String bgColor = Preferences.get("run.present.bgcolor");
-// argsJoiner.add("\"" + PApplet.ARGS_BGCOLOR + "=" + bgColor + "\"");
-//
-// if (Preferences.getBoolean("export.application.stop")) {
-// String stopColor = Preferences.get("run.present.stop.color");
-// argsJoiner.add("\"" + PApplet.ARGS_STOP_COLOR + "=" + stopColor + "\"");
-// } else {
-// argsJoiner.add("\"" + PApplet.ARGS_HIDE_STOP + "\"");
-// }
-// }
+ boolean shouldFullScreen = Preferences.getBoolean("export.application.present");
+ shouldFullScreen = shouldFullScreen || Preferences.getBoolean("export.application.fullscreen");
+ if (shouldFullScreen) {
+ argsJoiner.add("\"" + PApplet.ARGS_FULL_SCREEN + "\"");
+
+ String bgColor = Preferences.get("run.present.bgcolor");
+ argsJoiner.add("\"" + PApplet.ARGS_BGCOLOR + "=" + bgColor + "\"");
+
+ if (Preferences.getBoolean("export.application.stop")) {
+ String stopColor = Preferences.get("run.present.stop.color");
+ argsJoiner.add("\"" + PApplet.ARGS_STOP_COLOR + "=" + stopColor + "\"");
+ } else {
+ argsJoiner.add("\"" + PApplet.ARGS_HIDE_STOP + "\"");
+ }
+ }
argsJoiner.add("\"" + sketchName + "\"");
footerWriter.addCode(argsJoiner.toString());