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 df2f52828..7c6161358 100644 --- a/core/src/main/java/info/openrocket/core/database/Databases.java +++ b/core/src/main/java/info/openrocket/core/database/Databases.java @@ -256,5 +256,15 @@ public class Databases { default -> throw new IllegalArgumentException("Illegal material type: " + type); }; } + + public static void addMaterial(Material material) { + Database db = getDatabase(material.getType()); + db.add(material); + } + + public static void removeMaterial(Material material) { + Database db = getDatabase(material.getType()); + db.remove(material); + } } diff --git a/swing/src/main/java/info/openrocket/swing/gui/dialogs/preferences/MaterialEditPanel.java b/swing/src/main/java/info/openrocket/swing/gui/dialogs/preferences/MaterialEditPanel.java index c78121d70..eb8a695e2 100644 --- a/swing/src/main/java/info/openrocket/swing/gui/dialogs/preferences/MaterialEditPanel.java +++ b/swing/src/main/java/info/openrocket/swing/gui/dialogs/preferences/MaterialEditPanel.java @@ -157,12 +157,8 @@ public class MaterialEditPanel extends JPanel { return; } Material mat = dialog.getMaterial(); - if (dialog.isAddSelected()) { - Databases.getDatabase(mat.getType()).add(mat); - } else { - mat.setDocumentMaterial(true); - document.getDocumentPreferences().addMaterial(mat); - } + mat.setDocumentMaterial(!dialog.isAddSelected()); + addMaterial(mat); model.fireTableDataChanged(); setButtonStates(); } @@ -203,20 +199,14 @@ public class MaterialEditPanel extends JPanel { if (!dialog.getOkClicked()) { return; } - if (m.isUserDefined()) { - if (isDocumentMaterialPrior) { - document.getDocumentPreferences().removeMaterial(m); - } else { - Databases.getDatabase(m.getType()).remove(m); - } - } + // Remove the original material + removeMaterial(m); + + // Add the edited material Material mat = dialog.getMaterial(); - if (dialog.isAddSelected()) { - Databases.getDatabase(mat.getType()).add(mat); - } else { - mat.setDocumentMaterial(true); - document.getDocumentPreferences().addMaterial(mat); - } + mat.setDocumentMaterial(!dialog.isAddSelected()); + addMaterial(mat); + model.fireTableDataChanged(); setButtonStates(); } @@ -237,11 +227,7 @@ public class MaterialEditPanel extends JPanel { Material m = getMaterial(sel); if (!m.isUserDefined()) return; - if (m.isDocumentMaterial()) { - document.getDocumentPreferences().removeMaterial(m); - } else { - Databases.getDatabase(m.getType()).remove(m); - } + removeMaterial(m); model.fireTableDataChanged(); setButtonStates(); } @@ -329,6 +315,23 @@ public class MaterialEditPanel extends JPanel { } + + private void addMaterial(Material m) { + if (m.isDocumentMaterial()) { + document.getDocumentPreferences().addMaterial(m); + } else { + Databases.addMaterial(m); + } + } + + private void removeMaterial(Material m) { + // TODO: what if a component is currently using the material? + if (m.isDocumentMaterial()) { + document.getDocumentPreferences().removeMaterial(m); + } else { + Databases.removeMaterial(m); + } + } private void setButtonStates() {