Merge branch 'refs/heads/unstable' into issue-2525

# Conflicts:
#	swing/src/main/java/info/openrocket/swing/gui/plot/SimulationPlot.java
This commit is contained in:
SiboVG 2024-08-26 20:58:18 +02:00
commit 64d0d7e022
6 changed files with 67 additions and 45 deletions

View File

@ -20,6 +20,7 @@ import info.openrocket.core.material.Material;
import info.openrocket.core.models.atmosphere.AtmosphericModel; import info.openrocket.core.models.atmosphere.AtmosphericModel;
import info.openrocket.core.models.atmosphere.ExtendedISAModel; import info.openrocket.core.models.atmosphere.ExtendedISAModel;
import info.openrocket.core.preset.ComponentPreset; import info.openrocket.core.preset.ComponentPreset;
import info.openrocket.core.rocketcomponent.FlightConfiguration;
import info.openrocket.core.rocketcomponent.MassObject; import info.openrocket.core.rocketcomponent.MassObject;
import info.openrocket.core.rocketcomponent.Rocket; import info.openrocket.core.rocketcomponent.Rocket;
import info.openrocket.core.rocketcomponent.RocketComponent; import info.openrocket.core.rocketcomponent.RocketComponent;
@ -101,8 +102,10 @@ public abstract class ApplicationPreferences implements ChangeSource, ORPreferen
public static final String ROCKET_INFO_FONT_SIZE = "RocketInfoFontSize"; public static final String ROCKET_INFO_FONT_SIZE = "RocketInfoFontSize";
// Preferences Related to Simulations // Preferences related to flight configurations
public static final String DEFAULT_FLIGHT_CONFIG_NAME = "DefaultFlightConfigName";
// Preferences Related to Simulations
public static final String CONFIRM_DELETE_SIMULATION = "ConfirmDeleteSimulation"; public static final String CONFIRM_DELETE_SIMULATION = "ConfirmDeleteSimulation";
public static final String AUTO_RUN_SIMULATIONS = "AutoRunSimulations"; public static final String AUTO_RUN_SIMULATIONS = "AutoRunSimulations";
public static final String LAUNCH_ROD_LENGTH = "LaunchRodLength"; public static final String LAUNCH_ROD_LENGTH = "LaunchRodLength";
@ -258,6 +261,18 @@ public abstract class ApplicationPreferences implements ChangeSource, ORPreferen
} }
/*
* ******************************************************************************************
*/
public String getDefaultFlightConfigName() {
return getString(DEFAULT_FLIGHT_CONFIG_NAME, FlightConfiguration.DEFAULT_CONFIG_NAME);
}
public void setDefaultFlightConfigName(String name) {
putString(DEFAULT_FLIGHT_CONFIG_NAME, name);
}
/* /*
* ****************************************************************************************** * ******************************************************************************************
*/ */

View File

