diff --git a/core/src/net/sf/openrocket/file/openrocket/OpenRocketSaver.java b/core/src/net/sf/openrocket/file/openrocket/OpenRocketSaver.java
index 9169348c6..b974de7a5 100644
--- a/core/src/net/sf/openrocket/file/openrocket/OpenRocketSaver.java
+++ b/core/src/net/sf/openrocket/file/openrocket/OpenRocketSaver.java
@@ -531,8 +531,13 @@ public class OpenRocketSaver extends RocketSaver {
// Write events
for (FlightEvent event : branch.getEvents()) {
- writeln("");
+ String eventStr = "";
+ writeln(eventStr);
}
// Write the data
diff --git a/core/src/net/sf/openrocket/file/openrocket/importt/DocumentConfig.java b/core/src/net/sf/openrocket/file/openrocket/importt/DocumentConfig.java
index 82428f119..dfecc84ab 100644
--- a/core/src/net/sf/openrocket/file/openrocket/importt/DocumentConfig.java
+++ b/core/src/net/sf/openrocket/file/openrocket/importt/DocumentConfig.java
@@ -113,6 +113,8 @@ class DocumentConfig {
// RocketComponent
setters.put("RocketComponent:name", new StringSetter(
Reflection.findMethod(RocketComponent.class, "setName", String.class)));
+ setters.put("RocketComponent:id", new StringSetter(
+ Reflection.findMethod(RocketComponent.class, "setID", String.class)));
setters.put("RocketComponent:color", new ColorSetter(
Reflection.findMethod(RocketComponent.class, "setColor", Color.class)));
setters.put("RocketComponent:linestyle", new EnumSetter(
diff --git a/core/src/net/sf/openrocket/file/openrocket/importt/FlightDataBranchHandler.java b/core/src/net/sf/openrocket/file/openrocket/importt/FlightDataBranchHandler.java
index d44303c9b..8884cae8e 100644
--- a/core/src/net/sf/openrocket/file/openrocket/importt/FlightDataBranchHandler.java
+++ b/core/src/net/sf/openrocket/file/openrocket/importt/FlightDataBranchHandler.java
@@ -8,6 +8,8 @@ import net.sf.openrocket.file.simplesax.AbstractElementHandler;
import net.sf.openrocket.file.simplesax.ElementHandler;
import net.sf.openrocket.file.simplesax.PlainTextHandler;
import net.sf.openrocket.l10n.Translator;
+import net.sf.openrocket.rocketcomponent.Rocket;
+import net.sf.openrocket.rocketcomponent.RocketComponent;
import net.sf.openrocket.simulation.FlightDataBranch;
import net.sf.openrocket.simulation.FlightDataType;
import net.sf.openrocket.simulation.FlightEvent;
@@ -126,6 +128,8 @@ class FlightDataBranchHandler extends AbstractElementHandler {
if (element.equals("event")) {
double time;
FlightEvent.Type type;
+ String sourceID;
+ RocketComponent source = null;
try {
time = DocumentConfig.stringToDouble(attributes.get("time"));
@@ -139,8 +143,20 @@ class FlightDataBranchHandler extends AbstractElementHandler {
warnings.add("Illegal event specification, ignoring.");
return;
}
+
+ // Get the event source
+ Rocket rocket = context.getOpenRocketDocument().getRocket();
+ sourceID = attributes.get("source");
+ if (sourceID != null) {
+ for (RocketComponent child : rocket.getAllChildren()) {
+ if (child.getID().equals(sourceID)) {
+ source = child;
+ break;
+ }
+ }
+ }
- branch.addEvent(new FlightEvent(type, time));
+ branch.addEvent(new FlightEvent(type, time, source));
return;
}
diff --git a/core/src/net/sf/openrocket/file/openrocket/savers/RocketComponentSaver.java b/core/src/net/sf/openrocket/file/openrocket/savers/RocketComponentSaver.java
index 04d031cd9..0bc98071c 100644
--- a/core/src/net/sf/openrocket/file/openrocket/savers/RocketComponentSaver.java
+++ b/core/src/net/sf/openrocket/file/openrocket/savers/RocketComponentSaver.java
@@ -36,6 +36,7 @@ public class RocketComponentSaver {
protected void addParams(net.sf.openrocket.rocketcomponent.RocketComponent c, List elements) {
elements.add("" + TextUtil.escapeXML(c.getName()) + "");
+ elements.add("" + TextUtil.escapeXML(c.getID()) + "");
ComponentPreset preset = c.getPresetComponent();
if (preset != null) {
diff --git a/core/src/net/sf/openrocket/rocketcomponent/RocketComponent.java b/core/src/net/sf/openrocket/rocketcomponent/RocketComponent.java
index 01b5b6820..4241f4fd0 100644
--- a/core/src/net/sf/openrocket/rocketcomponent/RocketComponent.java
+++ b/core/src/net/sf/openrocket/rocketcomponent/RocketComponent.java
@@ -1206,8 +1206,16 @@ public abstract class RocketComponent implements ChangeSource, Cloneable, Iterab
mutex.verify();
this.id = UniqueID.uuid();
}
-
-
+
+ /**
+ * Set the ID for this component.
+ * Generally not recommended to directly set the ID, this is done automatically. Only use this in case you have to.
+ * @param newID new ID
+ */
+ public void setID(String newID) {
+ mutex.verify();
+ this.id = newID;
+ }
/**
diff --git a/fileformat.txt b/fileformat.txt
index dafe8745a..aa3093182 100644
--- a/fileformat.txt
+++ b/fileformat.txt
@@ -63,3 +63,6 @@ The following file format versions exist:
Rename to ( remains for backward compatibility)
Rename to ( remains for backward compatibility)
Rename to ( remains for backward compatibility)
+
+1.9: Introduced with OpenRocket 23.xx.
+ Added ID for each rocket component, to in turn add this ID as a source for flight events.
\ No newline at end of file