diff --git a/ReleaseNotes.md b/ReleaseNotes.md
index 23da6b4cd..68bd5bde3 100644
--- a/ReleaseNotes.md
+++ b/ReleaseNotes.md
@@ -14,7 +14,7 @@ Release Notes
-
+
OpenRocket 22.02.RC.01 (2023-01-xx)
------------------------
(through PR1996)
@@ -60,6 +60,7 @@ OpenRocket 22.02.RC.01 (2023-01-xx)
+
OpenRocket 22.02.beta.05 (2022-09-28)
diff --git a/core/resources-src/pix/icon/OR_15.03-icon-256.png b/core/resources-src/pix/icon/OR_15.03-icon-256.png
new file mode 100644
index 000000000..c2170d358
Binary files /dev/null and b/core/resources-src/pix/icon/OR_15.03-icon-256.png differ
diff --git a/core/resources-src/pix/icon/icon-windows.ico b/core/resources-src/pix/icon/icon-windows.ico
deleted file mode 100644
index 44eb480a2..000000000
Binary files a/core/resources-src/pix/icon/icon-windows.ico and /dev/null differ
diff --git a/core/resources/build.properties b/core/resources/build.properties
index 7a49d2a88..acda27846 100644
--- a/core/resources/build.properties
+++ b/core/resources/build.properties
@@ -1,10 +1,10 @@
# The OpenRocket build version
-build.version=22.02.beta.05
+build.version=22.02.RC.01
# The copyright year for the build. Displayed in the about dialog.
# Will show as Copyright 2013-${build.copyright}
-build.copyright=2022
+build.copyright=2023
# The source of the package. When building a package for a specific
# distribution (Debian, Fedora etc.), this should be changed appropriately!
diff --git a/core/resources/pix/icon/icon-macos.icns b/core/resources/pix/icon/icon-macos.icns
new file mode 100644
index 000000000..eb307de84
Binary files /dev/null and b/core/resources/pix/icon/icon-macos.icns differ
diff --git a/core/resources/pix/icon/icon-windows.ico b/core/resources/pix/icon/icon-windows.ico
new file mode 100644
index 000000000..3b0725e0a
Binary files /dev/null and b/core/resources/pix/icon/icon-windows.ico differ
diff --git a/core/src/net/sf/openrocket/communication/UpdateInfoRetriever.java b/core/src/net/sf/openrocket/communication/UpdateInfoRetriever.java
index d587f1c1c..4437340f0 100644
--- a/core/src/net/sf/openrocket/communication/UpdateInfoRetriever.java
+++ b/core/src/net/sf/openrocket/communication/UpdateInfoRetriever.java
@@ -36,6 +36,7 @@ public class UpdateInfoRetriever {
private static final Map
devTags = Stream.of(new Object[][] {
{ "alpha", 1 },
{ "beta", 2 },
+ { "RC", 3 }, // Release Candidate
}).collect(Collectors.toMap(c -> (String) c[0], c -> (Integer) c[1]));
/* Enum for the current build version. Values:
diff --git a/core/test/net/sf/openrocket/communication/UpdateInfoTest.java b/core/test/net/sf/openrocket/communication/UpdateInfoTest.java
index 3f13cfb52..95bf1e5ba 100644
--- a/core/test/net/sf/openrocket/communication/UpdateInfoTest.java
+++ b/core/test/net/sf/openrocket/communication/UpdateInfoTest.java
@@ -92,6 +92,12 @@ public class UpdateInfoTest extends BaseTestCase {
UpdateInfoRetriever.UpdateInfoFetcher.compareLatest("22.beta.01", "22.beta.01"));
assertEquals(UpdateInfoRetriever.ReleaseStatus.NEWER,
UpdateInfoRetriever.UpdateInfoFetcher.compareLatest("22.beta.02", "22.beta.01"));
+ assertEquals(UpdateInfoRetriever.ReleaseStatus.OLDER,
+ UpdateInfoRetriever.UpdateInfoFetcher.compareLatest("22.RC.01", "22.RC.02"));
+ assertEquals(UpdateInfoRetriever.ReleaseStatus.LATEST,
+ UpdateInfoRetriever.UpdateInfoFetcher.compareLatest("22.RC.01", "22.RC.01"));
+ assertEquals(UpdateInfoRetriever.ReleaseStatus.NEWER,
+ UpdateInfoRetriever.UpdateInfoFetcher.compareLatest("22.RC.02", "22.RC.01"));
assertEquals(UpdateInfoRetriever.ReleaseStatus.OLDER,
UpdateInfoRetriever.UpdateInfoFetcher.compareLatest("22.alpha.01", "22.02.alpha.02"));
@@ -105,6 +111,12 @@ public class UpdateInfoTest extends BaseTestCase {
UpdateInfoRetriever.UpdateInfoFetcher.compareLatest("22.beta.01", "22.02.beta.01"));
assertEquals(UpdateInfoRetriever.ReleaseStatus.OLDER,
UpdateInfoRetriever.UpdateInfoFetcher.compareLatest("22.beta.02", "22.02.beta.01"));
+ assertEquals(UpdateInfoRetriever.ReleaseStatus.OLDER,
+ UpdateInfoRetriever.UpdateInfoFetcher.compareLatest("22.RC.01", "22.02.RC.02"));
+ assertEquals(UpdateInfoRetriever.ReleaseStatus.OLDER,
+ UpdateInfoRetriever.UpdateInfoFetcher.compareLatest("22.RC.01", "22.02.RC.01"));
+ assertEquals(UpdateInfoRetriever.ReleaseStatus.OLDER,
+ UpdateInfoRetriever.UpdateInfoFetcher.compareLatest("22.RC.02", "22.02.RC.01"));
assertEquals(UpdateInfoRetriever.ReleaseStatus.OLDER,
UpdateInfoRetriever.UpdateInfoFetcher.compareLatest("22.02.alpha.01", "22.02.beta.02"));
@@ -112,12 +124,36 @@ public class UpdateInfoTest extends BaseTestCase {
UpdateInfoRetriever.UpdateInfoFetcher.compareLatest("22.02.alpha.01", "22.02.beta.01"));
assertEquals(UpdateInfoRetriever.ReleaseStatus.OLDER,
UpdateInfoRetriever.UpdateInfoFetcher.compareLatest("22.02.alpha.02", "22.02.beta.01"));
+ assertEquals(UpdateInfoRetriever.ReleaseStatus.OLDER,
+ UpdateInfoRetriever.UpdateInfoFetcher.compareLatest("22.02.alpha.01", "22.02.RC.02"));
+ assertEquals(UpdateInfoRetriever.ReleaseStatus.OLDER,
+ UpdateInfoRetriever.UpdateInfoFetcher.compareLatest("22.02.alpha.01", "22.02.RC.01"));
+ assertEquals(UpdateInfoRetriever.ReleaseStatus.OLDER,
+ UpdateInfoRetriever.UpdateInfoFetcher.compareLatest("22.02.alpha.02", "22.02.RC.01"));
+ assertEquals(UpdateInfoRetriever.ReleaseStatus.OLDER,
+ UpdateInfoRetriever.UpdateInfoFetcher.compareLatest("22.02.beta.01", "22.02.RC.02"));
+ assertEquals(UpdateInfoRetriever.ReleaseStatus.OLDER,
+ UpdateInfoRetriever.UpdateInfoFetcher.compareLatest("22.02.beta.01", "22.02.RC.01"));
+ assertEquals(UpdateInfoRetriever.ReleaseStatus.OLDER,
+ UpdateInfoRetriever.UpdateInfoFetcher.compareLatest("22.02.beta.02", "22.02.RC.01"));
assertEquals(UpdateInfoRetriever.ReleaseStatus.NEWER,
UpdateInfoRetriever.UpdateInfoFetcher.compareLatest("22.02.beta.01", "22.02.alpha.02"));
assertEquals(UpdateInfoRetriever.ReleaseStatus.NEWER,
UpdateInfoRetriever.UpdateInfoFetcher.compareLatest("22.02.beta.01", "22.02.alpha.01"));
assertEquals(UpdateInfoRetriever.ReleaseStatus.NEWER,
UpdateInfoRetriever.UpdateInfoFetcher.compareLatest("22.02.beta.02", "22.02.alpha.01"));
+ assertEquals(UpdateInfoRetriever.ReleaseStatus.NEWER,
+ UpdateInfoRetriever.UpdateInfoFetcher.compareLatest("22.02.RC.01", "22.02.alpha.02"));
+ assertEquals(UpdateInfoRetriever.ReleaseStatus.NEWER,
+ UpdateInfoRetriever.UpdateInfoFetcher.compareLatest("22.02.RC.01", "22.02.alpha.01"));
+ assertEquals(UpdateInfoRetriever.ReleaseStatus.NEWER,
+ UpdateInfoRetriever.UpdateInfoFetcher.compareLatest("22.02.RC.02", "22.02.alpha.01"));
+ assertEquals(UpdateInfoRetriever.ReleaseStatus.NEWER,
+ UpdateInfoRetriever.UpdateInfoFetcher.compareLatest("22.02.RC.01", "22.02.beta.02"));
+ assertEquals(UpdateInfoRetriever.ReleaseStatus.NEWER,
+ UpdateInfoRetriever.UpdateInfoFetcher.compareLatest("22.02.RC.01", "22.02.beta.01"));
+ assertEquals(UpdateInfoRetriever.ReleaseStatus.NEWER,
+ UpdateInfoRetriever.UpdateInfoFetcher.compareLatest("22.02.RC.02", "22.02.beta.01"));
assertEquals(UpdateInfoRetriever.ReleaseStatus.NEWER,
UpdateInfoRetriever.UpdateInfoFetcher.compareLatest("22.02.alpha.01", "22"));
@@ -149,6 +185,21 @@ public class UpdateInfoTest extends BaseTestCase {
assertEquals(UpdateInfoRetriever.ReleaseStatus.OLDER,
UpdateInfoRetriever.UpdateInfoFetcher.compareLatest("22.02.beta.01", "22.02.02"));
+ assertEquals(UpdateInfoRetriever.ReleaseStatus.NEWER,
+ UpdateInfoRetriever.UpdateInfoFetcher.compareLatest("22.02.RC.01", "22"));
+ assertEquals(UpdateInfoRetriever.ReleaseStatus.OLDER,
+ UpdateInfoRetriever.UpdateInfoFetcher.compareLatest("22.02.RC.01", "22.02"));
+ assertEquals(UpdateInfoRetriever.ReleaseStatus.OLDER,
+ UpdateInfoRetriever.UpdateInfoFetcher.compareLatest("22.02.RC.01", "22.02.01"));
+ assertEquals(UpdateInfoRetriever.ReleaseStatus.NEWER,
+ UpdateInfoRetriever.UpdateInfoFetcher.compareLatest("22.02.RC.01", "22"));
+ assertEquals(UpdateInfoRetriever.ReleaseStatus.OLDER,
+ UpdateInfoRetriever.UpdateInfoFetcher.compareLatest("22.02.RC.01", "22.03"));
+ assertEquals(UpdateInfoRetriever.ReleaseStatus.NEWER,
+ UpdateInfoRetriever.UpdateInfoFetcher.compareLatest("22.02.RC.01", "22.01"));
+ assertEquals(UpdateInfoRetriever.ReleaseStatus.OLDER,
+ UpdateInfoRetriever.UpdateInfoFetcher.compareLatest("22.02.RC.01", "22.02.02"));
+
// Test bogus releases
assertExceptionCompareLatest("22.02.gamma.01", "22.02");
diff --git a/install4j/22.xx/.gitignore b/install4j/22.02/.gitignore
similarity index 86%
rename from install4j/22.xx/.gitignore
rename to install4j/22.02/.gitignore
index 60eadae4b..e5a57839b 100644
--- a/install4j/22.xx/.gitignore
+++ b/install4j/22.02/.gitignore
@@ -20,3 +20,4 @@ media/
.DS_Store
code_signing/
+openrocket-22.xx.install4j~
diff --git a/install4j/22.xx/macOS_resources/DS_Store b/install4j/22.02/macOS_resources/DS_Store
similarity index 56%
rename from install4j/22.xx/macOS_resources/DS_Store
rename to install4j/22.02/macOS_resources/DS_Store
index e02d00e00..a572a3aad 100755
Binary files a/install4j/22.xx/macOS_resources/DS_Store and b/install4j/22.02/macOS_resources/DS_Store differ
diff --git a/install4j/22.xx/macOS_resources/macOS_installer_background.png b/install4j/22.02/macOS_resources/macOS_installer_background.png
similarity index 100%
rename from install4j/22.xx/macOS_resources/macOS_installer_background.png
rename to install4j/22.02/macOS_resources/macOS_installer_background.png
diff --git a/install4j/22.xx/macOS_resources/macOS_installer_background.psd b/install4j/22.02/macOS_resources/macOS_installer_background.psd
similarity index 100%
rename from install4j/22.xx/macOS_resources/macOS_installer_background.psd
rename to install4j/22.02/macOS_resources/macOS_installer_background.psd
diff --git a/install4j/22.xx/openrocket-22.xx.install4j b/install4j/22.02/openrocket-22.02.install4j
similarity index 85%
rename from install4j/22.xx/openrocket-22.xx.install4j
rename to install4j/22.02/openrocket-22.02.install4j
index 569397b9f..3030bc349 100644
--- a/install4j/22.xx/openrocket-22.xx.install4j
+++ b/install4j/22.02/openrocket-22.02.install4j
@@ -1,675 +1,639 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- sys.installationDir
-
-
- context.getBooleanVariable("sys.confirmedUpdateInstallation")
-
-
-
-
-
- ${form:welcomeMessage}
-
- !context.isConsole()
-
-
-
-
-
-
-
-
-
-
- updateCheck
-
-
-
-
- ${i18n:ClickNext}
-
-
-
-
-
- !context.getBooleanVariable("sys.confirmedUpdateInstallation")
-
-
-
- ${i18n:SelectDirLabel(${compiler:sys.fullName})}
-
-
-
-
-
-
-
- suggestAppDir
- validateApplicationId
- existingDirWarning
- checkWritable
- manualEntryAllowed
- checkFreeSpace
- showRequiredDiskSpace
- showFreeDiskSpace
- allowSpacesOnUnix
- validationScript
- standardValidation
-
-
-
-
-
-
-
-
- ${i18n:SelectAssociationsLabel}
-
-
-
-
-
-
-
- showSelectionButtons
- selectionButtonPosition
-
-
-
-
-
-
-
-
- ${form:confirmationMessage}
-
- !context.isConsole()
-
-
-
- ${i18n:CreateDesktopIcon}
-
- createDesktopLinkAction
-
-
-
-
- ${i18n:AddToDock}
-
- addToDockAction
-
- Util.isMacOS()
-
-
-
-
-
-
-
-
- ${i18n:UninstallerMenuEntry(${compiler:sys.fullName})}
-
- !context.getBooleanVariable("sys.programGroupDisabled")
-
-
-
- OpenRocket
-
-
-
-
-
-
-
-
-
-
- !context.getBooleanVariable("sys.programGroupDisabled")
-
-
-
-
-
-
-
- context.getBooleanVariable("addToDockAction")
-
-
-
- OpenRocket Model Rocket Simulator
-
-
-
- ${compiler:sys.fullName}
-
-
-
-
-
-
-
- context.getBooleanVariable("createDesktopLinkAction")
-
-
-
- OpenRocket Design
- ork
- 59
-
-
-
-
- application/x-openrocket
-
-
-
-
-
-
-
- ${compiler:sys.fullName} ${compiler:sys.version}
-
-
-
-
-
-
- ${i18n:WizardPreparing}
-
-
-
-
-
-
-
-
- ${form:finishedMessage}
-
-
-
-
-
-
-
-
- ${i18n:UninstallerMenuEntry(${compiler:sys.fullName})}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ${form:welcomeMessage}
-
- !context.isConsole()
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ${i18n:UninstallerPreparing}
-
-
-
-
-
-
-
-
-
- ${form:successMessage}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ sys.installationDir
+
+
+ context.getBooleanVariable("sys.confirmedUpdateInstallation")
+
+
+
+
+
+ ${form:welcomeMessage}
+
+ !context.isConsole()
+
+
+
+
+
+
+
+
+
+
+ updateCheck
+
+
+
+
+ ${i18n:ClickNext}
+
+
+
+
+
+ !context.getBooleanVariable("sys.confirmedUpdateInstallation")
+
+
+
+ ${i18n:SelectDirLabel(${compiler:sys.fullName})}
+
+
+
+
+
+
+
+ suggestAppDir
+ validateApplicationId
+ existingDirWarning
+ checkWritable
+ manualEntryAllowed
+ checkFreeSpace
+ showRequiredDiskSpace
+ showFreeDiskSpace
+ allowSpacesOnUnix
+ validationScript
+ standardValidation
+
+
+
+
+
+
+
+
+ ${i18n:SelectAssociationsLabel}
+
+
+
+
+
+
+
+ showSelectionButtons
+ selectionButtonPosition
+
+
+
+
+
+
+
+
+ ${form:confirmationMessage}
+
+ !context.isConsole()
+
+
+
+ ${i18n:CreateDesktopIcon}
+
+ createDesktopLinkAction
+
+
+
+
+ ${i18n:AddToDock}
+
+ addToDockAction
+
+ Util.isMacOS()
+
+
+
+
+
+
+
+
+ ${i18n:UninstallerMenuEntry(${compiler:sys.fullName})}
+
+ !context.getBooleanVariable("sys.programGroupDisabled")
+
+
+
+ OpenRocket
+
+
+
+
+
+
+
+
+
+
+ !context.getBooleanVariable("sys.programGroupDisabled")
+
+
+
+
+
+
+
+ context.getBooleanVariable("addToDockAction")
+
+
+
+ OpenRocket Model Rocket Simulator
+
+
+
+ ${compiler:sys.fullName}
+
+
+
+
+
+
+
+ context.getBooleanVariable("createDesktopLinkAction")
+
+
+
+ OpenRocket Design
+ ork
+ 59
+
+
+
+
+ application/x-openrocket
+
+
+
+
+
+
+
+ ${compiler:sys.fullName} ${compiler:sys.version}
+
+
+
+
+
+
+ ${i18n:WizardPreparing}
+
+
+
+
+
+
+
+
+ ${form:finishedMessage}
+
+
+
+
+
+
+
+
+ ${i18n:UninstallerMenuEntry(${compiler:sys.fullName})}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${form:welcomeMessage}
+
+ !context.isConsole()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${i18n:UninstallerPreparing}
+
+
+
+
+
+
+
+
+
+ ${form:successMessage}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/install4j/22.xx/OpenRocket.icns b/install4j/22.xx/OpenRocket.icns
deleted file mode 100644
index 2a47188fd..000000000
Binary files a/install4j/22.xx/OpenRocket.icns and /dev/null differ
diff --git a/install4j/README.md b/install4j/README.md
index 29633da7c..4374b443c 100644
--- a/install4j/README.md
+++ b/install4j/README.md
@@ -7,22 +7,24 @@ The [OpenRocket](http://www.openrocket.info) project will do its best
to publish installers for the following platforms.
* Windows, 64-bit
-* macOS, 64-bit
+* macOS, 64-bit (Intel & Apple Silicon)
* Linux, 64-bit
# Maintainers
* Neil Weinstock
* Justin Hanney
* Joe Pfeiffer
+* Sibo Van Gool
# Instructions on updating the macOS drag-and-drop installer
-This is an example of updating the installer from 22.02.beta.01 to 22.02.beta.02:
-1. Download the OpenRocket-22.02.beta.01-macOS.dmg file
-2. Make a read/write .dmg file using the terminal command `hdiutil convert OpenRocket-22.02.beta.01-macOS.dmg -format UDRW -o 22.02.beta.01_rw.dmg`
-3. Enlarge the writable DMG, by first checking the current size: `hdiutil resize 22.02.beta.01_rw.dmg`, e.g. you get 370000 in the 'cur' column, then just resize it to e.g. 400000: `hdiutil resize -sectors 400000 22.02.beta.01_rw.dmg`
-4. Mount the DMG: `hdiutil attach 22.02.beta.01_rw.dmg`
-5. Open the OpenRocket-disk from your desktop and change the app name from 22.02.beta.01 to 22.02.beta.02
-6. Copy the .DS_Store to `openrocket/install4j/22.xx/macOS_resources` by running the command `cp /Volumes/OpenRocket/.DS_Store openrocket/install4j/22.xx/macOS_resources/DS_Store`
-7. Eject the OpenRocket DMG disk from your desktop (important step)
-8. Delete `22.02.beta.01_rw.dmg`
-9. You're all done!
+This is an example of updating the installer from 22.02.beta.05 to 22.02:
+1. Make sure install4j is not opened
+2. Download the OpenRocket-22.02.beta.05-macOS.dmg file
+3. Make a read/write .dmg file using the terminal command `hdiutil convert OpenRocket-22.02.beta.05-macOS.dmg -format UDRW -o 22.02.beta.05_rw.dmg`
+4. Enlarge the writable DMG, by first checking the current size: `hdiutil resize 22.02.beta.05_rw.dmg`, e.g. you get 430000 in the 'cur' column, then just resize it to e.g. 500000: `hdiutil resize -sectors 500000 22.02.beta.05_rw.dmg`
+5. Mount the DMG: `hdiutil attach 22.02.beta.05_rw.dmg`
+6. Open the OpenRocket-disk from your desktop and change the app name from 22.02.beta.05 to 22.02
+7. Copy the .DS_Store to `openrocket/install4j/22.02/macOS_resources` by running the command `cp /Volumes/OpenRocket/.DS_Store openrocket/install4j/22.02/macOS_resources/DS_Store`
+8. Eject the OpenRocket DMG disk from your desktop (important step)
+9. Delete `22.02.beta.05_rw.dmg`
+10. You're all done!