@ -10,6 +10,7 @@ import java.util.UUID;
import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.ConcurrentLinkedQueue;
import info.openrocket.core.formatting.RocketDescriptor; import info.openrocket.core.formatting.RocketDescriptor;
import info.openrocket.core.preferences.ApplicationPreferences;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -33,6 +34,7 @@ import info.openrocket.core.util.Transformation;
*/ */
public class FlightConfiguration implements FlightConfigurableParameter<FlightConfiguration>, Monitorable { public class FlightConfiguration implements FlightConfigurableParameter<FlightConfiguration>, Monitorable {
private static final Logger log = LoggerFactory.getLogger(FlightConfiguration.class); private static final Logger log = LoggerFactory.getLogger(FlightConfiguration.class);
private static final ApplicationPreferences prefs = Application.getPreferences();
private String configurationName; private String configurationName;
public static String DEFAULT_CONFIG_NAME = "[{motors}]"; public static String DEFAULT_CONFIG_NAME = "[{motors}]";
@ -105,7 +107,7 @@ public class FlightConfiguration implements FlightConfigurableParameter<FlightCo
this.fcid = _fcid; this.fcid = _fcid;
} }
this.rocket = rocket; this.rocket = rocket;
this.configurationName = DEFAULT_CONFIG_NAME; this.configurationName = getDefaultName();
this.configurationInstanceId = configurationInstanceCount++; this.configurationInstanceId = configurationInstanceCount++;
updateStages(); updateStages();
@ -588,11 +590,19 @@ public class FlightConfiguration implements FlightConfigurableParameter<FlightCo
} }
public boolean isNameOverridden() { public boolean isNameOverridden() {
return (!DEFAULT_CONFIG_NAME.equals(this.configurationName)); return (!getDefaultName().equals(this.configurationName));
}
private String getDefaultName() {
String name = prefs.getDefaultFlightConfigName();
if (name == null) {
name = DEFAULT_CONFIG_NAME;
}
return name;
} }
/** /**
* Return the name of this configuration, with DEFAULT_CONFIG_NAME replaced by a * Return the name of this configuration, with the default flight config name replaced by a
* one line motor description. * one line motor description.
* If configurationName is null, the one line motor description is returned. * If configurationName is null, the one line motor description is returned.
* *
@ -600,20 +610,20 @@ public class FlightConfiguration implements FlightConfigurableParameter<FlightCo
*/ */
public String getName() { public String getName() {
if (configurationName == null) { if (configurationName == null) {
configurationName = DEFAULT_CONFIG_NAME; configurationName = getDefaultName();
} }
return descriptor.format(configurationName, rocket, fcid); return descriptor.format(configurationName, rocket, fcid);
} }
/** /**
* Return the raw configuration name, without replacing DEFAULT_CONFIG_NAME. * Return the raw configuration name, without replacing the default flight config name.
* If the configurationName is null, DEFAULT_CONFIG_NAME is returned. * If the configurationName is null, the default flight config name is returned.
* *
* @return raw flight configuration name * @return raw flight configuration name
*/ */
public String getNameRaw() { public String getNameRaw() {
if (configurationName == null) { if (configurationName == null) {
return DEFAULT_CONFIG_NAME; return getDefaultName();
} }
return configurationName; return configurationName;
} }
@ -930,7 +940,7 @@ public class FlightConfiguration implements FlightConfigurableParameter<FlightCo
public void setName(final String newName) { public void setName(final String newName) {
if ((newName == null) || (newName.isEmpty())) { if ((newName == null) || (newName.isEmpty())) {
this.configurationName = DEFAULT_CONFIG_NAME; this.configurationName = getDefaultName();
return; return;
} else if (!this.getId().isValid()) { } else if (!this.getId().isValid()) {
return; return;

View File

@ -251,6 +251,9 @@ edtmotorconfdlg.tbl.Separationheader = Separation
! Rename FlightConfiguration Dialog ! Rename FlightConfiguration Dialog
RenameConfigDialog.title = Rename Configuration RenameConfigDialog.title = Rename Configuration
RenameConfigDialog.lbl.name = Name for flight configuration: RenameConfigDialog.lbl.name = Name for flight configuration:
RenameConfigDialog.but.saveDefault = Save as default
RenameConfigDialog.dlg.saveDefault.msg = This change will only affect new flight configurations.
RenameConfigDialog.dlg.saveDefault.title = Save as default
RenameConfigDialog.but.reset = Reset to default RenameConfigDialog.but.reset = Reset to default
RenameConfigDialog.lbl.infoMotors = The text '<b>{motors}</b>' will be replaced with the <b>motor designation(s).</b><br><pre>\te.g. '{motors} \u2192 'M1350-0'</pre> RenameConfigDialog.lbl.infoMotors = The text '<b>{motors}</b>' will be replaced with the <b>motor designation(s).</b><br><pre>\te.g. '{motors} \u2192 'M1350-0'</pre>
RenameConfigDialog.lbl.infoManufacturers = The text '<b>{manufacturers}</b>' will be replaced with the <b>motor manufacturer(s).</b><br><pre>\te.g. '{manufacturers}' \u2192 'AeroTech'</pre> RenameConfigDialog.lbl.infoManufacturers = The text '<b>{manufacturers}</b>' will be replaced with the <b>motor manufacturer(s).</b><br><pre>\te.g. '{manufacturers}' \u2192 'AeroTech'</pre>

View File

@ -6,16 +6,16 @@ description: |
OpenRocket is a free, fully featured model rocket simulator that allows you OpenRocket is a free, fully featured model rocket simulator that allows you
to design and simulate your rockets before actually building and flying them. to design and simulate your rockets before actually building and flying them.
The main features include The main features include:
* Six-degree-of-freedom flight simulation * Six-degree-of-freedom flight simulation
* Automatic design optimization * Automatic design optimization
* Realtime simulated altitude, velocity and acceleration display * Realtime simulated altitude, velocity and acceleration display
* Staging and clustering support * Staging and clustering support
* Cross-platform (Java-based) * Cross-platform (Java-based)
* Read more about it on the OpenRocket.info. * Read more about it on OpenRocket.info
license: GPL-3.0 license: GPL-3.0
base: core22 base: core18
confinement: strict confinement: strict
plugs: plugs:
@ -37,7 +37,6 @@ architectures:
apps: apps:
openrocket: openrocket:
extensions: [gnome]
command: bin/launcher command: bin/launcher
plugs: plugs:
- home - home
@ -47,43 +46,23 @@ apps:
- dot-java-user-prefs-openrocket - dot-java-user-prefs-openrocket
- dot-openrocket - dot-openrocket
environment: environment:
JAVA_HOME: "$SNAP/usr/lib/jvm/java-17-openjdk-$CRAFT_TARGET_ARCH" JAVA_HOME: "$SNAP/usr/lib/jvm/java-17-openjdk-$SNAP_ARCH"
parts: parts:
openrocket: openrocket:
plugin: ant plugin: gradle
build-packages:
- ant
- ant-contrib
- ant-optional
- openjdk-17-jdk
- openjdk-17-jre
source: . source: .
source-type: git build-packages:
ant-build-targets: - openjdk-17-jdk
- clean
- check
- unittest
- jar
override-pull: | override-pull: |
# Override the pull in order to set the version and the grade.
# In the future, the releases can be annotated tags and snapcraft
# will use those for the version numbers.
#
# This can be extended to other parts of OpenRocket (to use the
# git describe --tags command) but the build should be updated at
# the same time so its consistent across all artifacts. Will defer
# that to a later pull request.
#
# Until then, just use the build.version value
craftctl default craftctl default
VERSION=$(cat core/resources/build.properties | awk -F'=' '/build\.version/ { print $2 }') version=$(grep 'version =' build.gradle | awk '{print $3}' | tr -d "'")
craftctl set version="$VERSION" craftctl set version="$version"
override-build: | override-build: |
craftctl default craftctl default
mv swing/build/jar/OpenRocket.jar $CRAFT_PART_INSTALL/OpenRocket.jar mkdir -p $CRAFT_PART_INSTALL/bin
cp build/libs/OpenRocket-*.jar $CRAFT_PART_INSTALL/OpenRocket.jar
stage-packages: stage-packages:
- openjdk-17-jdk
- openjdk-17-jre - openjdk-17-jre
- ca-certificates - ca-certificates
- ca-certificates-java - ca-certificates-java
@ -95,6 +74,6 @@ parts:
launcher: launcher:
plugin: dump plugin: dump
source: snap/local source: snap/local
source-type: local
organize: organize:
'launcher': 'bin/' launcher: bin/launcher

View File

@ -9,10 +9,12 @@ import java.awt.event.ActionListener;
import javax.swing.JButton; import javax.swing.JButton;
import javax.swing.JDialog; import javax.swing.JDialog;
import javax.swing.JLabel; import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.JTextField; import javax.swing.JTextField;
import info.openrocket.core.l10n.Translator; import info.openrocket.core.l10n.Translator;
import info.openrocket.core.preferences.ApplicationPreferences;
import info.openrocket.core.rocketcomponent.FlightConfigurationId; import info.openrocket.core.rocketcomponent.FlightConfigurationId;
import info.openrocket.core.rocketcomponent.Rocket; import info.openrocket.core.rocketcomponent.Rocket;
import info.openrocket.core.startup.Application; import info.openrocket.core.startup.Application;
@ -26,6 +28,7 @@ import info.openrocket.swing.gui.theme.UITheme;
public class RenameConfigDialog extends JDialog { public class RenameConfigDialog extends JDialog {
private static final long serialVersionUID = -5423008694485357248L; private static final long serialVersionUID = -5423008694485357248L;
private static final Translator trans = Application.getTranslator(); private static final Translator trans = Application.getTranslator();
private static final ApplicationPreferences prefs = Application.getPreferences();
private static Color dimTextColor; private static Color dimTextColor;
@ -56,6 +59,17 @@ public class RenameConfigDialog extends JDialog {
}); });
panel.add(okButton); panel.add(okButton);
JButton saveAsDefaultButton = new JButton(trans.get("RenameConfigDialog.but.saveDefault"));
saveAsDefaultButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(RenameConfigDialog.this, trans.get("RenameConfigDialog.dlg.saveDefault.msg"),
trans.get("RenameConfigDialog.dlg.saveDefault.title"), JOptionPane.INFORMATION_MESSAGE);
prefs.setDefaultFlightConfigName(textbox.getText());
}
});
panel.add(saveAsDefaultButton);
JButton resetToDefaultButton = new JButton(trans.get("RenameConfigDialog.but.reset")); JButton resetToDefaultButton = new JButton(trans.get("RenameConfigDialog.but.reset"));
resetToDefaultButton.addActionListener(new ActionListener() { resetToDefaultButton.addActionListener(new ActionListener() {
@Override @Override

View File

@ -372,12 +372,13 @@ public class SimulationConfigDialog extends JDialog {
if (plot != null) { if (plot != null) {
plot.setVisible(true); plot.setVisible(true);
} }
closeDialog();
return; return;
} else if (tabIdx == EXPORT_IDX) { } else if (tabIdx == EXPORT_IDX) {
if (exportTab == null || exportTab.doExport()) { if (exportTab == null) {
closeDialog(); closeDialog();
return;
} }
exportTab.doExport();
return; return;
} }