From 1b09894f7a81e9dfd131c362f868ce4ebec74ee6 Mon Sep 17 00:00:00 2001 From: Stef Tervelde Date: Sat, 14 Dec 2024 09:34:54 +0100 Subject: [PATCH] Fixed regressions --- .idea/misc.xml | 2 +- java/preprocessor/build.gradle.kts | 4 +- .../src/main/java/processing/app/Base.java | 55 ++++++++++++++++ .../main/java/processing/app/Platform.java | 22 +++++++ .../main/java/processing/app/Preferences.java | 64 +++++++++++++++++++ .../java/preproc/PdeParseTreeListener.java | 35 +++++----- 6 files changed, 162 insertions(+), 20 deletions(-) create mode 100644 java/preprocessor/src/main/java/processing/app/Base.java create mode 100644 java/preprocessor/src/main/java/processing/app/Platform.java create mode 100644 java/preprocessor/src/main/java/processing/app/Preferences.java 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());