1 package net.sf.openrocket.gui.preset;
3 import net.sf.openrocket.database.Database;
4 import net.sf.openrocket.database.DatabaseListener;
5 import net.sf.openrocket.database.Databases;
6 import net.sf.openrocket.gui.dialogs.CustomMaterialDialog;
7 import net.sf.openrocket.l10n.Translator;
8 import net.sf.openrocket.material.Material;
9 import net.sf.openrocket.startup.Application;
15 * A material model specifically for presets.
17 public class MaterialModel extends DefaultComboBoxModel implements DatabaseListener<Material> {
19 private static final String CUSTOM = "Custom";
21 private final Database<Material> database;
23 private static final Translator trans = Application.getTranslator();
25 private Component parent;
26 public MaterialModel(Component theParent, Material.Type type) {
31 this.database = Databases.LINE_MATERIAL;
35 this.database = Databases.BULK_MATERIAL;
39 this.database = Databases.SURFACE_MATERIAL;
43 throw new IllegalArgumentException("Unknown material type:" + type);
46 database.addDatabaseListener(this);
50 public void setSelectedItem(Object item) {
52 // Clear selection - huh?
58 // Open custom material dialog in the future, after combo box has closed
59 SwingUtilities.invokeLater(new Runnable() {
62 CustomMaterialDialog dialog = new CustomMaterialDialog(
63 SwingUtilities.getWindowAncestor(parent),
64 (Material) getSelectedItem(), true,
65 //// Define custom material
66 trans.get("MaterialModel.title.Defcustmat"));
68 dialog.setVisible(true);
70 if (!dialog.getOkClicked()) {
74 Material material = dialog.getMaterial();
75 MaterialModel.super.setSelectedItem(material);
76 if (dialog.isAddSelected()) {
77 database.add(material);
83 else if (item instanceof Material) {
84 super.setSelectedItem(item);
87 throw new IllegalArgumentException("Illegal item class " + item.getClass() +
93 public Object getElementAt(int index) {
94 if (index == database.size()) {
97 else if (index >= database.size() + 1) {
100 return database.get(index);
104 public int getSize() {
105 return database.size() + 1;
108 //////// Change listeners
111 public void elementAdded(Material element, Database<Material> source) {
112 this.fireContentsChanged(this, 0, database.size());
116 public void elementRemoved(Material element, Database<Material> source) {
117 this.fireContentsChanged(this, 0, database.size());