Refactor material addition/removal

This commit is contained in:
SiboVG 2024-08-08 22:01:29 +02:00
parent b5ff851263
commit e63e521e90
2 changed files with 37 additions and 24 deletions
core/src/main/java/info/openrocket/core/database
swing/src/main/java/info/openrocket/swing/gui/dialogs/preferences

@ -256,5 +256,15 @@ public class Databases {
default -> throw new IllegalArgumentException("Illegal material type: " + type); default -> throw new IllegalArgumentException("Illegal material type: " + type);
}; };
} }
public static void addMaterial(Material material) {
Database<Material> db = getDatabase(material.getType());
db.add(material);
}
public static void removeMaterial(Material material) {
Database<Material> db = getDatabase(material.getType());
db.remove(material);
}
} }

@ -157,12 +157,8 @@ public class MaterialEditPanel extends JPanel {
return; return;
} }
Material mat = dialog.getMaterial(); Material mat = dialog.getMaterial();
if (dialog.isAddSelected()) { mat.setDocumentMaterial(!dialog.isAddSelected());
Databases.getDatabase(mat.getType()).add(mat); addMaterial(mat);
} else {
mat.setDocumentMaterial(true);
document.getDocumentPreferences().addMaterial(mat);
}
model.fireTableDataChanged(); model.fireTableDataChanged();
setButtonStates(); setButtonStates();
} }
@ -203,20 +199,14 @@ public class MaterialEditPanel extends JPanel {
if (!dialog.getOkClicked()) { if (!dialog.getOkClicked()) {
return; return;
} }
if (m.isUserDefined()) { // Remove the original material
if (isDocumentMaterialPrior) { removeMaterial(m);
document.getDocumentPreferences().removeMaterial(m);
} else { // Add the edited material
Databases.getDatabase(m.getType()).remove(m);
}
}
Material mat = dialog.getMaterial(); Material mat = dialog.getMaterial();
if (dialog.isAddSelected()) { mat.setDocumentMaterial(!dialog.isAddSelected());
Databases.getDatabase(mat.getType()).add(mat); addMaterial(mat);
} else {
mat.setDocumentMaterial(true);
document.getDocumentPreferences().addMaterial(mat);
}
model.fireTableDataChanged(); model.fireTableDataChanged();
setButtonStates(); setButtonStates();
} }
@ -237,11 +227,7 @@ public class MaterialEditPanel extends JPanel {
Material m = getMaterial(sel); Material m = getMaterial(sel);
if (!m.isUserDefined()) if (!m.isUserDefined())
return; return;
if (m.isDocumentMaterial()) { removeMaterial(m);
document.getDocumentPreferences().removeMaterial(m);
} else {
Databases.getDatabase(m.getType()).remove(m);
}
model.fireTableDataChanged(); model.fireTableDataChanged();
setButtonStates(); 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() { private void setButtonStates() {