Merge pull request #570 from wolsen/add-railbutton-presets
Add railbutton presets
This commit is contained in:
commit
e51545d7f3
@ -1317,10 +1317,12 @@ material.brass = Brass
|
||||
material.cardboard = Cardboard
|
||||
material.carbon_fiber = Carbon fiber
|
||||
material.cork = Cork
|
||||
material.delrin = Delrin
|
||||
material.depron_xps = Depron (XPS)
|
||||
material.fiberglass = Fiberglass
|
||||
material.kraft_phenolic = Kraft phenolic
|
||||
material.maple = Maple
|
||||
material.nylon = Nylon
|
||||
material.paper_office = Paper (office)
|
||||
material.pine = Pine
|
||||
material.plywood_birch = Plywood (birch)
|
||||
@ -1993,6 +1995,8 @@ table.column.AftShoulderDiameter = Aft Shoulder Diameter
|
||||
table.column.ForeShoulderLength = Fore Shoulder Length
|
||||
table.column.ForeShoulderDiameter = Fore Shoulder Diameter
|
||||
table.column.ForeOuterDiameter = Fore Outer Diameter
|
||||
table.column.StandoffHeight = Standoff Height
|
||||
table.column.FlangeHeight = Flange Height
|
||||
table.column.Shape = Shape
|
||||
table.column.Material = Material
|
||||
table.column.Finish = Finish
|
||||
|
@ -50,10 +50,12 @@ public class Databases {
|
||||
BULK_MATERIAL.add(newMaterial(Material.Type.BULK, "Cardboard", 680));
|
||||
BULK_MATERIAL.add(newMaterial(Material.Type.BULK, "Carbon fiber", 1780));
|
||||
BULK_MATERIAL.add(newMaterial(Material.Type.BULK, "Cork", 240));
|
||||
BULK_MATERIAL.add(newMaterial(Material.Type.BULK, "Delrin", 1420));
|
||||
BULK_MATERIAL.add(newMaterial(Material.Type.BULK, "Depron (XPS)", 40));
|
||||
BULK_MATERIAL.add(newMaterial(Material.Type.BULK, "Fiberglass", 1850));
|
||||
BULK_MATERIAL.add(newMaterial(Material.Type.BULK, "Kraft phenolic", 950));
|
||||
BULK_MATERIAL.add(newMaterial(Material.Type.BULK, "Maple", 755));
|
||||
BULK_MATERIAL.add(newMaterial(Material.Type.BULK, "Nylon", 1150));
|
||||
BULK_MATERIAL.add(newMaterial(Material.Type.BULK, "Paper (office)", 820));
|
||||
BULK_MATERIAL.add(newMaterial(Material.Type.BULK, "Pine", 530));
|
||||
BULK_MATERIAL.add(newMaterial(Material.Type.BULK, "Plywood (birch)", 630));
|
||||
|
@ -200,6 +200,8 @@ public class ComponentPreset implements Comparable<ComponentPreset>, Serializabl
|
||||
public final static TypedKey<Double> LINE_LENGTH = new TypedKey<Double>("LineLength", Double.class, UnitGroup.UNITS_LENGTH);
|
||||
public final static TypedKey<Material> LINE_MATERIAL = new TypedKey<Material>("LineMaterial", Material.class);
|
||||
public final static TypedKey<byte[]> IMAGE = new TypedKey<byte[]>("Image", byte[].class);
|
||||
public final static TypedKey<Double> STANDOFF_HEIGHT = new TypedKey<Double>("StandoffHeight", Double.class, UnitGroup.UNITS_LENGTH);
|
||||
public final static TypedKey<Double> FLANGE_HEIGHT = new TypedKey<Double>("FlangeHeight", Double.class, UnitGroup.UNITS_LENGTH);
|
||||
|
||||
public final static List<TypedKey<?>> ORDERED_KEY_LIST = Collections.unmodifiableList(Arrays.<TypedKey<?>> asList(
|
||||
MANUFACTURER,
|
||||
@ -215,6 +217,8 @@ public class ComponentPreset implements Comparable<ComponentPreset>, Serializabl
|
||||
AFT_SHOULDER_LENGTH,
|
||||
FORE_SHOULDER_DIAMETER,
|
||||
FORE_SHOULDER_LENGTH,
|
||||
STANDOFF_HEIGHT,
|
||||
FLANGE_HEIGHT,
|
||||
SHAPE,
|
||||
THICKNESS,
|
||||
FILLED,
|
||||
|
@ -5,6 +5,7 @@ import net.sf.openrocket.database.Databases;
|
||||
import net.sf.openrocket.material.Material;
|
||||
import net.sf.openrocket.preset.ComponentPreset.Type;
|
||||
import net.sf.openrocket.rocketcomponent.NoseCone;
|
||||
import net.sf.openrocket.rocketcomponent.RailButton;
|
||||
import net.sf.openrocket.rocketcomponent.Transition;
|
||||
|
||||
public abstract class ComponentPresetFactory {
|
||||
@ -67,6 +68,10 @@ public abstract class ComponentPresetFactory {
|
||||
makeBodyTube(exceptions, preset);
|
||||
break;
|
||||
}
|
||||
case RAIL_BUTTON: {
|
||||
makeRailButton(exceptions, preset);
|
||||
break;
|
||||
}
|
||||
case STREAMER: {
|
||||
makeStreamer(exceptions, preset);
|
||||
break;
|
||||
@ -108,6 +113,30 @@ public abstract class ComponentPresetFactory {
|
||||
|
||||
}
|
||||
|
||||
private static void makeRailButton(InvalidComponentPresetException exceptions, ComponentPreset preset) throws InvalidComponentPresetException {
|
||||
|
||||
checkRequiredFields(exceptions, preset, HEIGHT);
|
||||
checkRequiredFields(exceptions, preset, OUTER_DIAMETER);
|
||||
checkRequiredFields(exceptions, preset, INNER_DIAMETER);
|
||||
checkRequiredFields(exceptions, preset, FLANGE_HEIGHT);
|
||||
checkRequiredFields(exceptions, preset, STANDOFF_HEIGHT);
|
||||
|
||||
if (preset.has(MASS)) {
|
||||
double mass = preset.get(MASS);
|
||||
RailButton rb = new RailButton();
|
||||
rb.loadPreset(preset);
|
||||
double density = mass / rb.getComponentVolume();
|
||||
|
||||
String materialName = "RailButtonCustom";
|
||||
if (preset.has(MATERIAL)) {
|
||||
materialName = preset.get(MATERIAL).getName();
|
||||
}
|
||||
|
||||
Material m = Databases.findMaterial(Material.Type.BULK, materialName, density);
|
||||
preset.put(MATERIAL, m);
|
||||
}
|
||||
}
|
||||
|
||||
private static void makeNoseCone(InvalidComponentPresetException exceptions, ComponentPreset preset) {
|
||||
|
||||
checkRequiredFields(exceptions, preset, LENGTH, SHAPE, AFT_OUTER_DIAMETER);
|
||||
|
@ -0,0 +1,32 @@
|
||||
package net.sf.openrocket.preset.loader;
|
||||
|
||||
import net.sf.openrocket.preset.ComponentPreset;
|
||||
import net.sf.openrocket.preset.ComponentPreset.Type;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
public class RailButtonLoader extends BaseComponentLoader {
|
||||
|
||||
public RailButtonLoader(MaterialHolder materials, File theBasePath) {
|
||||
super(materials, theBasePath);
|
||||
fileColumns.add(new DoubleUnitColumnParser("ID","Units",ComponentPreset.INNER_DIAMETER));
|
||||
fileColumns.add(new DoubleUnitColumnParser("OD","Units",ComponentPreset.OUTER_DIAMETER));
|
||||
fileColumns.add(new DoubleUnitColumnParser("Height","Units",ComponentPreset.HEIGHT));
|
||||
fileColumns.add(new DoubleUnitColumnParser("Flange Height", "Units", ComponentPreset.FLANGE_HEIGHT));
|
||||
fileColumns.add(new DoubleUnitColumnParser("Standoff Height", "Units", ComponentPreset.STANDOFF_HEIGHT));
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected Type getComponentPresetType() {
|
||||
return ComponentPreset.Type.RAIL_BUTTON;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected RocksimComponentFileType getFileType() {
|
||||
return RocksimComponentFileType.LAUNCH_LUG;
|
||||
}
|
||||
|
||||
}
|
@ -39,6 +39,7 @@ public class OpenRocketComponentDTO {
|
||||
@XmlElementRef(name = "CenteringRings", type = CenteringRingDTO.class),
|
||||
@XmlElementRef(name = "EngineBlocks", type = EngineBlockDTO.class),
|
||||
@XmlElementRef(name = "LaunchLugs", type = LaunchLugDTO.class),
|
||||
@XmlElementRef(name = "RailButtons", type = RailButtonDTO.class),
|
||||
@XmlElementRef(name = "Streamers", type = StreamerDTO.class),
|
||||
@XmlElementRef(name = "Parachutes", type = ParachuteDTO.class)})
|
||||
private List<BaseComponentDTO> components = new ArrayList<BaseComponentDTO>();
|
||||
|
@ -198,6 +198,8 @@ public class OpenRocketComponentSaver {
|
||||
return new EngineBlockDTO(thePreset);
|
||||
case LAUNCH_LUG:
|
||||
return new LaunchLugDTO(thePreset);
|
||||
case RAIL_BUTTON:
|
||||
return new RailButtonDTO(thePreset);
|
||||
case STREAMER:
|
||||
return new StreamerDTO(thePreset);
|
||||
case PARACHUTE:
|
||||
|
132
core/src/net/sf/openrocket/preset/xml/RailButtonDTO.java
Normal file
132
core/src/net/sf/openrocket/preset/xml/RailButtonDTO.java
Normal file
@ -0,0 +1,132 @@
|
||||
|
||||
package net.sf.openrocket.preset.xml;
|
||||
|
||||
import net.sf.openrocket.preset.ComponentPreset;
|
||||
import net.sf.openrocket.preset.ComponentPresetFactory;
|
||||
import net.sf.openrocket.preset.InvalidComponentPresetException;
|
||||
import net.sf.openrocket.preset.TypedPropertyMap;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Body tube preset XML handler.
|
||||
*/
|
||||
@XmlRootElement(name = "RailButton")
|
||||
@XmlAccessorType(XmlAccessType.FIELD)
|
||||
public class RailButtonDTO extends BaseComponentDTO {
|
||||
|
||||
@XmlElement(name = "InsideDiameter")
|
||||
private AnnotatedLengthDTO insideDiameter;
|
||||
@XmlElement(name = "OutsideDiameter")
|
||||
private AnnotatedLengthDTO outsideDiameter;
|
||||
@XmlElement(name = "Height")
|
||||
private AnnotatedLengthDTO height;
|
||||
@XmlElement(name = "StandoffHeight")
|
||||
private AnnotatedLengthDTO standoffHeight;
|
||||
@XmlElement(name = "FlangeHeight")
|
||||
private AnnotatedLengthDTO flangeHeight;
|
||||
|
||||
/**
|
||||
* Default constructor.
|
||||
*/
|
||||
public RailButtonDTO() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Most-useful constructor that maps a RailButton preset to a RailButtonDTO.
|
||||
*
|
||||
* @param preset the preset
|
||||
*
|
||||
* @throws net.sf.openrocket.util.BugException thrown if the expected body tube keys are not in the preset
|
||||
*/
|
||||
public RailButtonDTO(final ComponentPreset preset) {
|
||||
super(preset);
|
||||
setInsideDiameter(preset.get(ComponentPreset.INNER_DIAMETER));
|
||||
setOutsideDiameter(preset.get(ComponentPreset.OUTER_DIAMETER));
|
||||
setHeight(preset.get(ComponentPreset.HEIGHT));
|
||||
setStandoffHeight(preset.get(ComponentPreset.STANDOFF_HEIGHT));
|
||||
setFlangeHeight(preset.get(ComponentPreset.FLANGE_HEIGHT));
|
||||
}
|
||||
|
||||
public double getInsideDiameter() {
|
||||
return insideDiameter.getValue();
|
||||
}
|
||||
|
||||
public void setInsideDiameter( final AnnotatedLengthDTO theLength ) {
|
||||
insideDiameter = theLength;
|
||||
}
|
||||
|
||||
public void setInsideDiameter(final double theId) {
|
||||
insideDiameter = new AnnotatedLengthDTO(theId);
|
||||
}
|
||||
|
||||
public double getOutsideDiameter() {
|
||||
return outsideDiameter.getValue();
|
||||
}
|
||||
|
||||
public void setOutsideDiameter(final AnnotatedLengthDTO theOd) {
|
||||
outsideDiameter = theOd;
|
||||
}
|
||||
|
||||
public void setOutsideDiameter(final double theOd) {
|
||||
outsideDiameter = new AnnotatedLengthDTO(theOd);
|
||||
}
|
||||
|
||||
public double getHeight() {
|
||||
return height.getValue();
|
||||
}
|
||||
|
||||
public void setHeight(final AnnotatedLengthDTO theHeight) {
|
||||
height = theHeight;
|
||||
}
|
||||
|
||||
public void setHeight(final double theHeight) {
|
||||
height = new AnnotatedLengthDTO(theHeight);
|
||||
}
|
||||
|
||||
public double getStandoffHeight() {
|
||||
return standoffHeight.getValue();
|
||||
}
|
||||
|
||||
public void setStandoffHeight(final AnnotatedLengthDTO theStandoffHeight) {
|
||||
standoffHeight = theStandoffHeight;
|
||||
}
|
||||
|
||||
public void setStandoffHeight(final double theStandoffHeight) {
|
||||
standoffHeight = new AnnotatedLengthDTO(theStandoffHeight);
|
||||
}
|
||||
|
||||
public double getFlangeHeight() {
|
||||
return flangeHeight.getValue();
|
||||
}
|
||||
|
||||
public void setFlangeHeight(final AnnotatedLengthDTO theFlangeHeight) {
|
||||
flangeHeight = theFlangeHeight;
|
||||
}
|
||||
|
||||
public void setFlangeHeight(final double theFlangeHeight) {
|
||||
flangeHeight = new AnnotatedLengthDTO(theFlangeHeight);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ComponentPreset asComponentPreset(java.util.List<MaterialDTO> materials) throws InvalidComponentPresetException {
|
||||
return asComponentPreset(ComponentPreset.Type.RAIL_BUTTON, materials);
|
||||
}
|
||||
|
||||
public ComponentPreset asComponentPreset(ComponentPreset.Type type, List<MaterialDTO> materials) throws InvalidComponentPresetException {
|
||||
TypedPropertyMap props = new TypedPropertyMap();
|
||||
addProps(props, materials);
|
||||
props.put(ComponentPreset.INNER_DIAMETER, this.getInsideDiameter());
|
||||
props.put(ComponentPreset.OUTER_DIAMETER, this.getOutsideDiameter());
|
||||
props.put(ComponentPreset.HEIGHT, this.getHeight());
|
||||
props.put(ComponentPreset.STANDOFF_HEIGHT, this.getStandoffHeight());
|
||||
props.put(ComponentPreset.FLANGE_HEIGHT, this.getFlangeHeight());
|
||||
props.put(ComponentPreset.TYPE, type);
|
||||
|
||||
return ComponentPresetFactory.create(props);
|
||||
}
|
||||
}
|
@ -3,7 +3,9 @@ package net.sf.openrocket.rocketcomponent;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
|
||||
import net.sf.openrocket.database.Databases;
|
||||
import net.sf.openrocket.l10n.Translator;
|
||||
import net.sf.openrocket.material.Material;
|
||||
import net.sf.openrocket.preset.ComponentPreset;
|
||||
import net.sf.openrocket.preset.ComponentPreset.Type;
|
||||
import net.sf.openrocket.rocketcomponent.position.AngleMethod;
|
||||
@ -16,7 +18,7 @@ import net.sf.openrocket.util.Coordinate;
|
||||
import net.sf.openrocket.util.MathUtil;
|
||||
|
||||
/**
|
||||
* WARNING: This class is only partially implemented. Recomend a bit of testing before you attach it to the GUI.
|
||||
* WARNING: This class is only partially implemented. Recommend a bit of testing before you attach it to the GUI.
|
||||
* @author widget (Daniel Williams)
|
||||
*
|
||||
*/
|
||||
@ -59,12 +61,13 @@ public class RailButton extends ExternalComponent implements AnglePositionable,
|
||||
|
||||
public RailButton(){
|
||||
super(AxialMethod.MIDDLE);
|
||||
this.outerDiameter_m = 1.0;
|
||||
this.totalHeight_m = 1.0;
|
||||
this.innerDiameter_m = 0.8;
|
||||
this.outerDiameter_m = 0.0097;
|
||||
this.totalHeight_m = 0.0097;
|
||||
this.innerDiameter_m = 0.008;
|
||||
this.flangeHeight_m = 0.002;
|
||||
this.setStandoff( 0.002);
|
||||
this.setInstanceSeparation( 1.0);
|
||||
this.setInstanceSeparation( this.outerDiameter_m * 6);
|
||||
this.setMaterial(Databases.findMaterial(Material.Type.BULK, "Delrin"));
|
||||
}
|
||||
|
||||
public RailButton( final double od, final double ht ) {
|
||||
@ -81,6 +84,7 @@ public class RailButton extends ExternalComponent implements AnglePositionable,
|
||||
this.flangeHeight_m = flangeThickness;
|
||||
this.setStandoff( _standoff);
|
||||
this.setInstanceSeparation( od*2);
|
||||
this.setMaterial(Databases.findMaterial(Material.Type.BULK, "Delrin"));
|
||||
}
|
||||
|
||||
private static final RailButton make1010Button(){
|
||||
|
@ -6,6 +6,7 @@ import javax.swing.JPanel;
|
||||
import javax.swing.JSpinner;
|
||||
|
||||
import net.miginfocom.swing.MigLayout;
|
||||
import net.sf.openrocket.database.Databases;
|
||||
import net.sf.openrocket.document.OpenRocketDocument;
|
||||
import net.sf.openrocket.gui.SpinnerEditor;
|
||||
import net.sf.openrocket.gui.adaptors.DoubleModel;
|
||||
@ -14,7 +15,6 @@ import net.sf.openrocket.gui.components.BasicSlider;
|
||||
import net.sf.openrocket.gui.components.UnitSelector;
|
||||
import net.sf.openrocket.l10n.Translator;
|
||||
import net.sf.openrocket.material.Material;
|
||||
import net.sf.openrocket.rocketcomponent.BodyTube;
|
||||
import net.sf.openrocket.rocketcomponent.RailButton;
|
||||
import net.sf.openrocket.rocketcomponent.RocketComponent;
|
||||
import net.sf.openrocket.rocketcomponent.position.AxialMethod;
|
||||
@ -43,6 +43,9 @@ public class RailButtonConfig extends RocketComponentConfig {
|
||||
}
|
||||
|
||||
private JPanel buttonTab( final RailButton rbc ){
|
||||
|
||||
JPanel primary = new JPanel(new MigLayout("fill"));
|
||||
|
||||
JPanel panel = new JPanel( new MigLayout());
|
||||
|
||||
|
||||
@ -74,36 +77,41 @@ public class RailButtonConfig extends RocketComponentConfig {
|
||||
panel.add(new UnitSelector( angleModel), "growx");
|
||||
panel.add(new BasicSlider( angleModel.getSliderModel(-180, 180)), "w 100lp, wrap");
|
||||
}
|
||||
|
||||
|
||||
{ //// Position relative to:
|
||||
panel.add(new JLabel(trans.get("RailBtnCfg.lbl.PosRelativeTo")));
|
||||
|
||||
final EnumModel<AxialMethod> methodModel = new EnumModel<AxialMethod>(component, "AxialMethod", AxialMethod.axialOffsetMethods );
|
||||
JComboBox<AxialMethod> relToCombo = new JComboBox<AxialMethod>( methodModel );
|
||||
panel.add( relToCombo, "growx, wrap rel");
|
||||
panel.add( relToCombo, "spanx, growx, wrap");
|
||||
}
|
||||
|
||||
{ //// plus
|
||||
final double parentLength = ((BodyTube)rbc.getParent()).getLength();
|
||||
panel.add(new JLabel(trans.get("RailBtnCfg.lbl.Plus")), "right");
|
||||
DoubleModel offsetModel = new DoubleModel(component, "AxialOffset", UnitGroup.UNITS_LENGTH);
|
||||
JSpinner offsetSpinner = new JSpinner(offsetModel.getSpinnerModel());
|
||||
offsetSpinner.setEditor(new SpinnerEditor(offsetSpinner));
|
||||
panel.add(offsetSpinner, "growx");
|
||||
panel.add(new UnitSelector( offsetModel), "growx");
|
||||
panel.add(new BasicSlider( offsetModel.getSliderModel(0, parentLength)), "w 100lp, wrap para");
|
||||
panel.add(new UnitSelector(offsetModel), "growx");
|
||||
panel.add(new BasicSlider(offsetModel.getSliderModel(
|
||||
new DoubleModel(component.getParent(), "Length", -1.0, UnitGroup.UNITS_NONE),
|
||||
new DoubleModel(component.getParent(), "Length"))),
|
||||
"w 100lp, wrap para");
|
||||
|
||||
}
|
||||
|
||||
primary.add(panel, "grow, gapright 201p");
|
||||
panel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::][]", ""));
|
||||
|
||||
//// Instance count
|
||||
panel.add( instanceablePanel(rbc), "span, wrap");
|
||||
|
||||
//// Material
|
||||
panel.add( instanceablePanel(rbc), "cell 4 0, spany 3, wrap para");
|
||||
panel.add(materialPanel(Material.Type.BULK),"span, wrap");
|
||||
|
||||
primary.add(panel, "grow");
|
||||
|
||||
|
||||
//// Material
|
||||
panel.add(materialPanel(Material.Type.BULK),"cell 4 2, spany 2, gapleft paragraph, aligny 0%, growy");
|
||||
// ... spany");
|
||||
|
||||
return panel;
|
||||
return primary;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -168,6 +168,17 @@ public class PresetEditorDialog extends JDialog implements ItemListener {
|
||||
private ImageIcon llImage;
|
||||
private JButton llImageBtn;
|
||||
|
||||
private JTextField rbPartNoTextField;
|
||||
private JTextField rbDescTextField;
|
||||
private DoubleModel rbOuterDia;
|
||||
private DoubleModel rbInnerDia;
|
||||
private DoubleModel rbHeight;
|
||||
private DoubleModel rbStandoffHeight;
|
||||
private DoubleModel rbFlangeHeight;
|
||||
private DoubleModel rbMass;
|
||||
private ImageIcon rbImage;
|
||||
private JButton rbImageBtn;
|
||||
|
||||
private JTextField stPartNoTextField;
|
||||
private JTextField stDescTextField;
|
||||
private DoubleModel stThickness;
|
||||
@ -204,6 +215,7 @@ public class PresetEditorDialog extends JDialog implements ItemListener {
|
||||
private static final String BULKHEAD_KEY = "Bulkhead.Bulkhead";
|
||||
private static final String EB_KEY = "ComponentIcons.Engineblock";
|
||||
private static final String LAUNCH_LUG_KEY = "ComponentIcons.Launchlug";
|
||||
private static final String RAIL_BUTTON_KEY = "ComponentIcons.RailButton";
|
||||
private static final String STREAMER_KEY = "ComponentIcons.Streamer";
|
||||
private static final String PARACHUTE_KEY = "ComponentIcons.Parachute";
|
||||
|
||||
@ -217,6 +229,7 @@ public class PresetEditorDialog extends JDialog implements ItemListener {
|
||||
componentMap.put(trans.get(BULKHEAD_KEY), "BULKHEAD");
|
||||
componentMap.put(trans.get(EB_KEY), "ENGINEBLOCK");
|
||||
componentMap.put(trans.get(LAUNCH_LUG_KEY), "LAUNCHLUG");
|
||||
componentMap.put(trans.get(RAIL_BUTTON_KEY), "RAILBUTTON");
|
||||
componentMap.put(trans.get(PARACHUTE_KEY), "PARACHUTE");
|
||||
componentMap.put(trans.get(STREAMER_KEY), "STREAMER");
|
||||
}
|
||||
@ -961,6 +974,103 @@ public class PresetEditorDialog extends JDialog implements ItemListener {
|
||||
});
|
||||
}
|
||||
|
||||
// Railbutton
|
||||
{
|
||||
JPanel rbPanel = new JPanel();
|
||||
componentOverlayPanel.add(rbPanel, "RAILBUTTON");
|
||||
rbPanel.setLayout(new MigLayout("", "[][grow][][grow]", "[][][][]"));
|
||||
JLabel rbPartNoLabel = new JLabel("Part No:");
|
||||
rbPanel.add(rbPartNoLabel, "cell 0 0,alignx left");
|
||||
|
||||
rbPartNoTextField = new JTextField();
|
||||
rbPanel.add(rbPartNoTextField, "cell 1 0,growx");
|
||||
rbPartNoTextField.setColumns(10);
|
||||
|
||||
JLabel rbDescLabel = new JLabel("Description:");
|
||||
rbPanel.add(rbDescLabel, "cell 3 0,alignx left");
|
||||
|
||||
rbDescTextField = new JTextField();
|
||||
rbPanel.add(rbDescTextField, "cell 4 0,growx");
|
||||
rbDescTextField.setColumns(10);
|
||||
|
||||
JLabel rbOuterDiaLabel = new JLabel("Outer Dia.:");
|
||||
rbPanel.add(rbOuterDiaLabel, "cell 0 1,alignx left");
|
||||
|
||||
rbOuterDia = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0);
|
||||
JSpinner spin = new JSpinner(rbOuterDia.getSpinnerModel());
|
||||
spin.setEditor(new SpinnerEditor(spin));
|
||||
rbPanel.add(spin, "cell 1 1, growx");
|
||||
rbPanel.add(new UnitSelector(rbOuterDia), "growx");
|
||||
|
||||
JLabel rbMassLabel = new JLabel("Mass:");
|
||||
rbPanel.add(rbMassLabel, "cell 3 1,alignx left");
|
||||
|
||||
rbMass = new DoubleModel(0, UnitGroup.UNITS_MASS, 0);
|
||||
spin = new JSpinner(rbMass.getSpinnerModel());
|
||||
spin.setEditor(new SpinnerEditor(spin));
|
||||
rbPanel.add(spin, "cell 4 1, growx");
|
||||
rbPanel.add(new UnitSelector(llMass), "w 34lp!");
|
||||
|
||||
JLabel rbInnerDiaLabel = new JLabel("Inner Dia.:");
|
||||
rbPanel.add(rbInnerDiaLabel, "cell 0 2,alignx left");
|
||||
|
||||
rbInnerDia = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0);
|
||||
spin = new JSpinner(rbInnerDia.getSpinnerModel());
|
||||
spin.setEditor(new SpinnerEditor(spin));
|
||||
rbPanel.add(spin, "cell 1 2, growx");
|
||||
rbPanel.add(new UnitSelector(rbInnerDia), "growx");
|
||||
|
||||
JLabel rbHeightLabel = new JLabel("Height:");
|
||||
rbPanel.add(rbHeightLabel, "cell 3 2,alignx left");
|
||||
|
||||
rbHeight = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0);
|
||||
spin = new JSpinner(rbHeight.getSpinnerModel());
|
||||
spin.setEditor(new SpinnerEditor(spin));
|
||||
rbPanel.add(spin, "cell 4 2, growx");
|
||||
rbPanel.add(new UnitSelector(rbHeight), "w 34lp!");
|
||||
|
||||
JLabel rbStandoffLabel = new JLabel("Standoff:");
|
||||
rbPanel.add(rbStandoffLabel, "cell 0 3,alignx left");
|
||||
|
||||
rbStandoffHeight = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0);
|
||||
spin = new JSpinner(rbStandoffHeight.getSpinnerModel());
|
||||
spin.setEditor(new SpinnerEditor(spin));
|
||||
rbPanel.add(spin, "cell 1 3, growx");
|
||||
rbPanel.add(new UnitSelector(rbStandoffHeight), "growx");
|
||||
|
||||
JLabel rbFlangeLabel = new JLabel("Flange:");
|
||||
rbPanel.add(rbFlangeLabel, "cell 3 3,alignx left");
|
||||
|
||||
rbFlangeHeight = new DoubleModel(0, UnitGroup.UNITS_LENGTH, 0);
|
||||
spin = new JSpinner(rbFlangeHeight.getSpinnerModel());
|
||||
spin.setEditor(new SpinnerEditor(spin));
|
||||
rbPanel.add(spin, "cell 4 3, growx");
|
||||
rbPanel.add(new UnitSelector(rbFlangeHeight), "w 34lp!");
|
||||
|
||||
JPanel panel = new JPanel();
|
||||
panel.setMinimumSize(new Dimension(200, 200));
|
||||
rbPanel.add(panel, "cell 4 4");
|
||||
panel.setLayout(null);
|
||||
rbImageBtn = new JButton("No Image");
|
||||
rbImageBtn.setMaximumSize(new Dimension(75, 75));
|
||||
rbImageBtn.setMinimumSize(new Dimension(75, 75));
|
||||
panel.add(rbImageBtn);
|
||||
rbImageBtn.setBounds(new Rectangle(6, 6, 132, 145));
|
||||
|
||||
rbImageBtn.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(final ActionEvent e) {
|
||||
int returnVal = imageChooser.showOpenDialog(PresetEditorDialog.this);
|
||||
|
||||
if (returnVal == JFileChooser.APPROVE_OPTION) {
|
||||
File file = imageChooser.getSelectedFile();
|
||||
rbImage = scaleImage(new ImageIcon(file.getAbsolutePath()).getImage(), 155);
|
||||
rbImageBtn.setIcon(rbImage);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
{
|
||||
JPanel stPanel = new JPanel();
|
||||
componentOverlayPanel.add(stPanel, "STREAMER");
|
||||
@ -1188,6 +1298,7 @@ public class PresetEditorDialog extends JDialog implements ItemListener {
|
||||
cb.addItem(trans.get(TRANSITION_KEY), preset != null && !preset.get(ComponentPreset.TYPE).equals(ComponentPreset.Type.TRANSITION));
|
||||
cb.addItem(trans.get(TUBE_COUPLER_KEY), preset != null && !preset.get(ComponentPreset.TYPE).equals(ComponentPreset.Type.TUBE_COUPLER));
|
||||
cb.addItem(trans.get(LAUNCH_LUG_KEY), preset != null && !preset.get(ComponentPreset.TYPE).equals(ComponentPreset.Type.LAUNCH_LUG));
|
||||
cb.addItem(trans.get(RAIL_BUTTON_KEY), preset != null && !preset.get(ComponentPreset.TYPE).equals(ComponentPreset.Type.RAIL_BUTTON));
|
||||
cb.addItem(trans.get(PARACHUTE_KEY), preset != null && !preset.get(ComponentPreset.TYPE).equals(ComponentPreset.Type.PARACHUTE));
|
||||
cb.addItem(trans.get(STREAMER_KEY), preset != null && !preset.get(ComponentPreset.TYPE).equals(ComponentPreset.Type.STREAMER));
|
||||
}
|
||||
@ -1447,6 +1558,41 @@ public class PresetEditorDialog extends JDialog implements ItemListener {
|
||||
llImageBtn.setIcon(llImage);
|
||||
}
|
||||
break;
|
||||
case RAIL_BUTTON:
|
||||
setMaterial(materialChooser, preset, matHolder, Material.Type.BULK, ComponentPreset.MATERIAL);
|
||||
typeCombo.setSelectedItem(trans.get(RAIL_BUTTON_KEY));
|
||||
rbDescTextField.setText(preset.get(ComponentPreset.DESCRIPTION));
|
||||
if (preset.has(ComponentPreset.INNER_DIAMETER)) {
|
||||
rbInnerDia.setValue(preset.get(ComponentPreset.INNER_DIAMETER));
|
||||
rbInnerDia.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit());
|
||||
}
|
||||
if (preset.has(ComponentPreset.OUTER_DIAMETER)) {
|
||||
rbOuterDia.setValue(preset.get(ComponentPreset.OUTER_DIAMETER));
|
||||
rbOuterDia.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit());
|
||||
}
|
||||
if (preset.has(ComponentPreset.HEIGHT)) {
|
||||
rbHeight.setValue(preset.get(ComponentPreset.HEIGHT));
|
||||
rbHeight.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit());
|
||||
}
|
||||
if (preset.has(ComponentPreset.STANDOFF_HEIGHT)) {
|
||||
rbStandoffHeight.setValue(preset.get(ComponentPreset.STANDOFF_HEIGHT));
|
||||
rbStandoffHeight.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit());
|
||||
}
|
||||
if (preset.has(ComponentPreset.FLANGE_HEIGHT)) {
|
||||
rbFlangeHeight.setValue(preset.get(ComponentPreset.FLANGE_HEIGHT));
|
||||
rbFlangeHeight.setCurrentUnit(UnitGroup.UNITS_LENGTH.getDefaultUnit());
|
||||
}
|
||||
if (preset.has(ComponentPreset.MASS)) {
|
||||
rbMass.setValue(preset.get(ComponentPreset.MASS));
|
||||
rbMass.setCurrentUnit(UnitGroup.UNITS_MASS.getDefaultUnit());
|
||||
}
|
||||
|
||||
rbPartNoTextField.setText(preset.get(ComponentPreset.PARTNO));
|
||||
if (preset.has(ComponentPreset.IMAGE)) {
|
||||
rbImage = new ImageIcon(byteArrayToImage(preset.get(ComponentPreset.IMAGE)));
|
||||
rbImageBtn.setIcon(llImage);
|
||||
}
|
||||
break;
|
||||
case PARACHUTE:
|
||||
setMaterial(materialChooser, preset, matHolder, Material.Type.SURFACE, ComponentPreset.MATERIAL);
|
||||
typeCombo.setSelectedItem(trans.get(PARACHUTE_KEY));
|
||||
@ -1579,6 +1725,12 @@ public class PresetEditorDialog extends JDialog implements ItemListener {
|
||||
clearLaunchLug();
|
||||
}
|
||||
}
|
||||
else if (type.equals(trans.get(RAIL_BUTTON_KEY))) {
|
||||
result = extractRailButton();
|
||||
if (result != null) {
|
||||
clearRailButton();
|
||||
}
|
||||
}
|
||||
else if (type.equals(trans.get(PARACHUTE_KEY))) {
|
||||
result = extractParachute();
|
||||
if (result != null) {
|
||||
@ -1954,6 +2106,52 @@ public class PresetEditorDialog extends JDialog implements ItemListener {
|
||||
llImageBtn.setIcon(null);
|
||||
}
|
||||
|
||||
public ComponentPreset extractRailButton() {
|
||||
TypedPropertyMap props = new TypedPropertyMap();
|
||||
try {
|
||||
props.put(ComponentPreset.TYPE, ComponentPreset.Type.RAIL_BUTTON);
|
||||
props.put(ComponentPreset.OUTER_DIAMETER, rbOuterDia.getValue());
|
||||
props.put(ComponentPreset.INNER_DIAMETER, rbInnerDia.getValue());
|
||||
props.put(ComponentPreset.STANDOFF_HEIGHT, rbStandoffHeight.getValue());
|
||||
props.put(ComponentPreset.FLANGE_HEIGHT, rbFlangeHeight.getValue());
|
||||
props.put(ComponentPreset.DESCRIPTION, rbDescTextField.getText());
|
||||
props.put(ComponentPreset.PARTNO, rbPartNoTextField.getText());
|
||||
props.put(ComponentPreset.MANUFACTURER, Manufacturer.getManufacturer(mfgTextField.getText()));
|
||||
props.put(ComponentPreset.HEIGHT, rbHeight.getValue());
|
||||
final Material material = (Material) materialChooser.getSelectedItem();
|
||||
if (material != null) {
|
||||
props.put(ComponentPreset.MATERIAL, material);
|
||||
}
|
||||
else {
|
||||
JOptionPane.showMessageDialog(null, "A material must be selected.", "Error", JOptionPane.ERROR_MESSAGE);
|
||||
return null;
|
||||
}
|
||||
props.put(ComponentPreset.MASS, rbMass.getValue());
|
||||
if (llImage != null) {
|
||||
props.put(ComponentPreset.IMAGE, imageToByteArray(rbImage.getImage()));
|
||||
}
|
||||
return ComponentPresetFactory.create(props);
|
||||
} catch (NumberFormatException nfe) {
|
||||
JOptionPane.showMessageDialog(null, "Could not convert rail button attribute.", "Error", JOptionPane.ERROR_MESSAGE);
|
||||
} catch (InvalidComponentPresetException e) {
|
||||
JOptionPane.showMessageDialog(null, craftErrorMessage(e, "Mandatory rail button attribute not set."), "Error", JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private void clearRailButton() {
|
||||
rbOuterDia.setValue(0);
|
||||
rbInnerDia.setValue(0);
|
||||
rbDescTextField.setText("");
|
||||
rbPartNoTextField.setText("");
|
||||
rbFlangeHeight.setValue(0);
|
||||
rbHeight.setValue(0);
|
||||
rbStandoffHeight.setValue(0);
|
||||
rbMass.setValue(0);
|
||||
rbImage = null;
|
||||
rbImageBtn.setIcon(null);
|
||||
}
|
||||
|
||||
public ComponentPreset extractParachute() {
|
||||
TypedPropertyMap props = new TypedPropertyMap();
|
||||
try {
|
||||
|
Loading…
x
Reference in New Issue
Block a user