]> git.gag.com Git - debian/openrocket/blobdiff - core/src/net/sf/openrocket/file/openrocket/OpenRocketSaver.java
create changelog entry
[debian/openrocket] / core / src / net / sf / openrocket / file / openrocket / OpenRocketSaver.java
index 0525a4ed58be061f68cbbe89071db7d130cb7a01..0a5e04790caa407459640e5ef3d95ddd0abf59a7 100644 (file)
@@ -29,6 +29,7 @@ import net.sf.openrocket.simulation.FlightDataBranch;
 import net.sf.openrocket.simulation.FlightDataType;
 import net.sf.openrocket.simulation.FlightEvent;
 import net.sf.openrocket.simulation.SimulationOptions;
+import net.sf.openrocket.simulation.customexpression.CustomExpression;
 import net.sf.openrocket.startup.Application;
 import net.sf.openrocket.util.BugException;
 import net.sf.openrocket.util.BuildProperties;
@@ -100,6 +101,9 @@ public class OpenRocketSaver extends RocketSaver {
                
                writeln("");
                
+               // Save custom expressions;
+               saveCustomDatatypes(document);
+               
                // Save all simulations
                writeln("<simulations>");
                indent++;
@@ -123,7 +127,41 @@ public class OpenRocketSaver extends RocketSaver {
                }
        }
        
+       /*
+        * Save all the custom expressions
+        */
+       private void saveCustomDatatypes(OpenRocketDocument doc) throws IOException {
+               
+               if (doc.getCustomExpressions().isEmpty())
+                       return;
+               
+               writeln("<datatypes>");
+               indent++;
+               
+               for (CustomExpression exp : doc.getCustomExpressions()) {
+                       saveCustomExpressionDatatype(exp);
+               }
+               
+               indent--;
+               writeln("</datatypes>");
+               writeln("");
+       }
        
+       /*
+        * Save one custom expression datatype
+        */
+       private void saveCustomExpressionDatatype(CustomExpression exp) throws IOException {
+               // Write out custom expression
+               
+               writeln("<type source=\"customexpression\">");
+               indent++;
+               writeln("<name>" + exp.getName() + "</name>");
+               writeln("<symbol>" + exp.getSymbol() + "</symbol>");
+               writeln("<unit unittype=\"auto\">" + exp.getUnit() + "</unit>"); // auto unit type means it will be determined from string
+               writeln("<expression>" + exp.getExpressionString() + "</expression>");
+               indent--;
+               writeln("</type>");
+       }
        
        @Override
        public long estimateFileSize(OpenRocketDocument doc, StorageOptions options) {
@@ -189,6 +227,7 @@ public class OpenRocketSaver extends RocketSaver {
                 * File version 1.5 is requires for:
                 *  - saving designs using ComponentPrests
                 *  - recovery device deployment on lower stage separation
+                *  - custom expressions
                 *  
                 * File version 1.4 is required for:
                 *  - saving simulation data
@@ -217,6 +256,11 @@ public class OpenRocketSaver extends RocketSaver {
                        }
                }
                
+               // Check for custom expressions
+               if (!document.getCustomExpressions().isEmpty()) {
+                       return FILE_VERSION_DIVISOR + 5;
+               }
+               
                // Check if design has simulations defined (version 1.4)
                if (document.getSimulationCount() > 0) {
                        return FILE_VERSION_DIVISOR + 4;
@@ -322,8 +366,10 @@ public class OpenRocketSaver extends RocketSaver {
                
                writeln("<name>" + escapeXML(simulation.getName()) + "</name>");
                // TODO: MEDIUM: Other simulators/calculators
+               
                writeln("<simulator>RK4Simulator</simulator>");
                writeln("<calculator>BarrowmanCalculator</calculator>");
+               
                writeln("<conditions>");
                indent++;
                
@@ -359,7 +405,6 @@ public class OpenRocketSaver extends RocketSaver {
                        writeElement("listener", escapeXML(s));
                }
                
-               
                // Write basic simulation data
                
                FlightData data = simulation.getSimulatedData();
@@ -437,6 +482,17 @@ public class OpenRocketSaver extends RocketSaver {
                StringBuilder sb = new StringBuilder();
                sb.append("<databranch name=\"");
                sb.append(escapeXML(branch.getBranchName()));
+               
+               // Kevins version where typekeys are used
+               /*
+               sb.append("\" typekeys=\"");
+               for (int i = 0; i < types.length; i++) {
+                       if (i > 0)
+                               sb.append(",");
+                       sb.append(escapeXML(types[i].getKey()));
+               }
+               */
+               
                sb.append("\" types=\"");
                for (int i = 0; i < types.length; i++) {
                        if (i > 0)