diff --git a/core/src/main/java/info/openrocket/core/database/Databases.java b/core/src/main/java/info/openrocket/core/database/Databases.java index 0889233de..b6ade7c53 100644 --- a/core/src/main/java/info/openrocket/core/database/Databases.java +++ b/core/src/main/java/info/openrocket/core/database/Databases.java @@ -189,18 +189,35 @@ public class Databases { * @param type the material type. * @param baseName the base name of the material. * @param density the density of the material. + * @param group the material group. * @return the material object from the database or a new material. */ - public static Material findMaterial(Material.Type type, String baseName, double density) { + public static Material findMaterial(Material.Type type, String baseName, double density, MaterialGroup group) { Database db = getDatabase(type); String name = trans.get("material", baseName); for (Material m : db) { - if (m.getName().equalsIgnoreCase(name) && MathUtil.equals(m.getDensity(), density)) { + if (m.getName().equalsIgnoreCase(name) && MathUtil.equals(m.getDensity(), density) && m.getGroup() == group) { return m; } } - return Material.newMaterial(type, name, density, true); + return Material.newMaterial(type, name, density, group, true); + } + + /** + * Find a material from the database or return a new user defined material if the specified + * material with the specified density is not found. + *

+ * This method will attempt to localize the material name to the current locale, or use + * the provided name if unable to do so. + * + * @param type the material type. + * @param baseName the base name of the material. + * @param density the density of the material. + * @return the material object from the database or a new material. + */ + public static Material findMaterial(Material.Type type, String baseName, double density) { + return findMaterial(type, baseName, density, null); } /** diff --git a/core/src/main/resources/l10n/messages.properties b/core/src/main/resources/l10n/messages.properties index 6523eaaed..d51d999e0 100644 --- a/core/src/main/resources/l10n/messages.properties +++ b/core/src/main/resources/l10n/messages.properties @@ -939,6 +939,7 @@ custmatdlg.title.Custommaterial = Custom material custmatdlg.lbl.Materialname = Material name: custmatdlg.lbl.Materialtype = Material type: custmatdlg.lbl.Materialdensity = Material density: +custmatdlg.lbl.MaterialGroup = Material group: custmatdlg.checkbox.Addmaterial = Add material to application database diff --git a/swing/src/main/java/info/openrocket/swing/gui/dialogs/CustomMaterialDialog.java b/swing/src/main/java/info/openrocket/swing/gui/dialogs/CustomMaterialDialog.java index 7561c914d..f868ae9e9 100644 --- a/swing/src/main/java/info/openrocket/swing/gui/dialogs/CustomMaterialDialog.java +++ b/swing/src/main/java/info/openrocket/swing/gui/dialogs/CustomMaterialDialog.java @@ -21,6 +21,7 @@ import javax.swing.JTextField; import info.openrocket.core.database.Databases; import info.openrocket.core.l10n.Translator; import info.openrocket.core.material.Material; +import info.openrocket.core.material.MaterialGroup; import info.openrocket.core.startup.Application; import net.miginfocom.swing.MigLayout; @@ -39,10 +40,11 @@ public class CustomMaterialDialog extends JDialog { private boolean okClicked = false; private JComboBox typeBox; - private JTextField nameField; + private final JTextField nameField; private DoubleModel density; - private JSpinner densitySpinner; - private UnitSelector densityUnit; + private final JSpinner densitySpinner; + private final UnitSelector densityUnit; + private JComboBox groupBox; private JCheckBox addBox; public CustomMaterialDialog(Window parent, Material material, boolean saveOption, boolean addToApplicationDatabase, @@ -118,6 +120,17 @@ public class CustomMaterialDialog extends JDialog { updateDensityModel(); + // Material group + panel.add(new JLabel(trans.get("custmatdlg.lbl.MaterialGroup"))); + groupBox = new JComboBox<>(MaterialGroup.ALL_GROUPS); + if (material != null && !material.isUserDefined()) { + groupBox.setSelectedItem(material.getEquivalentGroup()); + } else { + groupBox.setSelectedItem(MaterialGroup.CUSTOM); + } + panel.add(groupBox, "span, growx, wrap"); + + // Save option if (saveOption) { //// Add material to application database @@ -175,6 +188,7 @@ public class CustomMaterialDialog extends JDialog { Material.Type type; String name; double materialDensity; + MaterialGroup group; if (typeBox != null) { type = (Material.Type) typeBox.getSelectedItem(); @@ -183,10 +197,10 @@ public class CustomMaterialDialog extends JDialog { } name = nameField.getText().trim(); - materialDensity = this.density.getValue(); + group = (MaterialGroup) groupBox.getSelectedItem(); - return Databases.findMaterial(type, name, materialDensity); + return Databases.findMaterial(type, name, materialDensity, group); }