diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 42903c033..57e84ad58 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -13,7 +13,10 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - name: Checkout repository and submodules + uses: actions/checkout@v2 + with: + submodules: recursive - name: Setup JDK 11 uses: actions/setup-java@v2 with: diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..e222db9db --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "swing/resources-src/datafiles/components"] + path = swing/resources-src/datafiles/components + url = git@github.com:dbcook/openrocket-database.git diff --git a/core/resources/l10n/messages.properties b/core/resources/l10n/messages.properties index b9b89cb98..12a5db6da 100644 --- a/core/resources/l10n/messages.properties +++ b/core/resources/l10n/messages.properties @@ -2040,8 +2040,10 @@ ComponentPresetChooserDialog.menu.sortAsc = Sort Ascending ComponentPresetChooserDialog.menu.sortDesc = Sort Descending ComponentPresetChooserDialog.menu.units = Units ComponentPresetChooserDialog.checkbox.showAllCompatible = Show all compatible +ComponentPresetChooserDialog.checkbox.showLegacyCheckBox = Show Legacy Database ComponentPresetChooserDialog.lbl.favorites = Select to add preset to drop-down menu table.column.Favorite = Favorite +table.column.Legacy = Legacy table.column.Manufacturer = Manufacturer table.column.PartNo = Part Number table.column.Description = Description diff --git a/core/src/net/sf/openrocket/file/openrocket/importt/ComponentPresetSetter.java b/core/src/net/sf/openrocket/file/openrocket/importt/ComponentPresetSetter.java index dead76d17..8a10be1d7 100644 --- a/core/src/net/sf/openrocket/file/openrocket/importt/ComponentPresetSetter.java +++ b/core/src/net/sf/openrocket/file/openrocket/importt/ComponentPresetSetter.java @@ -44,7 +44,6 @@ class ComponentPresetSetter implements Setter { } List presets = Application.getComponentPresetDao().find(manufacturerName, productNo); - ComponentPreset matchingPreset = null; for (ComponentPreset preset : presets) { @@ -53,6 +52,7 @@ class ComponentPresetSetter implements Setter { matchingPreset = preset; break; } + if (type != null && preset.getType().name().equals(type) && matchingPreset != null) { // Found the first one with matching type. matchingPreset = preset; @@ -71,4 +71,4 @@ class ComponentPresetSetter implements Setter { setMethod.invoke(c, matchingPreset); } -} \ No newline at end of file +} diff --git a/core/src/net/sf/openrocket/file/openrocket/importt/FinSetPointHandler.java b/core/src/net/sf/openrocket/file/openrocket/importt/FinSetPointHandler.java index 50dd7f10d..05f3386e2 100644 --- a/core/src/net/sf/openrocket/file/openrocket/importt/FinSetPointHandler.java +++ b/core/src/net/sf/openrocket/file/openrocket/importt/FinSetPointHandler.java @@ -62,6 +62,10 @@ class FinSetPointHandler extends AbstractElementHandler { public void endHandler(String element, HashMap attributes, String content, WarningSet warnings) { finset.setPoints(coordinates.toArray(new Coordinate[0])); - + // Update the tab position. This is because the tab position relies on the finset length, but because the + // tag comes before the tag in the .ork file, the tab position will be set first, + // using the default finset length, not the intended finset length that we extract in this part. So we update + // the tab position here to cope for the wrongly calculated tab position earlier. + finset.updateTabPosition(); } } \ No newline at end of file diff --git a/core/src/net/sf/openrocket/preset/ComponentPreset.java b/core/src/net/sf/openrocket/preset/ComponentPreset.java index c99833504..46df68c88 100644 --- a/core/src/net/sf/openrocket/preset/ComponentPreset.java +++ b/core/src/net/sf/openrocket/preset/ComponentPreset.java @@ -47,6 +47,7 @@ public class ComponentPreset implements Comparable, Serializabl public enum Type { BODY_TUBE(new TypedKey[] { + ComponentPreset.LEGACY, ComponentPreset.MANUFACTURER, ComponentPreset.PARTNO, ComponentPreset.DESCRIPTION, @@ -55,6 +56,7 @@ public class ComponentPreset implements Comparable, Serializabl ComponentPreset.LENGTH }), NOSE_CONE(new TypedKey[] { + ComponentPreset.LEGACY, ComponentPreset.MANUFACTURER, ComponentPreset.PARTNO, ComponentPreset.DESCRIPTION, @@ -65,6 +67,7 @@ public class ComponentPreset implements Comparable, Serializabl ComponentPreset.LENGTH }), TRANSITION(new TypedKey[] { + ComponentPreset.LEGACY, ComponentPreset.MANUFACTURER, ComponentPreset.PARTNO, ComponentPreset.DESCRIPTION, @@ -78,6 +81,7 @@ public class ComponentPreset implements Comparable, Serializabl ComponentPreset.LENGTH }), TUBE_COUPLER(new TypedKey[] { + ComponentPreset.LEGACY, ComponentPreset.MANUFACTURER, ComponentPreset.PARTNO, ComponentPreset.DESCRIPTION, @@ -86,6 +90,7 @@ public class ComponentPreset implements Comparable, Serializabl ComponentPreset.LENGTH }), BULK_HEAD(new TypedKey[] { + ComponentPreset.LEGACY, ComponentPreset.MANUFACTURER, ComponentPreset.PARTNO, ComponentPreset.DESCRIPTION, @@ -93,6 +98,7 @@ public class ComponentPreset implements Comparable, Serializabl ComponentPreset.LENGTH }), CENTERING_RING(new TypedKey[] { + ComponentPreset.LEGACY, ComponentPreset.MANUFACTURER, ComponentPreset.PARTNO, ComponentPreset.DESCRIPTION, @@ -101,6 +107,7 @@ public class ComponentPreset implements Comparable, Serializabl ComponentPreset.LENGTH }), ENGINE_BLOCK(new TypedKey[] { + ComponentPreset.LEGACY, ComponentPreset.MANUFACTURER, ComponentPreset.PARTNO, ComponentPreset.DESCRIPTION, @@ -109,6 +116,7 @@ public class ComponentPreset implements Comparable, Serializabl ComponentPreset.LENGTH }), LAUNCH_LUG(new TypedKey[] { + ComponentPreset.LEGACY, ComponentPreset.MANUFACTURER, ComponentPreset.PARTNO, ComponentPreset.DESCRIPTION, @@ -117,6 +125,7 @@ public class ComponentPreset implements Comparable, Serializabl ComponentPreset.LENGTH }), RAIL_BUTTON(new TypedKey[] { + ComponentPreset.LEGACY, ComponentPreset.MANUFACTURER, ComponentPreset.PARTNO, ComponentPreset.DESCRIPTION, @@ -128,6 +137,7 @@ public class ComponentPreset implements Comparable, Serializabl ComponentPreset.HEIGHT }), STREAMER(new TypedKey[] { + ComponentPreset.LEGACY, ComponentPreset.MANUFACTURER, ComponentPreset.PARTNO, ComponentPreset.DESCRIPTION, @@ -137,6 +147,7 @@ public class ComponentPreset implements Comparable, Serializabl ComponentPreset.MATERIAL }), PARACHUTE(new TypedKey[] { + ComponentPreset.LEGACY, ComponentPreset.MANUFACTURER, ComponentPreset.PARTNO, ComponentPreset.DESCRIPTION, @@ -173,6 +184,7 @@ public class ComponentPreset implements Comparable, Serializabl } + public final static TypedKey LEGACY = new TypedKey("Legacy", Boolean.class); public final static TypedKey MANUFACTURER = new TypedKey("Manufacturer", Manufacturer.class); public final static TypedKey PARTNO = new TypedKey("PartNo", String.class); public final static TypedKey DESCRIPTION = new TypedKey("Description", String.class); @@ -204,6 +216,7 @@ public class ComponentPreset implements Comparable, Serializabl public final static TypedKey FLANGE_HEIGHT = new TypedKey("FlangeHeight", Double.class, UnitGroup.UNITS_LENGTH); public final static List> ORDERED_KEY_LIST = Collections.unmodifiableList(Arrays.asList( + LEGACY, MANUFACTURER, PARTNO, DESCRIPTION, @@ -237,6 +250,15 @@ public class ComponentPreset implements Comparable, Serializabl ComponentPreset() { } + /** + * Convenience method to determine whether this is from the legacy database + * + * @return + */ + public Boolean getLegacy() { + return properties.get(LEGACY); + } + /** * Convenience method to retrieve the Type of this ComponentPreset. * @@ -355,6 +377,9 @@ public class ComponentPreset implements Comparable, Serializabl }); for (TypedKey key : keys) { + if (key == ComponentPreset.LEGACY) { + continue; + } Object value = properties.get(key); diff --git a/core/src/net/sf/openrocket/preset/xml/BaseComponentDTO.java b/core/src/net/sf/openrocket/preset/xml/BaseComponentDTO.java index 3db31341c..7fec283d5 100644 --- a/core/src/net/sf/openrocket/preset/xml/BaseComponentDTO.java +++ b/core/src/net/sf/openrocket/preset/xml/BaseComponentDTO.java @@ -156,7 +156,7 @@ public abstract class BaseComponentDTO { } } - public abstract ComponentPreset asComponentPreset(List materials) throws InvalidComponentPresetException; + public abstract ComponentPreset asComponentPreset(Boolean legacy, List materials) throws InvalidComponentPresetException; void addProps(TypedPropertyMap props, List materialList) { props.put(ComponentPreset.MANUFACTURER, Manufacturer.getManufacturer(manufacturer)); @@ -228,14 +228,16 @@ public abstract class BaseComponentDTO { static class AnnotatedLengthDTO { @XmlAttribute(name = "Unit", required = false) - private final String unitName = "m"; + private final String unitName; @XmlValue private double length; AnnotatedLengthDTO() { + this.unitName = "m"; } AnnotatedLengthDTO(double length) { + this.unitName = "m"; this.length = length; } @@ -246,14 +248,16 @@ public abstract class BaseComponentDTO { static class AnnotatedMassDTO { @XmlAttribute(name = "Unit", required = false) - private final String unitName = "kg"; + private final String unitName; @XmlValue private double mass; AnnotatedMassDTO() { + unitName = "kg"; } AnnotatedMassDTO(double mass) { + unitName = "kg"; this.mass = mass; } diff --git a/core/src/net/sf/openrocket/preset/xml/BodyTubeDTO.java b/core/src/net/sf/openrocket/preset/xml/BodyTubeDTO.java index 536944f2a..ef60f328c 100644 --- a/core/src/net/sf/openrocket/preset/xml/BodyTubeDTO.java +++ b/core/src/net/sf/openrocket/preset/xml/BodyTubeDTO.java @@ -83,12 +83,13 @@ public class BodyTubeDTO extends BaseComponentDTO { } @Override - public ComponentPreset asComponentPreset(java.util.List materials) throws InvalidComponentPresetException { - return asComponentPreset(ComponentPreset.Type.BODY_TUBE, materials); + public ComponentPreset asComponentPreset(Boolean legacy, java.util.List materials) throws InvalidComponentPresetException { + return asComponentPreset(legacy, ComponentPreset.Type.BODY_TUBE, materials); } - public ComponentPreset asComponentPreset(ComponentPreset.Type type, List materials) throws InvalidComponentPresetException { + public ComponentPreset asComponentPreset(Boolean legacy, ComponentPreset.Type type, List materials) throws InvalidComponentPresetException { TypedPropertyMap props = new TypedPropertyMap(); + props.put(ComponentPreset.LEGACY, legacy); addProps(props, materials); props.put(ComponentPreset.INNER_DIAMETER, this.getInsideDiameter()); props.put(ComponentPreset.OUTER_DIAMETER, this.getOutsideDiameter()); diff --git a/core/src/net/sf/openrocket/preset/xml/BulkHeadDTO.java b/core/src/net/sf/openrocket/preset/xml/BulkHeadDTO.java index 1db3dd7d0..7e81622c8 100644 --- a/core/src/net/sf/openrocket/preset/xml/BulkHeadDTO.java +++ b/core/src/net/sf/openrocket/preset/xml/BulkHeadDTO.java @@ -65,8 +65,9 @@ public class BulkHeadDTO extends BaseComponentDTO { } @Override - public ComponentPreset asComponentPreset(List materials) throws InvalidComponentPresetException { + public ComponentPreset asComponentPreset(Boolean legacy, List materials) throws InvalidComponentPresetException { TypedPropertyMap props = new TypedPropertyMap(); + props.put(ComponentPreset.LEGACY, legacy); addProps(props, materials); props.put(ComponentPreset.OUTER_DIAMETER, this.getOutsideDiameter()); props.put(ComponentPreset.LENGTH, this.getLength()); diff --git a/core/src/net/sf/openrocket/preset/xml/CenteringRingDTO.java b/core/src/net/sf/openrocket/preset/xml/CenteringRingDTO.java index 9866a15a9..bdada1c53 100644 --- a/core/src/net/sf/openrocket/preset/xml/CenteringRingDTO.java +++ b/core/src/net/sf/openrocket/preset/xml/CenteringRingDTO.java @@ -35,7 +35,7 @@ public class CenteringRingDTO extends BodyTubeDTO { } @Override - public ComponentPreset asComponentPreset(List materials) throws InvalidComponentPresetException { - return super.asComponentPreset(ComponentPreset.Type.CENTERING_RING, materials); + public ComponentPreset asComponentPreset(Boolean legacy, List materials) throws InvalidComponentPresetException { + return super.asComponentPreset(legacy, ComponentPreset.Type.CENTERING_RING, materials); } } diff --git a/core/src/net/sf/openrocket/preset/xml/EngineBlockDTO.java b/core/src/net/sf/openrocket/preset/xml/EngineBlockDTO.java index 6c3f61fa8..730b339b4 100644 --- a/core/src/net/sf/openrocket/preset/xml/EngineBlockDTO.java +++ b/core/src/net/sf/openrocket/preset/xml/EngineBlockDTO.java @@ -34,7 +34,7 @@ public class EngineBlockDTO extends BodyTubeDTO { } @Override - public ComponentPreset asComponentPreset(List materials) throws InvalidComponentPresetException { - return super.asComponentPreset(ComponentPreset.Type.ENGINE_BLOCK, materials); + public ComponentPreset asComponentPreset(Boolean legacy, List materials) throws InvalidComponentPresetException { + return super.asComponentPreset(legacy, ComponentPreset.Type.ENGINE_BLOCK, materials); } } diff --git a/core/src/net/sf/openrocket/preset/xml/LaunchLugDTO.java b/core/src/net/sf/openrocket/preset/xml/LaunchLugDTO.java index e723861b7..da1feb255 100644 --- a/core/src/net/sf/openrocket/preset/xml/LaunchLugDTO.java +++ b/core/src/net/sf/openrocket/preset/xml/LaunchLugDTO.java @@ -83,12 +83,13 @@ public class LaunchLugDTO extends BaseComponentDTO { } @Override - public ComponentPreset asComponentPreset(java.util.List materials) throws InvalidComponentPresetException { - return asComponentPreset(ComponentPreset.Type.LAUNCH_LUG, materials); + public ComponentPreset asComponentPreset(Boolean legacy, java.util.List materials) throws InvalidComponentPresetException { + return asComponentPreset(legacy, ComponentPreset.Type.LAUNCH_LUG, materials); } - public ComponentPreset asComponentPreset(ComponentPreset.Type type, List materials) throws InvalidComponentPresetException { + public ComponentPreset asComponentPreset(Boolean legacy, ComponentPreset.Type type, List materials) throws InvalidComponentPresetException { TypedPropertyMap props = new TypedPropertyMap(); + props.put(ComponentPreset.LEGACY, legacy); addProps(props, materials); props.put(ComponentPreset.INNER_DIAMETER, this.getInsideDiameter()); props.put(ComponentPreset.OUTER_DIAMETER, this.getOutsideDiameter()); diff --git a/core/src/net/sf/openrocket/preset/xml/NoseConeDTO.java b/core/src/net/sf/openrocket/preset/xml/NoseConeDTO.java index 0a071d6cb..3dc475821 100644 --- a/core/src/net/sf/openrocket/preset/xml/NoseConeDTO.java +++ b/core/src/net/sf/openrocket/preset/xml/NoseConeDTO.java @@ -131,8 +131,9 @@ public class NoseConeDTO extends BaseComponentDTO { } @Override - public ComponentPreset asComponentPreset(List materials) throws InvalidComponentPresetException { + public ComponentPreset asComponentPreset(Boolean legacy, List materials) throws InvalidComponentPresetException { TypedPropertyMap props = new TypedPropertyMap(); + props.put(ComponentPreset.LEGACY, legacy); addProps(props, materials); props.put(ComponentPreset.SHAPE, shape.getORShape()); props.put(ComponentPreset.AFT_OUTER_DIAMETER, this.getOutsideDiameter()); diff --git a/core/src/net/sf/openrocket/preset/xml/OpenRocketComponentDTO.java b/core/src/net/sf/openrocket/preset/xml/OpenRocketComponentDTO.java index 7294019c0..0759e6a3f 100644 --- a/core/src/net/sf/openrocket/preset/xml/OpenRocketComponentDTO.java +++ b/core/src/net/sf/openrocket/preset/xml/OpenRocketComponentDTO.java @@ -10,6 +10,7 @@ import javax.xml.bind.annotation.XmlElementRef; import javax.xml.bind.annotation.XmlElementRefs; import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlValue; import net.sf.openrocket.material.Material; import net.sf.openrocket.preset.ComponentPreset; @@ -25,6 +26,9 @@ public class OpenRocketComponentDTO { @XmlElement(name = "Version") private final String version = "0.1"; + @XmlElement(name = "Legacy", required = false) + private String legacy; + @XmlElementWrapper(name = "Materials") @XmlElement(name = "Material") List materials = new ArrayList(); @@ -47,11 +51,27 @@ public class OpenRocketComponentDTO { public OpenRocketComponentDTO() { } - public OpenRocketComponentDTO(final List theMaterials, final List theComponents) { + public OpenRocketComponentDTO(boolean isLegacy, final List theMaterials, final List theComponents) { + setLegacy(isLegacy); materials = theMaterials; components = theComponents; } + public Boolean getLegacy() { + if (null == legacy) { + return false; + } + return true; + } + + public void setLegacy(Boolean isLegacy) { + if (isLegacy) { + legacy = ""; + } else { + legacy = null; + } + } + public List getMaterials() { return materials; } @@ -79,7 +99,7 @@ public class OpenRocketComponentDTO { public List asComponentPresets() throws InvalidComponentPresetException { List result = new ArrayList(components.size()); for (int i = 0; i < components.size(); i++) { - result.add(components.get(i).asComponentPreset(materials)); + result.add(components.get(i).asComponentPreset(getLegacy(), materials)); } return result; } diff --git a/core/src/net/sf/openrocket/preset/xml/ParachuteDTO.java b/core/src/net/sf/openrocket/preset/xml/ParachuteDTO.java index f325b32a9..1bf861570 100644 --- a/core/src/net/sf/openrocket/preset/xml/ParachuteDTO.java +++ b/core/src/net/sf/openrocket/preset/xml/ParachuteDTO.java @@ -108,12 +108,13 @@ public class ParachuteDTO extends BaseComponentDTO { } @Override - public ComponentPreset asComponentPreset(java.util.List materials) throws InvalidComponentPresetException { - return asComponentPreset(ComponentPreset.Type.PARACHUTE, materials); + public ComponentPreset asComponentPreset(Boolean legacy, java.util.List materials) throws InvalidComponentPresetException { + return asComponentPreset(legacy, ComponentPreset.Type.PARACHUTE, materials); } - public ComponentPreset asComponentPreset(ComponentPreset.Type type, List materials) throws InvalidComponentPresetException { + public ComponentPreset asComponentPreset(Boolean legacy, ComponentPreset.Type type, List materials) throws InvalidComponentPresetException { TypedPropertyMap props = new TypedPropertyMap(); + props.put(ComponentPreset.LEGACY, legacy); addProps(props, materials); // TODO - seems some vendors use a bulk material for the sheet along with a Thickness. // need to fix the MATERIAL packed into the componentpreset. diff --git a/core/src/net/sf/openrocket/preset/xml/RailButtonDTO.java b/core/src/net/sf/openrocket/preset/xml/RailButtonDTO.java index ab42e38df..aa4f37bdc 100644 --- a/core/src/net/sf/openrocket/preset/xml/RailButtonDTO.java +++ b/core/src/net/sf/openrocket/preset/xml/RailButtonDTO.java @@ -113,12 +113,13 @@ public class RailButtonDTO extends BaseComponentDTO { } @Override - public ComponentPreset asComponentPreset(java.util.List materials) throws InvalidComponentPresetException { - return asComponentPreset(ComponentPreset.Type.RAIL_BUTTON, materials); + public ComponentPreset asComponentPreset(Boolean legacy, java.util.List materials) throws InvalidComponentPresetException { + return asComponentPreset(legacy, ComponentPreset.Type.RAIL_BUTTON, materials); } - public ComponentPreset asComponentPreset(ComponentPreset.Type type, List materials) throws InvalidComponentPresetException { + public ComponentPreset asComponentPreset(Boolean legacy, ComponentPreset.Type type, List materials) throws InvalidComponentPresetException { TypedPropertyMap props = new TypedPropertyMap(); + props.put(ComponentPreset.LEGACY, legacy); addProps(props, materials); props.put(ComponentPreset.INNER_DIAMETER, this.getInsideDiameter()); props.put(ComponentPreset.OUTER_DIAMETER, this.getOutsideDiameter()); diff --git a/core/src/net/sf/openrocket/preset/xml/StreamerDTO.java b/core/src/net/sf/openrocket/preset/xml/StreamerDTO.java index 7ed0dd84b..490cfc499 100644 --- a/core/src/net/sf/openrocket/preset/xml/StreamerDTO.java +++ b/core/src/net/sf/openrocket/preset/xml/StreamerDTO.java @@ -83,13 +83,14 @@ public class StreamerDTO extends BaseComponentDTO { } @Override - public ComponentPreset asComponentPreset(java.util.List materials) throws InvalidComponentPresetException { - return asComponentPreset(ComponentPreset.Type.STREAMER, materials); + public ComponentPreset asComponentPreset(Boolean legacy, java.util.List materials) throws InvalidComponentPresetException { + return asComponentPreset(legacy, ComponentPreset.Type.STREAMER, materials); } - public ComponentPreset asComponentPreset(ComponentPreset.Type type, List materials) throws InvalidComponentPresetException { + public ComponentPreset asComponentPreset(Boolean legacy, ComponentPreset.Type type, List materials) throws InvalidComponentPresetException { TypedPropertyMap props = new TypedPropertyMap(); addProps(props, materials); + props.put(ComponentPreset.LEGACY, legacy); // TODO - seems some vendors use a bulk material for the sheet along with a Thickness. // need to fix the MATERIAL packed into the componentpreset. props.put(ComponentPreset.WIDTH, this.getWidth()); diff --git a/core/src/net/sf/openrocket/preset/xml/TransitionDTO.java b/core/src/net/sf/openrocket/preset/xml/TransitionDTO.java index 1aaaac651..caf01e5ea 100644 --- a/core/src/net/sf/openrocket/preset/xml/TransitionDTO.java +++ b/core/src/net/sf/openrocket/preset/xml/TransitionDTO.java @@ -176,8 +176,9 @@ public class TransitionDTO extends BaseComponentDTO { } @Override - public ComponentPreset asComponentPreset(List materials) throws InvalidComponentPresetException { + public ComponentPreset asComponentPreset(Boolean legacy, List materials) throws InvalidComponentPresetException { TypedPropertyMap props = new TypedPropertyMap(); + props.put(ComponentPreset.LEGACY, legacy); addProps(props, materials); props.put(ComponentPreset.SHAPE, shape.getORShape()); props.put(ComponentPreset.FORE_OUTER_DIAMETER, this.getForeOutsideDiameter()); diff --git a/core/src/net/sf/openrocket/preset/xml/TubeCouplerDTO.java b/core/src/net/sf/openrocket/preset/xml/TubeCouplerDTO.java index 3cc096589..c6e5ad833 100644 --- a/core/src/net/sf/openrocket/preset/xml/TubeCouplerDTO.java +++ b/core/src/net/sf/openrocket/preset/xml/TubeCouplerDTO.java @@ -34,7 +34,7 @@ public class TubeCouplerDTO extends BodyTubeDTO { } @Override - public ComponentPreset asComponentPreset(List materials) throws InvalidComponentPresetException { - return super.asComponentPreset(ComponentPreset.Type.TUBE_COUPLER, materials); + public ComponentPreset asComponentPreset(Boolean legacy, List materials) throws InvalidComponentPresetException { + return super.asComponentPreset(legacy, ComponentPreset.Type.TUBE_COUPLER, materials); } } diff --git a/core/src/net/sf/openrocket/rocketcomponent/FinSet.java b/core/src/net/sf/openrocket/rocketcomponent/FinSet.java index d23625e88..2ff54bab0 100644 --- a/core/src/net/sf/openrocket/rocketcomponent/FinSet.java +++ b/core/src/net/sf/openrocket/rocketcomponent/FinSet.java @@ -5,8 +5,6 @@ import java.util.*; import java.util.ArrayList; -import net.sf.openrocket.appearance.Appearance; -import net.sf.openrocket.appearance.Decal; import net.sf.openrocket.util.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -103,7 +101,7 @@ public abstract class FinSet extends ExternalComponent implements AxialPositiona private static final double minimumTabArea = 1e-8; private double tabHeight = 0; private double tabLength = 0.05; - // this is always measured from the the root-lead point. + // this is always measured from the root-lead point. private double tabPosition = 0.0; private AxialMethod tabOffsetMethod = AxialMethod.MIDDLE; private double tabOffset = 0.; @@ -291,12 +289,12 @@ public abstract class FinSet extends ExternalComponent implements AxialPositiona tabLength = lengthRequest; - setTabPosition(); + updateTabPosition(); fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE); } - - protected void setTabPosition(){ + + public void updateTabPosition(){ this.tabPosition = this.tabOffsetMethod.getAsPosition(tabOffset, tabLength, length); } @@ -307,7 +305,7 @@ public abstract class FinSet extends ExternalComponent implements AxialPositiona */ public void setTabOffset( final double offsetRequest) { tabOffset = offsetRequest; - setTabPosition(); + updateTabPosition(); fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE); } @@ -909,7 +907,7 @@ public abstract class FinSet extends ExternalComponent implements AxialPositiona return new Coordinate[]{}; } - final int pointCount = 4; + final int pointCount = 5; Coordinate[] points = new Coordinate[pointCount]; final Coordinate finFront = this.getFinFront(); @@ -932,6 +930,7 @@ public abstract class FinSet extends ExternalComponent implements AxialPositiona points[1] = new Coordinate(xTabFront, yTabBottom ); points[2] = new Coordinate(xTabTrail, yTabBottom ); points[3] = new Coordinate(xTabTrail, yTabTrail); + points[4] = new Coordinate(xTabFront, yTabFront); return points; } diff --git a/core/src/net/sf/openrocket/rocketcomponent/TrapezoidFinSet.java b/core/src/net/sf/openrocket/rocketcomponent/TrapezoidFinSet.java index 34b29525b..e03951405 100644 --- a/core/src/net/sf/openrocket/rocketcomponent/TrapezoidFinSet.java +++ b/core/src/net/sf/openrocket/rocketcomponent/TrapezoidFinSet.java @@ -77,7 +77,7 @@ public class TrapezoidFinSet extends FinSet { if (length == r) return; length = Math.max(r, 0); - setTabPosition(); + updateTabPosition(); fireComponentChangeEvent(ComponentChangeEvent.AEROMASS_CHANGE); } diff --git a/swing/build.xml b/swing/build.xml index 7f817f208..512ba6943 100644 --- a/swing/build.xml +++ b/swing/build.xml @@ -64,6 +64,7 @@ + @@ -75,7 +76,7 @@ - + @@ -124,14 +125,6 @@ - - - - - @@ -139,7 +132,7 @@ Generating ORC file for vendor @{vendor} - @@ -166,7 +159,19 @@ - + + + + + + + + + + + + diff --git a/swing/resources-src/datafiles/components b/swing/resources-src/datafiles/components new file mode 160000 index 000000000..52e1e2c08 --- /dev/null +++ b/swing/resources-src/datafiles/components @@ -0,0 +1 @@ +Subproject commit 52e1e2c0800ebf62fd0e9cecd69aaaed6cddf80e diff --git a/swing/resources-src/datafiles/presets/Estes.orc b/swing/resources-src/datafiles/legacy_components/Estes.orc similarity index 99% rename from swing/resources-src/datafiles/presets/Estes.orc rename to swing/resources-src/datafiles/legacy_components/Estes.orc index 839719b71..f5f987563 100644 --- a/swing/resources-src/datafiles/presets/Estes.orc +++ b/swing/resources-src/datafiles/legacy_components/Estes.orc @@ -1,6 +1,7 @@ 0.1 + diff --git a/swing/resources-src/datafiles/presets/LocPrecision.orc b/swing/resources-src/datafiles/legacy_components/LocPrecision.orc similarity index 99% rename from swing/resources-src/datafiles/presets/LocPrecision.orc rename to swing/resources-src/datafiles/legacy_components/LocPrecision.orc index 039a4877b..ebfcdfbe6 100644 --- a/swing/resources-src/datafiles/presets/LocPrecision.orc +++ b/swing/resources-src/datafiles/legacy_components/LocPrecision.orc @@ -1,6 +1,7 @@ 0.1 + [material:.060 Carbon Fiber] diff --git a/swing/resources-src/datafiles/presets/Quest.orc b/swing/resources-src/datafiles/legacy_components/Quest.orc similarity index 99% rename from swing/resources-src/datafiles/presets/Quest.orc rename to swing/resources-src/datafiles/legacy_components/Quest.orc index 849a889c7..f5dc587a3 100644 --- a/swing/resources-src/datafiles/presets/Quest.orc +++ b/swing/resources-src/datafiles/legacy_components/Quest.orc @@ -1,6 +1,7 @@ 0.1 + diff --git a/swing/resources-src/datafiles/presets/bluetube.orc b/swing/resources-src/datafiles/legacy_components/bluetube.orc similarity index 99% rename from swing/resources-src/datafiles/presets/bluetube.orc rename to swing/resources-src/datafiles/legacy_components/bluetube.orc index e5ca86caf..c54ccca16 100644 --- a/swing/resources-src/datafiles/presets/bluetube.orc +++ b/swing/resources-src/datafiles/legacy_components/bluetube.orc @@ -1,6 +1,7 @@ 0.1 + Vulcanized Fiber diff --git a/swing/resources-src/datafiles/presets/bms.orc b/swing/resources-src/datafiles/legacy_components/bms.orc similarity index 99% rename from swing/resources-src/datafiles/presets/bms.orc rename to swing/resources-src/datafiles/legacy_components/bms.orc index 5d233a3bf..116b87954 100644 --- a/swing/resources-src/datafiles/presets/bms.orc +++ b/swing/resources-src/datafiles/legacy_components/bms.orc @@ -1,6 +1,7 @@ 0.1 + Balsa diff --git a/swing/resources-src/datafiles/presets/fliskits.orc b/swing/resources-src/datafiles/legacy_components/fliskits.orc similarity index 99% rename from swing/resources-src/datafiles/presets/fliskits.orc rename to swing/resources-src/datafiles/legacy_components/fliskits.orc index 3d85d4816..111b204ad 100644 --- a/swing/resources-src/datafiles/presets/fliskits.orc +++ b/swing/resources-src/datafiles/legacy_components/fliskits.orc @@ -1,6 +1,7 @@ 0.1 + Balsa diff --git a/swing/resources-src/datafiles/presets/giantleaprocketry.orc b/swing/resources-src/datafiles/legacy_components/giantleaprocketry.orc similarity index 99% rename from swing/resources-src/datafiles/presets/giantleaprocketry.orc rename to swing/resources-src/datafiles/legacy_components/giantleaprocketry.orc index 3fe782dd2..cf363ba7f 100644 --- a/swing/resources-src/datafiles/presets/giantleaprocketry.orc +++ b/swing/resources-src/datafiles/legacy_components/giantleaprocketry.orc @@ -1,6 +1,7 @@ 0.1 + Birch diff --git a/swing/resources-src/datafiles/presets/publicmissiles.orc b/swing/resources-src/datafiles/legacy_components/publicmissiles.orc similarity index 99% rename from swing/resources-src/datafiles/presets/publicmissiles.orc rename to swing/resources-src/datafiles/legacy_components/publicmissiles.orc index 2a9a79e8b..0acf3a329 100644 --- a/swing/resources-src/datafiles/presets/publicmissiles.orc +++ b/swing/resources-src/datafiles/legacy_components/publicmissiles.orc @@ -1,6 +1,7 @@ 0.1 + 1/16 In. braided nylon diff --git a/swing/resources-src/datafiles/presets/semroc.orc b/swing/resources-src/datafiles/legacy_components/semroc.orc similarity index 98% rename from swing/resources-src/datafiles/presets/semroc.orc rename to swing/resources-src/datafiles/legacy_components/semroc.orc index 378754d6d..cdeee9b6e 100644 --- a/swing/resources-src/datafiles/presets/semroc.orc +++ b/swing/resources-src/datafiles/legacy_components/semroc.orc @@ -1,6 +1,7 @@ 0.1 + 1/16 In. braided nylon @@ -107,7 +108,7 @@ SEMROC Astronautics BC-08542 [R] - Balsa Nose Cone – Reversed + Balsa Nose Cone - Reversed Balsa 0.004252428464999999 true @@ -136,7 +137,7 @@ SEMROC Astronautics BC-1016 [R] - Balsa Nose Cone – Reversed + Balsa Nose Cone - Reversed Balsa 0.0034019427719999998 true @@ -165,7 +166,7 @@ SEMROC Astronautics BC-1019 [R] - Balsa Nose Cone – Reversed + Balsa Nose Cone - Reversed Balsa 0.003685438003 true @@ -194,7 +195,7 @@ SEMROC Astronautics BC-1020E [R] - Balsa Nose Cone – Reversed + Balsa Nose Cone - Reversed Balsa 0.003685438003 true @@ -223,7 +224,7 @@ SEMROC Astronautics BC-1022 [R] - Balsa Nose Cone – Reversed + Balsa Nose Cone - Reversed Balsa 0.004252428464999999 true @@ -252,7 +253,7 @@ SEMROC Astronautics BC-1024 [R] - Balsa Nose Cone – Reversed + Balsa Nose Cone - Reversed Balsa 0.004252428464999999 true @@ -281,7 +282,7 @@ SEMROC Astronautics BC-1031 [R] - Balsa Nose Cone – Reversed + Balsa Nose Cone - Reversed Balsa 0.004252428464999999 true @@ -310,7 +311,7 @@ SEMROC Astronautics BC-1032 [R] - Balsa Nose Cone – Reversed + Balsa Nose Cone - Reversed Balsa 0.004252428464999999 true @@ -339,7 +340,7 @@ SEMROC Astronautics BC-1037 [R] - Balsa Nose Cone – Reversed + Balsa Nose Cone - Reversed Balsa 0.004535923696 true @@ -368,7 +369,7 @@ SEMROC Astronautics BC-1039 [R] - Balsa Nose Cone – Reversed + Balsa Nose Cone - Reversed Balsa 0.004819418927 true @@ -397,7 +398,7 @@ SEMROC Astronautics BC-1041 [R] - Balsa Nose Cone – Reversed + Balsa Nose Cone - Reversed Balsa 0.005102914157999999 true @@ -426,7 +427,7 @@ SEMROC Astronautics BC-1041G [R] - Balsa Nose Cone – Reversed + Balsa Nose Cone - Reversed Balsa 0.005102914157999999 true @@ -455,7 +456,7 @@ SEMROC Astronautics BC-1041P [R] - Balsa Nose Cone – Reversed + Balsa Nose Cone - Reversed Balsa 0.005102914157999999 true @@ -484,7 +485,7 @@ SEMROC Astronautics BC-1045 [R] - Balsa Nose Cone – Reversed + Balsa Nose Cone - Reversed Balsa 0.005386409389 true @@ -513,7 +514,7 @@ SEMROC Astronautics BC-1045P [R] - Balsa Nose Cone – Reversed + Balsa Nose Cone - Reversed Balsa 0.005386409389 true @@ -542,7 +543,7 @@ SEMROC Astronautics BC-1048 [R] - Balsa Nose Cone – Reversed + Balsa Nose Cone - Reversed Balsa 0.005386409389 true @@ -571,7 +572,7 @@ SEMROC Astronautics BC-1050 [R] - Balsa Nose Cone – Reversed + Balsa Nose Cone - Reversed Balsa 0.030900980179 true @@ -600,7 +601,7 @@ SEMROC Astronautics BC-1051 [R] - Balsa Nose Cone – Reversed + Balsa Nose Cone - Reversed Balsa 0.00566990462 true @@ -629,7 +630,7 @@ SEMROC Astronautics BC-1052 [R] - Balsa Nose Cone – Reversed + Balsa Nose Cone - Reversed Balsa 0.006236895082 true @@ -3989,7 +3990,7 @@ SEMROC Astronautics BR-085225 [R] - Balsa Reducer 085 to 225 – Reversed + Balsa Reducer 085 to 225 - Reversed Balsa 0.022112628018 true @@ -4021,7 +4022,7 @@ SEMROC Astronautics BR-1013 [R] - Balsa Reducer 10 to 13 – Reversed + Balsa Reducer 10 to 13 - Reversed Balsa 0.005102914157999999 true @@ -4053,7 +4054,7 @@ SEMROC Astronautics BR-1016 [R] - Balsa Reducer 10 to 16 – Reversed + Balsa Reducer 10 to 16 - Reversed Balsa 0.009071847392 true @@ -4085,7 +4086,7 @@ SEMROC Astronautics BR-1016S [R] - Balsa Reducer 10 to 16 – Reversed + Balsa Reducer 10 to 16 - Reversed Balsa 0.008221361698999998 true @@ -4117,7 +4118,7 @@ SEMROC Astronautics BR-1116 [R] - Balsa Reducer 11 to 16 – Reversed + Balsa Reducer 11 to 16 - Reversed Balsa 0.009355342623 true @@ -4149,7 +4150,7 @@ SEMROC Astronautics BR-1118 [R] - Balsa Reducer 11 to 18 – Reversed + Balsa Reducer 11 to 18 - Reversed Balsa 0.010205828315999999 true @@ -4181,7 +4182,7 @@ SEMROC Astronautics BR-11516 [R] - Balsa Reducer 115 to 16 – Reversed + Balsa Reducer 115 to 16 - Reversed Balsa 0.029766999255 true @@ -4213,7 +4214,7 @@ SEMROC Astronautics BR-11518 [R] - Balsa Reducer 115 to 18 – Reversed + Balsa Reducer 115 to 18 - Reversed Balsa 0.031184475410000002 true @@ -4245,7 +4246,7 @@ SEMROC Astronautics BR-125-175 [R] - Balsa Reducer 125 to 175 – Reversed + Balsa Reducer 125 to 175 - Reversed Balsa 0.01417476155 true @@ -4277,7 +4278,7 @@ SEMROC Astronautics BR-125-175L [R] - Balsa Reducer 125 to 175 – Reversed + Balsa Reducer 125 to 175 - Reversed Balsa 0.018427190015 true @@ -4309,7 +4310,7 @@ SEMROC Astronautics BR-125-225 [R] - Balsa Reducer 125 to 225 – Reversed + Balsa Reducer 125 to 225 - Reversed Balsa 0.017009713859999998 true @@ -4341,7 +4342,7 @@ SEMROC Astronautics BR-1316 [R] - Balsa Reducer 13 to 16 – Reversed + Balsa Reducer 13 to 16 - Reversed Balsa 0.0068038855439999995 true @@ -4373,7 +4374,7 @@ SEMROC Astronautics BR-1316F [R] - Balsa Reducer 13 to 16 – Reversed + Balsa Reducer 13 to 16 - Reversed Balsa 0.010205828315999999 true @@ -4405,7 +4406,7 @@ SEMROC Astronautics BR-1316L [R] - Balsa Reducer 13 to 16 – Reversed + Balsa Reducer 13 to 16 - Reversed Balsa 0.008504856929999999 true @@ -4437,7 +4438,7 @@ SEMROC Astronautics BR-1316M [R] - Balsa Reducer 13 to 16 – Reversed + Balsa Reducer 13 to 16 - Reversed Balsa 0.007937866468 true @@ -4469,7 +4470,7 @@ SEMROC Astronautics BR-1320 [R] - Balsa Reducer 13 to 20 – Reversed + Balsa Reducer 13 to 20 - Reversed Balsa 0.007937866468 true @@ -4501,7 +4502,7 @@ SEMROC Astronautics BR-1320L [R] - Balsa Reducer 13 to 20 – Reversed + Balsa Reducer 13 to 20 - Reversed Balsa 0.015875732936 true @@ -4533,7 +4534,7 @@ SEMROC Astronautics BR-150-225 [R] - Balsa Reducer 150 to 225 – Reversed + Balsa Reducer 150 to 225 - Reversed Balsa 0.029766999255 true @@ -4565,7 +4566,7 @@ SEMROC Astronautics BR-150-275 [R] - Balsa Reducer 150 to 275 – Reversed + Balsa Reducer 150 to 275 - Reversed Balsa 0.041106808495 true @@ -4597,7 +4598,7 @@ SEMROC Astronautics BR-1618 [R] - Balsa Reducer 16 to 18 – Reversed + Balsa Reducer 16 to 18 - Reversed Balsa 0.007937866468 true @@ -4629,7 +4630,7 @@ SEMROC Astronautics BR-1618F [R] - Balsa Reducer 16 to 18 – Reversed + Balsa Reducer 16 to 18 - Reversed Balsa 0.008504856929999999 true @@ -4661,7 +4662,7 @@ SEMROC Astronautics BR-1620 [R] - Balsa Reducer 16 to 20 – Reversed + Balsa Reducer 16 to 20 - Reversed Balsa 0.008504856929999999 true @@ -4693,7 +4694,7 @@ SEMROC Astronautics BR-1620F [R] - Balsa Reducer 16 to 20 – Reversed + Balsa Reducer 16 to 20 - Reversed Balsa 0.0076543712370000004 true @@ -4725,7 +4726,7 @@ SEMROC Astronautics BR-16225F [R] - Balsa Reducer 16 to 225 – Reversed + Balsa Reducer 16 to 225 - Reversed Balsa 0.009355342623 true @@ -4757,7 +4758,7 @@ SEMROC Astronautics BR-175-225 [R] - Balsa Reducer 175 to 225 – Reversed + Balsa Reducer 175 to 225 - Reversed Balsa 0.02267961848 true @@ -4789,7 +4790,7 @@ SEMROC Astronautics BR-1820 [R] - Balsa Reducer 18 to 20 – Reversed + Balsa Reducer 18 to 20 - Reversed Balsa 0.007087380775 true @@ -4821,7 +4822,7 @@ SEMROC Astronautics BR-18225 [R] - Balsa Reducer 18 to 225 – Reversed + Balsa Reducer 18 to 225 - Reversed Balsa 0.008788352160999999 true @@ -4853,7 +4854,7 @@ SEMROC Astronautics BR-225-80H [R] - Balsa Reducer 225 to BT-80H – Reversed + Balsa Reducer 225 to BT-80H - Reversed Balsa 0.03685438003 true @@ -4885,7 +4886,7 @@ SEMROC Astronautics BR-510 [R] - Balsa Reducer 5 to 10 – Reversed + Balsa Reducer 5 to 10 - Reversed Balsa 0.003118447541 true @@ -4917,7 +4918,7 @@ SEMROC Astronautics BR-511 [R] - Balsa Reducer 5 to 11 – Reversed + Balsa Reducer 5 to 11 - Reversed Balsa 0.0034019427719999998 true @@ -4949,7 +4950,7 @@ SEMROC Astronautics BR-513 [R] - Balsa Reducer 5 to 13 – Reversed + Balsa Reducer 5 to 13 - Reversed Balsa 0.004535923696 true @@ -4981,7 +4982,7 @@ SEMROC Astronautics BR-57 [R] - Balsa Reducer 5 to 7 – Reversed + Balsa Reducer 5 to 7 - Reversed Balsa 0.001984466617 true @@ -5013,7 +5014,7 @@ SEMROC Astronautics BR-58 [R] - Balsa Reducer 5 to 8 – Reversed + Balsa Reducer 5 to 8 - Reversed Balsa 0.00283495231 true @@ -5045,7 +5046,7 @@ SEMROC Astronautics BR-58F [R] - Balsa Reducer 5 to 8F – Reversed + Balsa Reducer 5 to 8F - Reversed Balsa 0.00283495231 true @@ -5077,7 +5078,7 @@ SEMROC Astronautics BR-59 [R] - Balsa Reducer 5 to 9 – Reversed + Balsa Reducer 5 to 9 - Reversed Balsa 0.005102914157999999 true @@ -5109,7 +5110,7 @@ SEMROC Astronautics BR-60-18 [R] - Balsa Reducer BT-60 to ST-18 – Reversed + Balsa Reducer BT-60 to ST-18 - Reversed Balsa 0.008221361698999998 true @@ -5141,7 +5142,7 @@ SEMROC Astronautics BR-710 [R] - Balsa Reducer 7 to 10 – Reversed + Balsa Reducer 7 to 10 - Reversed Balsa 0.0034019427719999998 true @@ -5173,7 +5174,7 @@ SEMROC Astronautics BR-711 [R] - Balsa Reducer 7 to 11 – Reversed + Balsa Reducer 7 to 11 - Reversed Balsa 0.003685438003 true @@ -5205,7 +5206,7 @@ SEMROC Astronautics BR-713 [R] - Balsa Reducer 7 to 13 – Reversed + Balsa Reducer 7 to 13 - Reversed Balsa 0.005102914157999999 true @@ -5237,7 +5238,7 @@ SEMROC Astronautics BR-716 [R] - Balsa Reducer 7 to 16 – Reversed + Balsa Reducer 7 to 16 - Reversed Balsa 0.010205828315999999 true @@ -5269,7 +5270,7 @@ SEMROC Astronautics BR-718 [R] - Balsa Reducer 7 to 18 – Reversed + Balsa Reducer 7 to 18 - Reversed Balsa 0.011906799701999999 true @@ -5301,7 +5302,7 @@ SEMROC Astronautics BR-78 [R] - Balsa Reducer 7 to 8 – Reversed + Balsa Reducer 7 to 8 - Reversed Balsa 0.003685438003 true @@ -5333,7 +5334,7 @@ SEMROC Astronautics BR-78F [R] - Balsa Reducer 7 to 8F – Reversed + Balsa Reducer 7 to 8F - Reversed Balsa 0.004819418927 true @@ -5365,7 +5366,7 @@ SEMROC Astronautics BR-78S [R] - Balsa Reducer 7 to 8 – Reversed + Balsa Reducer 7 to 8 - Reversed Balsa 0.00283495231 true @@ -5397,7 +5398,7 @@ SEMROC Astronautics BR-79 [R] - Balsa Reducer 7 to 9 – Reversed + Balsa Reducer 7 to 9 - Reversed Balsa 0.004819418927 true @@ -5429,7 +5430,7 @@ SEMROC Astronautics BR-79L [R] - Balsa Reducer 7 to 9 – Reversed + Balsa Reducer 7 to 9 - Reversed Balsa 0.006520390313 true @@ -5461,7 +5462,7 @@ SEMROC Astronautics BR-810 [R] - Balsa Reducer 8 to 10 – Reversed + Balsa Reducer 8 to 10 - Reversed Balsa 0.003968933234 true @@ -5493,7 +5494,7 @@ SEMROC Astronautics BR-813 [R] - Balsa Reducer 8 to 13 – Reversed + Balsa Reducer 8 to 13 - Reversed Balsa 0.007370876006 true @@ -5525,7 +5526,7 @@ SEMROC Astronautics BR-813P [R] - Balsa Reducer 8 to 13 – Reversed + Balsa Reducer 8 to 13 - Reversed Balsa 0.007370876006 true @@ -5557,7 +5558,7 @@ SEMROC Astronautics BR-816 [R] - Balsa Reducer 8 to 16 – Reversed + Balsa Reducer 8 to 16 - Reversed Balsa 0.008504856929999999 true @@ -5589,7 +5590,7 @@ SEMROC Astronautics BR-816NT [R] - Balsa Reducer 8 to 16 – Reversed + Balsa Reducer 8 to 16 - Reversed Balsa 0.010772818778 true @@ -5621,7 +5622,7 @@ SEMROC Astronautics BR-8F11 [R] - Balsa Reducer 8F to 11 – Reversed + Balsa Reducer 8F to 11 - Reversed Balsa 0.005102914157999999 true @@ -5653,7 +5654,7 @@ SEMROC Astronautics BR-8F11L [R] - Balsa Reducer 8F to 11 – Reversed + Balsa Reducer 8F to 11 - Reversed Balsa 0.006236895082 true @@ -5685,7 +5686,7 @@ SEMROC Astronautics BR-916 [R] - Balsa Reducer 9 to 16 – Reversed + Balsa Reducer 9 to 16 - Reversed Balsa 0.008504856929999999 true @@ -5717,7 +5718,7 @@ SEMROC Astronautics BR-918 [R] - Balsa Reducer 9 to 18 – Reversed + Balsa Reducer 9 to 18 - Reversed Balsa 0.009071847392 true @@ -5749,7 +5750,7 @@ SEMROC Astronautics BR-920 [R] - Balsa Reducer 9 to 20 – Reversed + Balsa Reducer 9 to 20 - Reversed Balsa 0.009638837854 true @@ -9836,7 +9837,7 @@ SEMROC Astronautics TA-2050 [R] - Balsa Reducer BT-20 to BT-50 – Reversed + Balsa Reducer BT-20 to BT-50 - Reversed Balsa 0.004819418927 true @@ -9868,7 +9869,7 @@ SEMROC Astronautics TA-2050A [R] - Balsa Reducer BT-20 to BT-50 – Reversed + Balsa Reducer BT-20 to BT-50 - Reversed Balsa 0.003118447541 true @@ -9900,7 +9901,7 @@ SEMROC Astronautics TA-2050B [R] - Balsa Reducer BT-20 to BT-50 – Reversed + Balsa Reducer BT-20 to BT-50 - Reversed Balsa 0.0059533998509999995 true @@ -9932,7 +9933,7 @@ SEMROC Astronautics TA-2055 [R] - Balsa Reducer BT-20 to BT-55 – Reversed + Balsa Reducer BT-20 to BT-55 - Reversed Balsa 0.006236895082 true @@ -9964,7 +9965,7 @@ SEMROC Astronautics TA-2060 [R] - Balsa Reducer BT-20 to BT-60 – Reversed + Balsa Reducer BT-20 to BT-60 - Reversed Balsa 0.00566990462 true @@ -9996,7 +9997,7 @@ SEMROC Astronautics TA-5055 [R] - Balsa Reducer BT-50 to BT-55 – Reversed + Balsa Reducer BT-50 to BT-55 - Reversed Balsa 0.017009713859999998 true @@ -10028,7 +10029,7 @@ SEMROC Astronautics TA-5055L [R] - Balsa Reducer BT-50 to BT-55 – Reversed + Balsa Reducer BT-50 to BT-55 - Reversed Balsa 0.020128161401 true @@ -10060,7 +10061,7 @@ SEMROC Astronautics TA-5060 [R] - Balsa Reducer BT-50 to BT-60 – Reversed + Balsa Reducer BT-50 to BT-60 - Reversed Balsa 0.006520390313 true @@ -10092,7 +10093,7 @@ SEMROC Astronautics TA-5060C [R] - Balsa Reducer BT-50 to BT-60 – Reversed + Balsa Reducer BT-50 to BT-60 - Reversed Balsa 0.003968933234 true @@ -10124,7 +10125,7 @@ SEMROC Astronautics TA-5060E [R] - Balsa Reducer BT-50 to BT-60 – Reversed + Balsa Reducer BT-50 to BT-60 - Reversed Balsa 0.0059533998509999995 true @@ -10156,7 +10157,7 @@ SEMROC Astronautics TA-5065 [R] - Balsa Reducer BT-50 to BT-65 – Reversed + Balsa Reducer BT-50 to BT-65 - Reversed Balsa 0.007370876006 true @@ -10188,7 +10189,7 @@ SEMROC Astronautics TA-520 [R] - Balsa Reducer BT-5 to BT-20 – Reversed + Balsa Reducer BT-5 to BT-20 - Reversed Balsa 0.001133980924 true @@ -10220,7 +10221,7 @@ SEMROC Astronautics TA-5260A [R] - Balsa Reducer BT-52 to BT-60 – Reversed + Balsa Reducer BT-52 to BT-60 - Reversed Balsa 0.006520390313 true @@ -10252,7 +10253,7 @@ SEMROC Astronautics TA-5260C [R] - Balsa Reducer BT-52 to BT-60 – Reversed + Balsa Reducer BT-52 to BT-60 - Reversed Balsa 0.009355342623 true @@ -10284,7 +10285,7 @@ SEMROC Astronautics TA-550 [R] - Balsa Reducer BT-5 to BT-50 – Reversed + Balsa Reducer BT-5 to BT-50 - Reversed Balsa 0.0017009713859999999 true @@ -10316,7 +10317,7 @@ SEMROC Astronautics TA-5560 [R] - Balsa Reducer BT-55 to BT-60 – Reversed + Balsa Reducer BT-55 to BT-60 - Reversed Balsa 0.007087380775 true @@ -10348,7 +10349,7 @@ SEMROC Astronautics TA-5560A [R] - Balsa Reducer BT-55 to BT-60 – Reversed + Balsa Reducer BT-55 to BT-60 - Reversed Balsa 0.008221361698999998 true @@ -10380,7 +10381,7 @@ SEMROC Astronautics TA-5565 [R] - Balsa Reducer BT-55 to BT-65 – Reversed + Balsa Reducer BT-55 to BT-65 - Reversed Balsa 0.010772818778 true @@ -10412,7 +10413,7 @@ SEMROC Astronautics TA-6065 [R] - Balsa Reducer BT-60 to BT-65 – Reversed + Balsa Reducer BT-60 to BT-65 - Reversed Balsa 0.006520390313 true @@ -10444,7 +10445,7 @@ SEMROC Astronautics TA-6070 [R] - Balsa Reducer BT-60 to BT-70 – Reversed + Balsa Reducer BT-60 to BT-70 - Reversed Balsa 0.018427190015 true @@ -10476,7 +10477,7 @@ SEMROC Astronautics TA-6080 [R] - Balsa Reducer BT-60 to BT-80 – Reversed + Balsa Reducer BT-60 to BT-80 - Reversed Balsa 0.018427190015 true @@ -10508,7 +10509,7 @@ SEMROC Astronautics TA-7080 [R] - Balsa Reducer BT-70 to BT-80 – Reversed + Balsa Reducer BT-70 to BT-80 - Reversed Balsa 0.018427190015 true diff --git a/swing/resources-src/datafiles/rocksim_components/bluetube/BTDATA.CSV b/swing/resources-src/datafiles/rocksim_src/bluetube/BTDATA.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/bluetube/BTDATA.CSV rename to swing/resources-src/datafiles/rocksim_src/bluetube/BTDATA.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/bluetube/MATERIAL.CSV b/swing/resources-src/datafiles/rocksim_src/bluetube/MATERIAL.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/bluetube/MATERIAL.CSV rename to swing/resources-src/datafiles/rocksim_src/bluetube/MATERIAL.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/bluetube/TCDATA.CSV b/swing/resources-src/datafiles/rocksim_src/bluetube/TCDATA.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/bluetube/TCDATA.CSV rename to swing/resources-src/datafiles/rocksim_src/bluetube/TCDATA.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/bluetube/readme.txt b/swing/resources-src/datafiles/rocksim_src/bluetube/readme.txt similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/bluetube/readme.txt rename to swing/resources-src/datafiles/rocksim_src/bluetube/readme.txt diff --git a/swing/resources-src/datafiles/rocksim_components/bms/BHdata.csv b/swing/resources-src/datafiles/rocksim_src/bms/BHdata.csv similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/bms/BHdata.csv rename to swing/resources-src/datafiles/rocksim_src/bms/BHdata.csv diff --git a/swing/resources-src/datafiles/rocksim_components/bms/BTdata.csv b/swing/resources-src/datafiles/rocksim_src/bms/BTdata.csv similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/bms/BTdata.csv rename to swing/resources-src/datafiles/rocksim_src/bms/BTdata.csv diff --git a/swing/resources-src/datafiles/rocksim_components/bms/CRdata.csv b/swing/resources-src/datafiles/rocksim_src/bms/CRdata.csv similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/bms/CRdata.csv rename to swing/resources-src/datafiles/rocksim_src/bms/CRdata.csv diff --git a/swing/resources-src/datafiles/rocksim_components/bms/LLdata.csv b/swing/resources-src/datafiles/rocksim_src/bms/LLdata.csv similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/bms/LLdata.csv rename to swing/resources-src/datafiles/rocksim_src/bms/LLdata.csv diff --git a/swing/resources-src/datafiles/rocksim_components/bms/MATERIAL.CSV b/swing/resources-src/datafiles/rocksim_src/bms/MATERIAL.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/bms/MATERIAL.CSV rename to swing/resources-src/datafiles/rocksim_src/bms/MATERIAL.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/bms/NCdata.csv b/swing/resources-src/datafiles/rocksim_src/bms/NCdata.csv similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/bms/NCdata.csv rename to swing/resources-src/datafiles/rocksim_src/bms/NCdata.csv diff --git a/swing/resources-src/datafiles/rocksim_components/bms/TCdata.csv b/swing/resources-src/datafiles/rocksim_src/bms/TCdata.csv similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/bms/TCdata.csv rename to swing/resources-src/datafiles/rocksim_src/bms/TCdata.csv diff --git a/swing/resources-src/datafiles/rocksim_components/bms/TRdata.csv b/swing/resources-src/datafiles/rocksim_src/bms/TRdata.csv similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/bms/TRdata.csv rename to swing/resources-src/datafiles/rocksim_src/bms/TRdata.csv diff --git a/swing/resources-src/datafiles/rocksim_components/bms/ebdata.csv b/swing/resources-src/datafiles/rocksim_src/bms/ebdata.csv similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/bms/ebdata.csv rename to swing/resources-src/datafiles/rocksim_src/bms/ebdata.csv diff --git a/swing/resources-src/datafiles/rocksim_components/estes/BTDATA.CSV b/swing/resources-src/datafiles/rocksim_src/estes/BTDATA.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/estes/BTDATA.CSV rename to swing/resources-src/datafiles/rocksim_src/estes/BTDATA.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/estes/EBDATA.CSV b/swing/resources-src/datafiles/rocksim_src/estes/EBDATA.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/estes/EBDATA.CSV rename to swing/resources-src/datafiles/rocksim_src/estes/EBDATA.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/estes/LLDATA.CSV b/swing/resources-src/datafiles/rocksim_src/estes/LLDATA.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/estes/LLDATA.CSV rename to swing/resources-src/datafiles/rocksim_src/estes/LLDATA.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/estes/MATERIAL.CSV b/swing/resources-src/datafiles/rocksim_src/estes/MATERIAL.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/estes/MATERIAL.CSV rename to swing/resources-src/datafiles/rocksim_src/estes/MATERIAL.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/estes/MODATA.CSV b/swing/resources-src/datafiles/rocksim_src/estes/MODATA.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/estes/MODATA.CSV rename to swing/resources-src/datafiles/rocksim_src/estes/MODATA.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/estes/NCDATA.CSV b/swing/resources-src/datafiles/rocksim_src/estes/NCDATA.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/estes/NCDATA.CSV rename to swing/resources-src/datafiles/rocksim_src/estes/NCDATA.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/estes/PCDATA.CSV b/swing/resources-src/datafiles/rocksim_src/estes/PCDATA.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/estes/PCDATA.CSV rename to swing/resources-src/datafiles/rocksim_src/estes/PCDATA.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/estes/TCDATA.CSV b/swing/resources-src/datafiles/rocksim_src/estes/TCDATA.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/estes/TCDATA.CSV rename to swing/resources-src/datafiles/rocksim_src/estes/TCDATA.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/estes/TRDATA.CSV b/swing/resources-src/datafiles/rocksim_src/estes/TRDATA.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/estes/TRDATA.CSV rename to swing/resources-src/datafiles/rocksim_src/estes/TRDATA.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/giantleaprocketry/BHDATA.CSV b/swing/resources-src/datafiles/rocksim_src/giantleaprocketry/BHDATA.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/giantleaprocketry/BHDATA.CSV rename to swing/resources-src/datafiles/rocksim_src/giantleaprocketry/BHDATA.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/giantleaprocketry/BTDATA.CSV b/swing/resources-src/datafiles/rocksim_src/giantleaprocketry/BTDATA.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/giantleaprocketry/BTDATA.CSV rename to swing/resources-src/datafiles/rocksim_src/giantleaprocketry/BTDATA.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/giantleaprocketry/CRDATA.CSV b/swing/resources-src/datafiles/rocksim_src/giantleaprocketry/CRDATA.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/giantleaprocketry/CRDATA.CSV rename to swing/resources-src/datafiles/rocksim_src/giantleaprocketry/CRDATA.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/giantleaprocketry/LLDATA.CSV b/swing/resources-src/datafiles/rocksim_src/giantleaprocketry/LLDATA.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/giantleaprocketry/LLDATA.CSV rename to swing/resources-src/datafiles/rocksim_src/giantleaprocketry/LLDATA.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/giantleaprocketry/MATERIAL.CSV b/swing/resources-src/datafiles/rocksim_src/giantleaprocketry/MATERIAL.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/giantleaprocketry/MATERIAL.CSV rename to swing/resources-src/datafiles/rocksim_src/giantleaprocketry/MATERIAL.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/giantleaprocketry/MODATA.CSV b/swing/resources-src/datafiles/rocksim_src/giantleaprocketry/MODATA.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/giantleaprocketry/MODATA.CSV rename to swing/resources-src/datafiles/rocksim_src/giantleaprocketry/MODATA.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/giantleaprocketry/NCDATA.CSV b/swing/resources-src/datafiles/rocksim_src/giantleaprocketry/NCDATA.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/giantleaprocketry/NCDATA.CSV rename to swing/resources-src/datafiles/rocksim_src/giantleaprocketry/NCDATA.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/giantleaprocketry/PCDATA.CSV b/swing/resources-src/datafiles/rocksim_src/giantleaprocketry/PCDATA.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/giantleaprocketry/PCDATA.CSV rename to swing/resources-src/datafiles/rocksim_src/giantleaprocketry/PCDATA.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/giantleaprocketry/TCDATA.CSV b/swing/resources-src/datafiles/rocksim_src/giantleaprocketry/TCDATA.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/giantleaprocketry/TCDATA.CSV rename to swing/resources-src/datafiles/rocksim_src/giantleaprocketry/TCDATA.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/publicmissiles/BHDATA.CSV b/swing/resources-src/datafiles/rocksim_src/publicmissiles/BHDATA.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/publicmissiles/BHDATA.CSV rename to swing/resources-src/datafiles/rocksim_src/publicmissiles/BHDATA.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/publicmissiles/BTDATA.CSV b/swing/resources-src/datafiles/rocksim_src/publicmissiles/BTDATA.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/publicmissiles/BTDATA.CSV rename to swing/resources-src/datafiles/rocksim_src/publicmissiles/BTDATA.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/publicmissiles/CFDATA.CSV b/swing/resources-src/datafiles/rocksim_src/publicmissiles/CFDATA.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/publicmissiles/CFDATA.CSV rename to swing/resources-src/datafiles/rocksim_src/publicmissiles/CFDATA.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/publicmissiles/CRDATA.CSV b/swing/resources-src/datafiles/rocksim_src/publicmissiles/CRDATA.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/publicmissiles/CRDATA.CSV rename to swing/resources-src/datafiles/rocksim_src/publicmissiles/CRDATA.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/publicmissiles/EBDATA.CSV b/swing/resources-src/datafiles/rocksim_src/publicmissiles/EBDATA.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/publicmissiles/EBDATA.CSV rename to swing/resources-src/datafiles/rocksim_src/publicmissiles/EBDATA.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/publicmissiles/FSDATA.CSV b/swing/resources-src/datafiles/rocksim_src/publicmissiles/FSDATA.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/publicmissiles/FSDATA.CSV rename to swing/resources-src/datafiles/rocksim_src/publicmissiles/FSDATA.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/publicmissiles/GRAPHS.CSV b/swing/resources-src/datafiles/rocksim_src/publicmissiles/GRAPHS.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/publicmissiles/GRAPHS.CSV rename to swing/resources-src/datafiles/rocksim_src/publicmissiles/GRAPHS.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/publicmissiles/LLDATA.CSV b/swing/resources-src/datafiles/rocksim_src/publicmissiles/LLDATA.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/publicmissiles/LLDATA.CSV rename to swing/resources-src/datafiles/rocksim_src/publicmissiles/LLDATA.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/publicmissiles/MATERIAL.CSV b/swing/resources-src/datafiles/rocksim_src/publicmissiles/MATERIAL.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/publicmissiles/MATERIAL.CSV rename to swing/resources-src/datafiles/rocksim_src/publicmissiles/MATERIAL.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/publicmissiles/MODATA.CSV b/swing/resources-src/datafiles/rocksim_src/publicmissiles/MODATA.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/publicmissiles/MODATA.CSV rename to swing/resources-src/datafiles/rocksim_src/publicmissiles/MODATA.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/publicmissiles/NCDATA.CSV b/swing/resources-src/datafiles/rocksim_src/publicmissiles/NCDATA.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/publicmissiles/NCDATA.CSV rename to swing/resources-src/datafiles/rocksim_src/publicmissiles/NCDATA.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/publicmissiles/PCDATA.CSV b/swing/resources-src/datafiles/rocksim_src/publicmissiles/PCDATA.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/publicmissiles/PCDATA.CSV rename to swing/resources-src/datafiles/rocksim_src/publicmissiles/PCDATA.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/publicmissiles/SLDATA.CSV b/swing/resources-src/datafiles/rocksim_src/publicmissiles/SLDATA.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/publicmissiles/SLDATA.CSV rename to swing/resources-src/datafiles/rocksim_src/publicmissiles/SLDATA.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/publicmissiles/STDATA.CSV b/swing/resources-src/datafiles/rocksim_src/publicmissiles/STDATA.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/publicmissiles/STDATA.CSV rename to swing/resources-src/datafiles/rocksim_src/publicmissiles/STDATA.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/publicmissiles/TCDATA.CSV b/swing/resources-src/datafiles/rocksim_src/publicmissiles/TCDATA.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/publicmissiles/TCDATA.CSV rename to swing/resources-src/datafiles/rocksim_src/publicmissiles/TCDATA.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/publicmissiles/TRDATA.CSV b/swing/resources-src/datafiles/rocksim_src/publicmissiles/TRDATA.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/publicmissiles/TRDATA.CSV rename to swing/resources-src/datafiles/rocksim_src/publicmissiles/TRDATA.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/quest/BTDATA.CSV b/swing/resources-src/datafiles/rocksim_src/quest/BTDATA.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/quest/BTDATA.CSV rename to swing/resources-src/datafiles/rocksim_src/quest/BTDATA.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/quest/CRDATA.CSV b/swing/resources-src/datafiles/rocksim_src/quest/CRDATA.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/quest/CRDATA.CSV rename to swing/resources-src/datafiles/rocksim_src/quest/CRDATA.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/quest/EBDATA.CSV b/swing/resources-src/datafiles/rocksim_src/quest/EBDATA.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/quest/EBDATA.CSV rename to swing/resources-src/datafiles/rocksim_src/quest/EBDATA.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/quest/MATERIAL.CSV b/swing/resources-src/datafiles/rocksim_src/quest/MATERIAL.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/quest/MATERIAL.CSV rename to swing/resources-src/datafiles/rocksim_src/quest/MATERIAL.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/quest/NCDATA.CSV b/swing/resources-src/datafiles/rocksim_src/quest/NCDATA.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/quest/NCDATA.CSV rename to swing/resources-src/datafiles/rocksim_src/quest/NCDATA.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/quest/PCDATA.CSV b/swing/resources-src/datafiles/rocksim_src/quest/PCDATA.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/quest/PCDATA.CSV rename to swing/resources-src/datafiles/rocksim_src/quest/PCDATA.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/quest/STDATA.CSV b/swing/resources-src/datafiles/rocksim_src/quest/STDATA.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/quest/STDATA.CSV rename to swing/resources-src/datafiles/rocksim_src/quest/STDATA.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/quest/TCDATA.CSV b/swing/resources-src/datafiles/rocksim_src/quest/TCDATA.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/quest/TCDATA.CSV rename to swing/resources-src/datafiles/rocksim_src/quest/TCDATA.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/quest/TRDATA.CSV b/swing/resources-src/datafiles/rocksim_src/quest/TRDATA.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/quest/TRDATA.CSV rename to swing/resources-src/datafiles/rocksim_src/quest/TRDATA.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/semroc/BHDATA.CSV b/swing/resources-src/datafiles/rocksim_src/semroc/BHDATA.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/semroc/BHDATA.CSV rename to swing/resources-src/datafiles/rocksim_src/semroc/BHDATA.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/semroc/BTDATA.CSV b/swing/resources-src/datafiles/rocksim_src/semroc/BTDATA.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/semroc/BTDATA.CSV rename to swing/resources-src/datafiles/rocksim_src/semroc/BTDATA.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/semroc/CRDATA.CSV b/swing/resources-src/datafiles/rocksim_src/semroc/CRDATA.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/semroc/CRDATA.CSV rename to swing/resources-src/datafiles/rocksim_src/semroc/CRDATA.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/semroc/EBDATA.CSV b/swing/resources-src/datafiles/rocksim_src/semroc/EBDATA.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/semroc/EBDATA.CSV rename to swing/resources-src/datafiles/rocksim_src/semroc/EBDATA.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/semroc/LLDATA.CSV b/swing/resources-src/datafiles/rocksim_src/semroc/LLDATA.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/semroc/LLDATA.CSV rename to swing/resources-src/datafiles/rocksim_src/semroc/LLDATA.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/semroc/MATERIAL.CSV b/swing/resources-src/datafiles/rocksim_src/semroc/MATERIAL.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/semroc/MATERIAL.CSV rename to swing/resources-src/datafiles/rocksim_src/semroc/MATERIAL.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/semroc/NCDATA.CSV b/swing/resources-src/datafiles/rocksim_src/semroc/NCDATA.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/semroc/NCDATA.CSV rename to swing/resources-src/datafiles/rocksim_src/semroc/NCDATA.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/semroc/PCDATA.CSV b/swing/resources-src/datafiles/rocksim_src/semroc/PCDATA.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/semroc/PCDATA.CSV rename to swing/resources-src/datafiles/rocksim_src/semroc/PCDATA.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/semroc/STDATA.CSV b/swing/resources-src/datafiles/rocksim_src/semroc/STDATA.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/semroc/STDATA.CSV rename to swing/resources-src/datafiles/rocksim_src/semroc/STDATA.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/semroc/TCDATA.CSV b/swing/resources-src/datafiles/rocksim_src/semroc/TCDATA.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/semroc/TCDATA.CSV rename to swing/resources-src/datafiles/rocksim_src/semroc/TCDATA.CSV diff --git a/swing/resources-src/datafiles/rocksim_components/semroc/TRDATA.CSV b/swing/resources-src/datafiles/rocksim_src/semroc/TRDATA.CSV similarity index 100% rename from swing/resources-src/datafiles/rocksim_components/semroc/TRDATA.CSV rename to swing/resources-src/datafiles/rocksim_src/semroc/TRDATA.CSV diff --git a/swing/resources/datafiles/presets/system.ser b/swing/resources/datafiles/presets/system.ser deleted file mode 100644 index 28a7bbe93..000000000 Binary files a/swing/resources/datafiles/presets/system.ser and /dev/null differ diff --git a/swing/src/net/sf/openrocket/database/ComponentPresetDatabaseLoader.java b/swing/src/net/sf/openrocket/database/ComponentPresetDatabaseLoader.java index 4ab2f4b15..f91706838 100644 --- a/swing/src/net/sf/openrocket/database/ComponentPresetDatabaseLoader.java +++ b/swing/src/net/sf/openrocket/database/ComponentPresetDatabaseLoader.java @@ -91,23 +91,17 @@ public class ComponentPresetDatabaseLoader extends AsynchronousDatabaseLoader { */ private void loadPresetComponents() { log.info("Loading component presets from " + SYSTEM_PRESET_DIR); - FileIterator iterator = DirectoryIterator.findDirectory(SYSTEM_PRESET_DIR, new SimpleFileFilter("", false, "ser")); + FileIterator iterator = DirectoryIterator.findDirectory(SYSTEM_PRESET_DIR, new SimpleFileFilter("", false, "orc")); if(iterator == null) return; - + while (iterator.hasNext()) { Pair f = iterator.next(); - try { - ObjectInputStream ois = new ObjectInputStream(f.getV()); - @SuppressWarnings("unchecked") - List list = (List) ois.readObject(); - componentPresetDao.addAll(list); - fileCount++; - presetCount += list.size(); - } catch (Exception ex) { - throw new BugException(ex); - } + Collection presets = loadFile(f.getU(), f.getV()); + componentPresetDao.addAll(presets); + fileCount++; + presetCount += presets.size(); } } diff --git a/swing/src/net/sf/openrocket/gui/configdialog/TransitionConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/TransitionConfig.java index 8bd0b2181..d41945b5c 100644 --- a/swing/src/net/sf/openrocket/gui/configdialog/TransitionConfig.java +++ b/swing/src/net/sf/openrocket/gui/configdialog/TransitionConfig.java @@ -48,7 +48,7 @@ public class TransitionConfig extends RocketComponentConfig { public TransitionConfig(OpenRocketDocument d, RocketComponent c) { super(d, c); - final JPanel panel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::]", "")); + final JPanel panel = new JPanel(new MigLayout("gap rel unrel, fillx", "[][65lp::][30lp::]", "")); //// Shape selection //// Transition shape: @@ -69,7 +69,7 @@ public class TransitionConfig extends RocketComponentConfig { updateEnabled(); } }); - panel.add(typeBox, "span, split 2"); + panel.add(typeBox, "span 3, split 2"); {//// Clipped final JCheckBox checkbox = new JCheckBox(new BooleanModel(component, "Clipped")); diff --git a/swing/src/net/sf/openrocket/gui/dialogs/BugReportDialog.java b/swing/src/net/sf/openrocket/gui/dialogs/BugReportDialog.java index 2fd0f26b4..6b1817990 100644 --- a/swing/src/net/sf/openrocket/gui/dialogs/BugReportDialog.java +++ b/swing/src/net/sf/openrocket/gui/dialogs/BugReportDialog.java @@ -14,10 +14,12 @@ import java.util.TreeSet; import javax.swing.JButton; import javax.swing.JDialog; +import javax.swing.JEditorPane; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; +import javax.swing.JTextPane; import com.jogamp.opengl.JoglVersion; @@ -68,11 +70,13 @@ public class BugReportDialog extends JDialog { panel.add(new JLabel(trans.get("bugreport.dlg.otherwise") + " "), "gapleft para, split 2, gapright rel"); panel.add(new URLLabel(REPORT_EMAIL_URL, REPORT_EMAIL), "growx, wrap para"); - - - final JTextArea textArea = new JTextArea(message, 20, 70); - textArea.setEditable(true); - panel.add(new JScrollPane(textArea), "grow, wrap"); + + final JEditorPane editorPane = new JEditorPane("text/html", formatNewlineHTML(message)); + editorPane.putClientProperty(JTextPane.HONOR_DISPLAY_PROPERTIES, true); + editorPane.setPreferredSize(new Dimension(600, 400)); + editorPane.setEditable(true); + editorPane.setCaretPosition(0); // Scroll to the top by default + panel.add(new JScrollPane(editorPane), "grow, wrap"); panel.add(new StyledLabel(trans.get("bugreport.lbl.Theinformation"), -1), "wrap para"); @@ -106,17 +110,18 @@ public class BugReportDialog extends JDialog { StringBuilder sb = new StringBuilder(); - sb.append("---------- Bug report ----------\n"); + sb.append("---------- Bug report ----------\n"); sb.append('\n'); - sb.append("Include detailed steps on how to trigger the bug:\n"); + sb.append("Include detailed steps on how to trigger the bug:\n"); + sb.append("(You can edit text directly in this window)\n"); sb.append('\n'); sb.append("1. \n"); sb.append("2. \n"); sb.append("3. \n"); sb.append('\n'); - sb.append("What does the software do and what in your opinion should it do in the " + - "case described above:\n"); + sb.append("What does the software do and what in your opinion should it do in the " + + "case described above:\n"); sb.append('\n'); sb.append('\n'); sb.append('\n'); @@ -133,7 +138,7 @@ public class BugReportDialog extends JDialog { addSystemInformation(sb); sb.append("---------- Error log ----------\n"); addErrorLog(sb); - sb.append("---------- End of bug report ----------\n"); + sb.append("---------- End of bug report ----------\n"); sb.append('\n'); BugReportDialog reportDialog = new BugReportDialog(parent, @@ -152,14 +157,15 @@ public class BugReportDialog extends JDialog { public static void showExceptionDialog(Window parent, Thread t, Throwable e) { StringBuilder sb = new StringBuilder(); - sb.append("---------- Bug report ----------\n"); - sb.append('\n'); - sb.append("Please include a description about what actions you were " + - "performing when the exception occurred:\n"); - sb.append('\n'); - sb.append('\n'); + sb.append("---------- Bug report ----------\n"); sb.append('\n'); + sb.append("Please include a description about what actions you were " + + "performing when the exception occurred:\n"); + sb.append("(You can edit text directly in this window)\n"); sb.append('\n'); + sb.append("1. \n"); + sb.append("2. \n"); + sb.append("3. \n"); sb.append("Include your email address (optional; it helps if we can " + @@ -191,7 +197,7 @@ public class BugReportDialog extends JDialog { addSystemInformation(sb); sb.append("---------- Error log ----------\n"); addErrorLog(sb); - sb.append("---------- End of bug report ----------\n"); + sb.append("---------- End of bug report ----------\n"); sb.append('\n'); BugReportDialog reportDialog = @@ -235,5 +241,16 @@ public class BugReportDialog extends JDialog { sb.append(l.toString()).append('\n'); } } + + /** + * Replace newline character \n to an HTML newline. Instead of just using a
tag, we replace newlines with a + * paragraph tag with zero margin. This is so that when you copy the HTML text and paste it somewhere, that the + * HTML newlines are also interpreted as newlines in the new text. A
tag would just be replaced by a space. + * @param text text to be formatted + * @return text with HTML newlines + */ + private static String formatNewlineHTML(String text) { + return text.replaceAll("\n(.*?)(?=(\n|$))", "

$1

"); + } } diff --git a/swing/src/net/sf/openrocket/gui/dialogs/preset/ComponentPresetChooserDialog.java b/swing/src/net/sf/openrocket/gui/dialogs/preset/ComponentPresetChooserDialog.java index 8c98bfb57..d43319345 100644 --- a/swing/src/net/sf/openrocket/gui/dialogs/preset/ComponentPresetChooserDialog.java +++ b/swing/src/net/sf/openrocket/gui/dialogs/preset/ComponentPresetChooserDialog.java @@ -49,7 +49,9 @@ public class ComponentPresetChooserDialog extends JDialog { private JTextField filterText; private JCheckBox foreDiameterFilterCheckBox; private JCheckBox aftDiameterFilterCheckBox; - + private JCheckBox showLegacyCheckBox; + + private ComponentPresetRowFilter legacyFilter; private ComponentPresetRowFilter foreDiameterFilter; private ComponentPresetRowFilter aftDiameterFilter; @@ -58,6 +60,7 @@ public class ComponentPresetChooserDialog extends JDialog { * outerDiamtereColumnIndex is the index of the column associated with the OUTER_DIAMETER * field. This index is needed by the matchOuterDiameterCheckBox to implement filtering. */ + int legacyColumnIndex = -1; int aftDiameterColumnIndex = -1; int foreDiameterColumnIndex = -1; @@ -87,6 +90,9 @@ public class ComponentPresetChooserDialog extends JDialog { if (!displayedColumnKeys.contains(key)) { continue; } + if (key == ComponentPreset.LEGACY) { + legacyColumnIndex = i; + } if (key == ComponentPreset.OUTER_DIAMETER || key == ComponentPreset.AFT_OUTER_DIAMETER) { aftDiameterColumnIndex = i; } @@ -126,17 +132,20 @@ public class ComponentPresetChooserDialog extends JDialog { }); panel.add(sub, "growx, ay 0, gapright para"); - - - panel.add(getFilterCheckboxes(), "wrap para"); - + + // need to create componentSelectionTable before filter checkboxes, + // but add to panel after componentSelectionTable = new ComponentPresetTable(presetType, presets, displayedColumnKeys); // GUIUtil.setAutomaticColumnTableWidths(componentSelectionTable, 20); int w = componentSelectionTable.getRowHeight() + 4; - TableColumn tc = componentSelectionTable.getColumnModel().getColumn(0); + XTableColumnModel tm = componentSelectionTable.getXColumnModel(); + //TableColumn tc = componentSelectionTable.getColumnModel().getColumn(0); + TableColumn tc = tm.getColumn(0); tc.setPreferredWidth(w); tc.setMaxWidth(w); tc.setMinWidth(w); + + panel.add(getFilterCheckboxes(tm, legacyColumnIndex), "wrap para"); JScrollPane scrollpane = new JScrollPane(); scrollpane.setViewportView(componentSelectionTable); @@ -169,10 +178,12 @@ public class ComponentPresetChooserDialog extends JDialog { GUIUtil.rememberWindowSize(this); GUIUtil.setDisposableDialogOptions(this, okButton); + + updateFilters(); } - private JPanel getFilterCheckboxes() { + private JPanel getFilterCheckboxes(XTableColumnModel tm, int legacyColumnIndex) { JPanel panel = new JPanel(new MigLayout("ins 0")); /* @@ -194,9 +205,27 @@ public class ComponentPresetChooserDialog extends JDialog { } componentSelectionTable.updateData(presets); } - }); + }); } + /* + * Add legacy component filter checkbox + */ + TableColumn legacyColumn = tm.getColumn(legacyColumnIndex); + tm.setColumnVisible(legacyColumn, false); + legacyFilter = new ComponentPresetRowFilter(false, legacyColumnIndex); + showLegacyCheckBox = new JCheckBox(); + showLegacyCheckBox.setText(trans.get("ComponentPresetChooserDialog.checkbox.showLegacyCheckBox")); + panel.add(showLegacyCheckBox, "wrap"); + + showLegacyCheckBox.addItemListener(new ItemListener() { + @Override + public void itemStateChanged(ItemEvent e) { + updateFilters(); + tm.setColumnVisible(legacyColumn, showLegacyCheckBox.isSelected()); + } + }); + if(component instanceof SymmetricComponent) { final SymmetricComponent curSym = (SymmetricComponent) component; /* @@ -268,12 +297,15 @@ public class ComponentPresetChooserDialog extends JDialog { } catch (java.util.regex.PatternSyntaxException e) { } } - if (aftDiameterFilterCheckBox.isSelected()) { + if ((null != aftDiameterFilterCheckBox) && aftDiameterFilterCheckBox.isSelected()) { filters.add(aftDiameterFilter); } - if (foreDiameterFilterCheckBox.isSelected()) { + if ((null != foreDiameterFilterCheckBox) && foreDiameterFilterCheckBox.isSelected()) { filters.add(foreDiameterFilter); } + if (!showLegacyCheckBox.isSelected()) { + filters.add(legacyFilter); + } componentSelectionTable.setRowFilter(RowFilter.andFilter(filters)); } diff --git a/swing/src/net/sf/openrocket/gui/dialogs/preset/ComponentPresetRowFilter.java b/swing/src/net/sf/openrocket/gui/dialogs/preset/ComponentPresetRowFilter.java index 7c66aa136..7be37dc5e 100644 --- a/swing/src/net/sf/openrocket/gui/dialogs/preset/ComponentPresetRowFilter.java +++ b/swing/src/net/sf/openrocket/gui/dialogs/preset/ComponentPresetRowFilter.java @@ -7,31 +7,45 @@ import net.sf.openrocket.unit.Value; import net.sf.openrocket.util.MathUtil; public class ComponentPresetRowFilter extends RowFilter { - - private final double value; + + private Boolean bvalue = false; + private double dvalue = 0.0; + private double epsilon = 0.0; private final int column; - private final double epsilon; ComponentPresetRowFilter(double value, int column) { - this.value = value; + this.dvalue = value; this.column = column; /* * Accept 5% difference, but at least 1mm. */ this.epsilon = MathUtil.max(value * 0.05, 0.001); } + + ComponentPresetRowFilter(Boolean value, int column) { + this.bvalue = value; + this.column = column; + } + @Override public boolean include(RowFilter.Entry entry) { Object o = entry.getValue(column); if (o instanceof Value) { Value v = (Value) o; - return Math.abs(value - v.getValue()) < epsilon; + return Math.abs(dvalue - v.getValue()) < epsilon; } + if (o instanceof Double) { Double d = (Double) o; - return Math.abs(value - d) < epsilon; + return Math.abs(dvalue - d) < epsilon; } + + if (o instanceof Boolean) { + Boolean b = (Boolean) o; + return b.equals(bvalue); + } + return true; } diff --git a/swing/src/net/sf/openrocket/gui/dialogs/preset/ComponentPresetTable.java b/swing/src/net/sf/openrocket/gui/dialogs/preset/ComponentPresetTable.java index 5a3be9ed5..e7ee2db32 100644 --- a/swing/src/net/sf/openrocket/gui/dialogs/preset/ComponentPresetTable.java +++ b/swing/src/net/sf/openrocket/gui/dialogs/preset/ComponentPresetTable.java @@ -126,12 +126,27 @@ public class ComponentPresetTable extends JTable { } }); + } else if ( key.getType() == Boolean.class ) { + sorter.setComparator(index, new Comparator() { + + @Override + public int compare(Boolean b1, Boolean b2) { + if (b1 && !b2) { + return 1; + } else if (!b1 && b2) { + return -1; + } else { + return 0; + } + } + }); } + if ( visibleColumnKeys.indexOf(key) < 0 ) { hiddenColumns.add(columns[index]); } index ++; - } + } } this.setAutoCreateColumnsFromModel(false); @@ -165,6 +180,10 @@ public class ComponentPresetTable extends JTable { }); } + public XTableColumnModel getXColumnModel() { + return tableColumnModel; + } + public void setRowFilter( RowFilter filter ) { sorter.setRowFilter( filter ); } diff --git a/swing/src/net/sf/openrocket/gui/main/flightconfigpanel/FlightConfigurablePanel.java b/swing/src/net/sf/openrocket/gui/main/flightconfigpanel/FlightConfigurablePanel.java index 54071c1f1..a0a0f4fc4 100644 --- a/swing/src/net/sf/openrocket/gui/main/flightconfigpanel/FlightConfigurablePanel.java +++ b/swing/src/net/sf/openrocket/gui/main/flightconfigpanel/FlightConfigurablePanel.java @@ -84,7 +84,7 @@ public abstract class FlightConfigurablePanel 1) ? 1 : 0; + int col = (table.getColumnCount() > 1) ? table.getColumnCount() - 1 : 0; for (int row = 0; row < table.getRowCount(); row++) { FlightConfigurationId rowFCID = rocket.getId(row); if (rowFCID.equals(current)) { @@ -107,7 +107,7 @@ public abstract class FlightConfigurablePanel 1) ? 1 : 0; + col = (table.getColumnCount() > 1) ? table.getColumnCount() - 1 : 0; } for( int rowNum = 0; rowNum < table.getRowCount(); rowNum++ ) { diff --git a/swing/src/net/sf/openrocket/gui/main/flightconfigpanel/FlightConfigurationPanel.java b/swing/src/net/sf/openrocket/gui/main/flightconfigpanel/FlightConfigurationPanel.java index 6956ab0b4..5ef22b8e2 100644 --- a/swing/src/net/sf/openrocket/gui/main/flightconfigpanel/FlightConfigurationPanel.java +++ b/swing/src/net/sf/openrocket/gui/main/flightconfigpanel/FlightConfigurationPanel.java @@ -8,6 +8,8 @@ import javax.swing.JButton; import javax.swing.JPanel; import javax.swing.JTabbedPane; import javax.swing.SwingUtilities; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; import net.miginfocom.swing.MigLayout; import net.sf.openrocket.document.OpenRocketDocument; @@ -74,13 +76,7 @@ public class FlightConfigurationPanel extends JPanel implements StateChangeListe newConfButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - - addOrCopyConfiguration(false); - int lastRow = motorConfigurationPanel.table.getRowCount() - 1; - int lastCol = motorConfigurationPanel.table.getColumnCount() - 1; - motorConfigurationPanel.table.setRowSelectionInterval(lastRow, lastRow); - motorConfigurationPanel.table.setColumnSelectionInterval(lastCol, lastCol); - configurationChanged(ComponentChangeEvent.MOTOR_CHANGE); + newOrCopyConfigAction(false); } }); @@ -111,17 +107,56 @@ public class FlightConfigurationPanel extends JPanel implements StateChangeListe copyConfButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - addOrCopyConfiguration(true); - configurationChanged(ComponentChangeEvent.MOTOR_CHANGE); + newOrCopyConfigAction(true); } }); this.add(copyConfButton, "wrap"); + tabs.addChangeListener(new ChangeListener() { + @Override + public void stateChanged(ChangeEvent e) { + // Trigger a selection of the motor/recovery/configuration item + switch (tabs.getSelectedIndex()) { + case MOTOR_TAB_INDEX: + motorConfigurationPanel.updateButtonState(); + break; + case RECOVERY_TAB_INDEX: + recoveryConfigurationPanel.updateButtonState(); + break; + case SEPARATION_TAB_INDEX: + separationConfigurationPanel.updateButtonState(); + break; + } + } + }); + updateButtonState(); this.add(tabs, "spanx, grow, wrap rel"); } + /** + * Action for when the new configuration or copy configuration button is pressed. + * @param copy if True, then copy configuration operation, if False then create a new configuration + */ + private void newOrCopyConfigAction(boolean copy) { + addOrCopyConfiguration(copy); + configurationChanged(ComponentChangeEvent.MOTOR_CHANGE); + stateChanged(null); + switch (tabs.getSelectedIndex()) { + case MOTOR_TAB_INDEX: + motorConfigurationPanel.selectMotor(); + break; + case RECOVERY_TAB_INDEX: + recoveryConfigurationPanel.selectDeployment(); + break; + case SEPARATION_TAB_INDEX: + separationConfigurationPanel.selectSeparation(); + break; + } + configurationChanged(ComponentChangeEvent.NONFUNCTIONAL_CHANGE); // Trigger select + } + /** * either create or copy configuration * set new configuration as current diff --git a/swing/src/net/sf/openrocket/gui/main/flightconfigpanel/MotorConfigurationPanel.java b/swing/src/net/sf/openrocket/gui/main/flightconfigpanel/MotorConfigurationPanel.java index 57b3db37c..297998fcf 100644 --- a/swing/src/net/sf/openrocket/gui/main/flightconfigpanel/MotorConfigurationPanel.java +++ b/swing/src/net/sf/openrocket/gui/main/flightconfigpanel/MotorConfigurationPanel.java @@ -4,17 +4,21 @@ import java.awt.CardLayout; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.BorderFactory; +import javax.swing.AbstractAction; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.JButton; +import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; +import javax.swing.KeyStroke; import javax.swing.ListSelectionModel; import javax.swing.SwingUtilities; import javax.swing.event.TableModelEvent; @@ -30,15 +34,12 @@ import net.sf.openrocket.gui.widgets.SelectColorButton; import net.sf.openrocket.motor.IgnitionEvent; import net.sf.openrocket.motor.Motor; import net.sf.openrocket.motor.MotorConfiguration; -import net.sf.openrocket.rocketcomponent.AxialStage; import net.sf.openrocket.rocketcomponent.BodyTube; import net.sf.openrocket.rocketcomponent.ComponentChangeEvent; -import net.sf.openrocket.rocketcomponent.FlightConfiguration; import net.sf.openrocket.rocketcomponent.FlightConfigurationId; import net.sf.openrocket.rocketcomponent.InnerTube; import net.sf.openrocket.rocketcomponent.MotorMount; import net.sf.openrocket.rocketcomponent.Rocket; -import net.sf.openrocket.startup.Application; import net.sf.openrocket.unit.UnitGroup; import net.sf.openrocket.util.Chars; @@ -57,7 +58,7 @@ public class MotorConfigurationPanel extends FlightConfigurablePanel protected FlightConfigurableTableModel configurationTableModel; MotorConfigurationPanel(final FlightConfigurationPanel flightConfigurationPanel, Rocket rocket) { - super(flightConfigurationPanel,rocket); + super(flightConfigurationPanel, rocket); motorChooserDialog = new MotorChooserDialog(SwingUtilities.getWindowAncestor(flightConfigurationPanel)); @@ -68,14 +69,14 @@ public class MotorConfigurationPanel extends FlightConfigurablePanel BorderFactory.createEtchedBorder(), "" + trans.get("lbl.motorMounts") + "")); - MotorMountConfigurationPanel mountConfigPanel = new MotorMountConfigurationPanel(this,rocket); + MotorMountConfigurationPanel mountConfigPanel = new MotorMountConfigurationPanel(this, rocket); subpanel.add(mountConfigPanel, "grow"); this.add(subpanel, "split, growy"); } cards = new JPanel(new CardLayout()); - this.add( cards ); - + this.add(cards); + JLabel helpText = new JLabel(trans.get("MotorConfigurationPanel.lbl.nomotors")); cards.add(helpText, HELP_LABEL ); @@ -130,6 +131,16 @@ public class MotorConfigurationPanel extends FlightConfigurablePanel this.add(cards, "gapleft para, grow, wrap"); + // Set 'Enter' key action to open the motor selection dialog + table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put( + KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "Enter"); + table.getActionMap().put("Enter", new AbstractAction() { + @Override + public void actionPerformed(ActionEvent ae) { + selectMotor(); + } + }); + updateButtonState(); } @@ -212,7 +223,7 @@ public class MotorConfigurationPanel extends FlightConfigurablePanel } } - private void selectMotor() { + public void selectMotor() { MotorMount curMount = getSelectedComponent(); FlightConfigurationId fcid= getSelectedConfigurationId(); if ( (null == fcid )||( null == curMount )){ diff --git a/swing/src/net/sf/openrocket/gui/main/flightconfigpanel/RecoveryConfigurationPanel.java b/swing/src/net/sf/openrocket/gui/main/flightconfigpanel/RecoveryConfigurationPanel.java index 9fd246ec2..5cf62c634 100644 --- a/swing/src/net/sf/openrocket/gui/main/flightconfigpanel/RecoveryConfigurationPanel.java +++ b/swing/src/net/sf/openrocket/gui/main/flightconfigpanel/RecoveryConfigurationPanel.java @@ -2,14 +2,18 @@ package net.sf.openrocket.gui.main.flightconfigpanel; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; +import javax.swing.AbstractAction; import javax.swing.JButton; +import javax.swing.JComponent; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JScrollPane; import javax.swing.JTable; +import javax.swing.KeyStroke; import javax.swing.ListSelectionModel; import javax.swing.SwingUtilities; @@ -59,6 +63,16 @@ public class RecoveryConfigurationPanel extends FlightConfigurablePanel { public String toString() { if (formattedMessage == null) { String str; - str = String.format("%4d %10.3f %-" + LogLevel.LENGTH + "s %s %s", + str = String.format(Locale.ENGLISH, "%4d %10.3f %-" + LogLevel.LENGTH + "s %s %s", count, timestamp / 1000.0, (level != null) ? level.toString() : "NULL", getLocation(), message); diff --git a/swing/src/net/sf/openrocket/utils/SerializePresets.java b/swing/src/net/sf/openrocket/utils/SerializePresets.java index fb082f53b..d872fc223 100644 --- a/swing/src/net/sf/openrocket/utils/SerializePresets.java +++ b/swing/src/net/sf/openrocket/utils/SerializePresets.java @@ -17,6 +17,11 @@ import net.sf.openrocket.preset.xml.OpenRocketComponentLoader; import net.sf.openrocket.util.Pair; public class SerializePresets extends BasicApplication { + + private static void printUsage() { + System.err.println("SerializePresets ... "); + System.err.println(" (may be repeated) is base directory for a set of .orc preset files"); + } /** * @param args @@ -26,25 +31,36 @@ public class SerializePresets extends BasicApplication { SerializePresets app = new SerializePresets(); app.initializeApplication(); + if (args.length < 1) { + printUsage(); + throw new IllegalArgumentException("Invalid Command Line Params"); + } + Locale.setDefault(Locale.ENGLISH); ComponentPresetDatabase componentPresetDao = new ComponentPresetDatabase(); - - FileIterator iterator = DirectoryIterator.findDirectory("resources-src/datafiles/presets", new SimpleFileFilter("", false, "orc")); - - if (iterator == null) { - throw new RuntimeException("Can't find resources-src/presets directory"); - } - while (iterator.hasNext()) { - Pair f = iterator.next(); - String fileName = f.getU(); - InputStream is = f.getV(); + + for (int i = 0; i < args.length; i++) { + + System.err.println("Processing .orc files in directory " + args[i]); - OpenRocketComponentLoader loader = new OpenRocketComponentLoader(); - Collection presets = loader.load(is, fileName); - - componentPresetDao.addAll(presets); + FileIterator iterator = DirectoryIterator.findDirectory(args[i], new SimpleFileFilter("", false, "orc")); + if (iterator == null) { + throw new RuntimeException("Can't find " + args[i] + " directory"); + } + while (iterator.hasNext()) { + Pair f = iterator.next(); + String fileName = f.getU(); + InputStream is = f.getV(); + + OpenRocketComponentLoader loader = new OpenRocketComponentLoader(); + Collection presets = loader.load(is, fileName); + + componentPresetDao.addAll(presets); + + } + } List list = componentPresetDao.listAll();