]> git.gag.com Git - debian/openrocket/commitdiff
Constrain preset editor on existing files to only use populated Materials; minor...
authorrodinia814 <rodinia814@180e2498-e6e9-4542-8430-84ac67f01cd8>
Wed, 16 May 2012 02:13:18 +0000 (02:13 +0000)
committerrodinia814 <rodinia814@180e2498-e6e9-4542-8430-84ac67f01cd8>
Wed, 16 May 2012 02:13:18 +0000 (02:13 +0000)
git-svn-id: https://openrocket.svn.sourceforge.net/svnroot/openrocket/trunk@685 180e2498-e6e9-4542-8430-84ac67f01cd8

core/resources-src/datafiles/rocksim_components/semroc/MATERIAL.CSV
core/src/net/sf/openrocket/gui/preset/ComponentPresetEditor.java
core/src/net/sf/openrocket/gui/preset/MaterialModel.java
core/src/net/sf/openrocket/gui/preset/PresetEditorDialog.java
core/src/net/sf/openrocket/gui/print/PrintableComponent.java
core/src/net/sf/openrocket/preset/loader/MaterialHolder.java

index 6ef5c8c6c46e33d2f3e4894abbb23242cdcd1bb1..6de068384e6e9648682fb6fdd0cb66d1d3e93c2b 100644 (file)
@@ -5,3 +5,7 @@ Spiral/Glassine,lb/ft3,53,,,,1,1,1,1,0,1,0,0,1,1,1,1,1,1,,,,,,,,None,0,0
 Fiber,lb/ft3,41,,,,1,0,0,0,0,0,0,0,0,1,1,0,0,0,,,,,,,,None,0,0
 lite ply,lb/ft3,22,,,Composite,1,0,1,0,0,0,0,0,0,1,1,1,0,0,,,,,,,,None,0,0
 Paper,lb/ft3,70,,,,1,1,1,1,0,1,0,1,1,1,1,1,1,1,,,,,,,,None,0,0
+Polyethylene LDPE,lb/ft3,57.7,,,,1,0,0,0,0,0,1,1,0,0,0,0,0,0,,,,,,,,None,0,0
+Rip stop nylon,g/cm2,0.006685,,,,1,0,0,0,0,0,1,1,0,0,0,0,0,0,,,,,,,,None,0,0
+30 Lb. kevlar,g/cm,0.00178,,,,1,0,0,0,1,0,0,0,0,0,0,0,0,0,,,,,,,,None,0,0
+1/16 In. braided nylon,g/cm,0.0102,,,,1,0,0,0,1,0,0,0,0,0,0,0,0,0,,,,,,,,None,0,0
index b7b668ede61696b0f3f57f764839c4d766028734..b70b5f5699001c93cda25fa9c0a6de3234ccb8d0 100644 (file)
@@ -60,12 +60,12 @@ public class ComponentPresetEditor extends JPanel implements PresetResultListene
     /**
      * State variable to keep track of which file was opened, in case it needs to be saved back to that file.
      */
-    private File openedFile = null;
+//    private File openedFile = null;
 
     /**
      * Last directory; file chooser is set here so user doesn't have to keep navigating to a common area.
      */
-    private File lastDirectory = null;
//   private File lastDirectory = null;
 
     /**
      * The table of presets.
@@ -80,7 +80,9 @@ public class ComponentPresetEditor extends JPanel implements PresetResultListene
     /**
      * Flag that indicates if an existing Preset is currently being edited.
      */
-    private boolean editingSelected = false;
+ //   private boolean editingSelected = false;
+
+    private final OpenedFileContext editContext = new OpenedFileContext();
 
     static {
         trans = new ResourceBundleTranslator("l10n.messages");
@@ -131,8 +133,9 @@ public class ComponentPresetEditor extends JPanel implements PresetResultListene
                 else {
                     if (e.getClickCount() == 2) {
                         int row = target.getSelectedRow();
-                        editingSelected = true;
-                        new PresetEditorDialog(ComponentPresetEditor.this, (ComponentPreset) model.getAssociatedObject(row)).setVisible(true);
+                        editContext.setEditingSelected(true);
+                        new PresetEditorDialog(ComponentPresetEditor.this,
+                                (ComponentPreset) model.getAssociatedObject(row), editContext.getMaterialsLoaded()).setVisible(true);
                     }
                 }
             }
@@ -216,7 +219,7 @@ public class ComponentPresetEditor extends JPanel implements PresetResultListene
         addBtn.addMouseListener(new MouseAdapter() {
             @Override
             public void mouseClicked(MouseEvent arg0) {
-                editingSelected = false;
+                editContext.setEditingSelected(false);
                 new PresetEditorDialog(ComponentPresetEditor.this).setVisible(true);
             }
         });
@@ -237,7 +240,7 @@ public class ComponentPresetEditor extends JPanel implements PresetResultListene
             //Is this a new preset?
             String description = preset.has(ComponentPreset.DESCRIPTION) ? preset.get(ComponentPreset.DESCRIPTION) :
                     preset.getPartNo();
-            if (!editingSelected) {
+            if (!editContext.isEditingSelected()|| table.getSelectedRow() == -1) {
                 model.addRow(new Object[]{preset.getManufacturer().getDisplayName(), preset.getType().name(),
                         preset.getPartNo(), description, Icons.EDIT_DELETE}, preset);
             }
@@ -251,7 +254,7 @@ public class ComponentPresetEditor extends JPanel implements PresetResultListene
                 model.associated.set(row, preset);
             }
         }
-        editingSelected = false;
+        editContext.setEditingSelected(false);
     }
 
     /**
@@ -331,8 +334,8 @@ public class ComponentPresetEditor extends JPanel implements PresetResultListene
         chooser.addChoosableFileFilter(FileHelper.CSV_FILE_FILTER);
         chooser.setFileFilter(FileHelper.OPEN_ROCKET_COMPONENT_FILTER);
         chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
-        if (lastDirectory != null) {
-            chooser.setCurrentDirectory(lastDirectory);
+        if (editContext.getLastDirectory() != null) {
+            chooser.setCurrentDirectory(editContext.getLastDirectory());
         }
         else {
             chooser.setCurrentDirectory(((SwingPreferences) Application.getPreferences()).getDefaultDirectory());
@@ -340,7 +343,7 @@ public class ComponentPresetEditor extends JPanel implements PresetResultListene
 
         int option = chooser.showOpenDialog(ComponentPresetEditor.this);
         if (option != JFileChooser.APPROVE_OPTION) {
-            openedFile = null;
+            editContext.setOpenedFile(null);
             log.user("User decided not to open, option=" + option);
             return false;
         }
@@ -352,7 +355,8 @@ public class ComponentPresetEditor extends JPanel implements PresetResultListene
                 return false;
             }
 
-            lastDirectory = file.getParentFile();
+            editContext.setLastDirectory(file.getParentFile());
+            editContext.setMaterialsLoaded(null);
             List<ComponentPreset> presets = null;
 
             if (file.getName().toLowerCase().endsWith(".orc")) {
@@ -364,19 +368,20 @@ public class ComponentPresetEditor extends JPanel implements PresetResultListene
                 }
                 presets = new ArrayList<ComponentPreset>();
                 MaterialHolder materialHolder = RocksimComponentFileTranslator.loadAll(presets, file);
+                editContext.setMaterialsLoaded(materialHolder);
             }
             if (presets != null) {
                 for (ComponentPreset next : presets) {
                     notifyResult(next);
                 }
-                openedFile = file;
+                editContext.setOpenedFile(file);
             }
         }
         catch (Exception e) {
-            e.printStackTrace();
             JOptionPane.showMessageDialog(ComponentPresetEditor.this, "Unable to open OpenRocket component file: " +
                     file.getName() + " Invalid format. " + e.getMessage());
-            openedFile = null;
+            editContext.setOpenedFile(null);
+            editContext.setEditingSelected(false);
             return false;
         }
         return true;
@@ -408,8 +413,8 @@ public class ComponentPresetEditor extends JPanel implements PresetResultListene
         chooser.addChoosableFileFilter(FileHelper.OPEN_ROCKET_COMPONENT_FILTER);
 
         chooser.setFileFilter(FileHelper.OPEN_ROCKET_COMPONENT_FILTER);
-        if (openedFile != null) {
-            chooser.setSelectedFile(openedFile);
+        if (editContext.getOpenedFile() != null) {
+            chooser.setSelectedFile(editContext.getOpenedFile());
         }
         else {
             chooser.setCurrentDirectory(((SwingPreferences) Application.getPreferences()).getDefaultDirectory());
@@ -444,4 +449,56 @@ public class ComponentPresetEditor extends JPanel implements PresetResultListene
 
         return FileHelper.confirmWrite(file, this) && new OpenRocketComponentSaver().save(file, materials, presets);
     }
+
+    class OpenedFileContext {
+
+        /**
+         * State variable to keep track of which file was opened, in case it needs to be saved back to that file.
+         */
+        private File openedFile = null;
+
+        /**
+         * Last directory; file chooser is set here so user doesn't have to keep navigating to a common area.
+         */
+        private File lastDirectory = null;
+
+        private boolean editingSelected = false;
+
+        private MaterialHolder materialsLoaded = null;
+
+        OpenedFileContext() {
+        }
+
+        public File getOpenedFile() {
+            return openedFile;
+        }
+
+        public void setOpenedFile(final File theOpenedFile) {
+            openedFile = theOpenedFile;
+        }
+
+        public File getLastDirectory() {
+            return lastDirectory;
+        }
+
+        public void setLastDirectory(final File theLastDirectory) {
+            lastDirectory = theLastDirectory;
+        }
+
+        public boolean isEditingSelected() {
+            return editingSelected;
+        }
+
+        public void setEditingSelected(final boolean theEditingSelected) {
+            editingSelected = theEditingSelected;
+        }
+
+        public MaterialHolder getMaterialsLoaded() {
+            return materialsLoaded;
+        }
+
+        public void setMaterialsLoaded(final MaterialHolder theMaterialsLoaded) {
+            materialsLoaded = theMaterialsLoaded;
+        }
+    }
 }
index a58370ac9a3d18bfa4ad6c588f4a0b88a86df07c..f51f2146bc8e6a7efbaad0bd94ee62e34baffe73 100644 (file)
@@ -6,6 +6,7 @@ import net.sf.openrocket.database.Databases;
 import net.sf.openrocket.gui.dialogs.CustomMaterialDialog;
 import net.sf.openrocket.l10n.Translator;
 import net.sf.openrocket.material.Material;
+import net.sf.openrocket.preset.loader.MaterialHolder;
 import net.sf.openrocket.startup.Application;
 
 import javax.swing.DefaultComboBoxModel;
@@ -27,9 +28,16 @@ public class MaterialModel extends DefaultComboBoxModel implements DatabaseListe
 
     private Component parent;
 
-    public MaterialModel(Component theParent, Material.Type type) {
+    public MaterialModel(Component theParent, Material.Type theType, Database<Material> materials) {
         parent = theParent;
-        this.type = type;
+        type = theType;
+        database = materials;
+        database.addDatabaseListener(this);
+    }
+
+    public MaterialModel(Component theParent, Material.Type theType) {
+        parent = theParent;
+        type = theType;
 
         switch (type) {
             case LINE:
@@ -123,4 +131,8 @@ public class MaterialModel extends DefaultComboBoxModel implements DatabaseListe
     public Material.Type getType() {
         return type;
     }
+
+    public void removeListener() {
+        database.removeChangeListener(this);
+    }
 }
index 055cf6ba03b014e017d6080be0e7236205892719..00c2c6f5cf769e13c7cfde5e230aed1ab1033e30 100644 (file)
@@ -11,12 +11,15 @@ import net.sf.openrocket.motor.Manufacturer;
 import net.sf.openrocket.preset.ComponentPreset;
 import net.sf.openrocket.preset.ComponentPresetFactory;
 import net.sf.openrocket.preset.InvalidComponentPresetException;
+import net.sf.openrocket.preset.TypedKey;
 import net.sf.openrocket.preset.TypedPropertyMap;
+import net.sf.openrocket.preset.loader.MaterialHolder;
 import net.sf.openrocket.rocketcomponent.Transition;
 import net.sf.openrocket.startup.Application;
 import net.sf.openrocket.unit.UnitGroup;
 
 import javax.imageio.ImageIO;
+import javax.swing.ComboBoxModel;
 import javax.swing.DefaultComboBoxModel;
 import javax.swing.ImageIcon;
 import javax.swing.InputVerifier;
@@ -74,7 +77,8 @@ public class PresetEditorDialog extends JDialog implements ItemListener {
     private final JPanel contentPanel = new JPanel();
     private DeselectableComboBox typeCombo;
     private JTextField mfgTextField;
-    private JComboBox materialChooser;
+    private MaterialChooser materialChooser;
+    private MaterialHolder holder = null;
 
     private JTextField ncPartNoTextField;
     private JTextField ncDescTextField;
@@ -171,7 +175,7 @@ public class PresetEditorDialog extends JDialog implements ItemListener {
     private JTextField pcLineCount;
     private DoubleModel pcDiameter;
     private DoubleModel pcLineLength;
-    private JComboBox pcLineMaterialChooser;
+    private MaterialChooser pcLineMaterialChooser;
     private DoubleModel pcMass;
     private ImageIcon pcImage;
     private JButton pcImageBtn;
@@ -215,7 +219,7 @@ public class PresetEditorDialog extends JDialog implements ItemListener {
      * @param theCallback the listener that gets the results of editing the presets
      */
     public PresetEditorDialog(PresetResultListener theCallback) {
-        this(theCallback, null);
+        this(theCallback, null, null);
     }
 
     /**
@@ -223,8 +227,9 @@ public class PresetEditorDialog extends JDialog implements ItemListener {
      *
      * @param theCallback the listener that gets the results of editing the presets
      * @param toEdit      the ComponentPreset to be edited; or null if a new one is being added
+     * @param matHolder   the set of materials; if null then use system materials
      */
-    public PresetEditorDialog(PresetResultListener theCallback, ComponentPreset toEdit) {
+    public PresetEditorDialog(PresetResultListener theCallback, ComponentPreset toEdit, MaterialHolder matHolder) {
         resultListener = theCallback;
         getContentPane().setMinimumSize(new Dimension(200, 200));
         setBounds(100, 100, 825, 610);
@@ -255,7 +260,7 @@ public class PresetEditorDialog extends JDialog implements ItemListener {
         JLabel bhMaterialLabel = new JLabel("Material:");
         contentPanel.add(bhMaterialLabel, "cell 2 2, alignx left");
 
-        materialChooser = new JComboBox(new MaterialModel(this, Material.Type.BULK));
+        materialChooser = new MaterialChooser(new MaterialModel(this, Material.Type.BULK));
 
         contentPanel.add(materialChooser, "cell 3 2,growx");
 
@@ -413,7 +418,7 @@ public class PresetEditorDialog extends JDialog implements ItemListener {
             spin = new JSpinner(trAftDia.getSpinnerModel());
             spin.setEditor(new SpinnerEditor(spin));
             trPanel.add(spin, "cell 1 3, growx");
-            trPanel.add(new UnitSelector(trAftDia));
+            trPanel.add(new UnitSelector(trAftDia), "growx");
 
             JLabel trForeDiaLabel = new JLabel("Fore Dia.:");
             trPanel.add(trForeDiaLabel, "cell 3 3,alignx left");
@@ -1028,7 +1033,6 @@ public class PresetEditorDialog extends JDialog implements ItemListener {
             JPanel pcPanel = new JPanel();
             componentOverlayPanel.add(pcPanel, "PARACHUTE");
             pcPanel.setLayout(new MigLayout("", "[][157.00,grow 79][65.00][grow][][]", "[][][][][][]"));
-            //pcPanel.setLayout(new MigLayout("", "[][grow][][grow]", "[][][][]"));
             JLabel pcPartNoLabel = new JLabel("Part No:");
             pcPanel.add(pcPartNoLabel, "cell 0 0,alignx left");
 
@@ -1089,7 +1093,7 @@ public class PresetEditorDialog extends JDialog implements ItemListener {
             JLabel pcLineMaterialLabel = new JLabel("Line Material:");
             pcPanel.add(pcLineMaterialLabel, "cell 3 4,alignx left, aligny top, pad 7 0 0 0 ");
 
-            pcLineMaterialChooser = new JComboBox();
+            pcLineMaterialChooser = new MaterialChooser();
             pcLineMaterialChooser.setModel(new MaterialModel(PresetEditorDialog.this, Material.Type.LINE));
             pcPanel.add(pcLineMaterialChooser, "cell 4 4, span 3 1, growx, aligny top");
 
@@ -1151,8 +1155,9 @@ public class PresetEditorDialog extends JDialog implements ItemListener {
         buttonPane.add(cancelButton, "cell 6 0,alignx right,aligny top");
 
         if (toEdit != null) {
-            fillEditor(toEdit);
+            fillEditor(toEdit, matHolder);
         }
+        holder = matHolder;
     }
 
     /**
@@ -1187,17 +1192,6 @@ public class PresetEditorDialog extends JDialog implements ItemListener {
         chooser.addPropertyChangeListener(preview);
         chooser.setAcceptAllFileFilterUsed(false);
         chooser.addChoosableFileFilter(new FileNameExtensionFilter("Image Files", "png", "jpg", "jpeg"));
-        /*{
-            @Override
-            public boolean accept(final File f) {
-                return f.getName().endsWith(".png") || f.getName().endsWith(".jpg");
-            }
-
-            @Override
-            public String getDescription() {
-                return "Image Files";
-            }
-        });*/
         return chooser;
     }
 
@@ -1206,12 +1200,11 @@ public class PresetEditorDialog extends JDialog implements ItemListener {
      *
      * @param preset the preset to edit
      */
-    private void fillEditor(ComponentPreset preset) {
+    private void fillEditor(ComponentPreset preset, MaterialHolder holder) {
         ComponentPreset.Type t = preset.getType();
 
         mfgTextField.setText(preset.get(ComponentPreset.MANUFACTURER).getDisplayName());
-        materialChooser.setModel(new MaterialModel(PresetEditorDialog.this, Material.Type.BULK));
-        materialChooser.getModel().setSelectedItem(preset.get(ComponentPreset.MATERIAL));
+        setMaterial(materialChooser, preset, holder, Material.Type.BULK, ComponentPreset.MATERIAL);
         switch (t) {
             case BODY_TUBE:
                 typeCombo.setSelectedItem(trans.get(BODY_TUBE_KEY));
@@ -1443,8 +1436,7 @@ public class PresetEditorDialog extends JDialog implements ItemListener {
                 }
                 break;
             case PARACHUTE:
-                materialChooser.setModel(new MaterialModel(PresetEditorDialog.this, Material.Type.SURFACE));
-                materialChooser.getModel().setSelectedItem(preset.get(ComponentPreset.MATERIAL));
+                setMaterial(materialChooser, preset, holder, Material.Type.SURFACE, ComponentPreset.MATERIAL);
                 typeCombo.setSelectedItem(trans.get(PARACHUTE_KEY));
                 pcDescTextField.setText(preset.get(ComponentPreset.DESCRIPTION));
                 if (preset.has(ComponentPreset.LINE_COUNT)) {
@@ -1470,11 +1462,13 @@ public class PresetEditorDialog extends JDialog implements ItemListener {
                     pcImage = new ImageIcon(byteArrayToImage(preset.get(ComponentPreset.IMAGE)));
                     pcImageBtn.setIcon(pcImage);
                 }
-                pcLineMaterialChooser.getModel().setSelectedItem(preset.get(ComponentPreset.LINE_MATERIAL));
+                setMaterial(pcLineMaterialChooser, preset, holder, Material.Type.LINE, ComponentPreset.LINE_MATERIAL);
+//                pcLineMaterialChooser.setModel(new MaterialModel(PresetEditorDialog.this, Material.Type.LINE));
+
+//                pcLineMaterialChooser.getModel().setSelectedItem(preset.get(ComponentPreset.LINE_MATERIAL));
                 break;
             case STREAMER:
-                materialChooser.setModel(new MaterialModel(PresetEditorDialog.this, Material.Type.SURFACE));
-                materialChooser.getModel().setSelectedItem(preset.get(ComponentPreset.MATERIAL));
+                setMaterial(materialChooser, preset, holder, Material.Type.SURFACE, ComponentPreset.MATERIAL);
                 typeCombo.setSelectedItem(trans.get(STREAMER_KEY));
                 stDescTextField.setText(preset.get(ComponentPreset.DESCRIPTION));
                 if (preset.has(ComponentPreset.LENGTH)) {
@@ -1503,6 +1497,20 @@ public class PresetEditorDialog extends JDialog implements ItemListener {
         }
     }
 
+    private void setMaterial(final JComboBox chooser, final ComponentPreset preset, final MaterialHolder holder,
+                             final Material.Type theType, final TypedKey key) {
+        if (holder == null) {
+            chooser.setModel(new MaterialModel(PresetEditorDialog.this, theType));
+        }
+        else {
+            chooser.setModel(new MaterialModel(PresetEditorDialog.this, theType,
+                    holder.asDatabase(theType)));
+        }
+        if (preset != null) {
+            chooser.getModel().setSelectedItem(preset.get(key));
+        }
+    }
+
     /**
      * Extract the preset data from the UI fields, create a ComponentPreset instance, and notify the listener.
      */
@@ -2053,12 +2061,12 @@ public class PresetEditorDialog extends JDialog implements ItemListener {
         if (materialChooser != null && evt.getStateChange() == ItemEvent.SELECTED) {
             if (item.equals(trans.get(PARACHUTE_KEY)) || item.equals(trans.get(STREAMER_KEY))) {
                 if (!((MaterialModel) materialChooser.getModel()).getType().equals(Material.Type.SURFACE)) {
-                    materialChooser.setModel(new MaterialModel(PresetEditorDialog.this, Material.Type.SURFACE));
+                    setMaterial(materialChooser, null, holder, Material.Type.SURFACE, ComponentPreset.MATERIAL);
                 }
             }
             else {
                 if (!((MaterialModel) materialChooser.getModel()).getType().equals(Material.Type.BULK)) {
-                    materialChooser.setModel(new MaterialModel(PresetEditorDialog.this, Material.Type.BULK));
+                    setMaterial(materialChooser, null, holder, Material.Type.BULK, ComponentPreset.MATERIAL);
                 }
             }
         }
@@ -2191,4 +2199,30 @@ public class PresetEditorDialog extends JDialog implements ItemListener {
             return true;
         }
     }
+
+    class MaterialChooser extends JComboBox {
+
+        public MaterialChooser() {
+        }
+        public MaterialChooser(MaterialModel model) {
+            super(model);
+        }
+
+        /**
+         * Sets the data model that the <code>JComboBox</code> uses to obtain the list of items.
+         *
+         * @param aModel the <code>ComboBoxModel</code> that provides the displayed list of items
+         *
+         * @beaninfo bound: true description: Model that the combo box uses to get data to display.
+         */
+        @Override
+        public void setModel(final ComboBoxModel aModel) {
+            if (getModel() instanceof MaterialModel) {
+                MaterialModel old = (MaterialModel) getModel();
+                old.removeListener();
+            }
+            super.setModel(aModel);
+
+        }
+    }
 }
index 384217a5993f95753e7d4cc3d69e2c686b28adf2..10e5c803e37f3554fe8f4dc28bb3d3ff63621b7f 100644 (file)
@@ -3,7 +3,6 @@
  */
 package net.sf.openrocket.gui.print;
 
-import java.awt.Color;
 import java.awt.Graphics;
 import java.awt.Graphics2D;
 import java.awt.print.PageFormat;
@@ -14,7 +13,7 @@ import javax.swing.JPanel;
 
 /**
  * Common interface for components we want to print. Used by PageFitPrintStrategy
- * 
+ *
  * @author Jason Blood <dyster2000@gmail.com>
  */
 public class PrintableComponent extends JPanel implements Printable {
@@ -24,7 +23,7 @@ public class PrintableComponent extends JPanel implements Printable {
      */
     private int offsetX = 0;
     private int offsetY = 0;
-       
+
     /**
      * Constructor.
      */
@@ -67,17 +66,17 @@ public class PrintableComponent extends JPanel implements Printable {
         PrintUtilities.enableDoubleBuffering(this);
         return Printable.PAGE_EXISTS;
     }
-       
+
        /**
         * Set the offset this component will be printed to the page
         * @param x     X offset to print at.
-        * @param x     Y offset to print at.
+        * @param y     Y offset to print at.
         */
        public void setPrintOffset(int x, int y) {
         offsetX = x;
         offsetY = y;
        }
-       
+
        /**
         * Get the X offset this component will be printed to the page
         * @return X offset to print at.
@@ -85,7 +84,7 @@ public class PrintableComponent extends JPanel implements Printable {
        public int getOffsetX() {
                return offsetX;
        }
-       
+
        /**
         * Get the Y offset this component will be printed to the page
         * @return Y offset to print at.
index 7ac24592dc50896079e0c1efeefdfb13c7a4e112..1e0f1ed2173cb42a70fb4d59ac9268661ae89615 100644 (file)
@@ -5,17 +5,18 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
 
+import net.sf.openrocket.database.Database;
 import net.sf.openrocket.material.Material;
 import net.sf.openrocket.unit.UnitGroup;
 
 public class MaterialHolder {
 
        private final Map<String,Material.Bulk> bulkMaterials = new HashMap<String,Material.Bulk>();
-       
+
        private final Map<String,Material.Surface> surfaceMaterials = new HashMap<String,Material.Surface>();
-       
+
        private final Map<String, Material.Line> lineMaterials = new HashMap<String,Material.Line>();
-       
+
        public void put( Material material ) {
                switch ( material.getType() ) {
                case BULK:
@@ -29,12 +30,12 @@ public class MaterialHolder {
                        break;
                }
        }
-       
+
        public Material.Bulk getBulkMaterial( Material.Bulk material ) {
                Material.Bulk m = bulkMaterials.get( material.getName() );
                return (m==null) ? material : m;
        }
-       
+
        public Material.Surface getSurfaceMaterial( Material.Surface material, Double thickness ) {
                Material.Surface m = surfaceMaterials.get(material.getName() );
                if ( m != null ) {
@@ -52,39 +53,55 @@ public class MaterialHolder {
                        return m;
                }
                Material.Bulk bulk = bulkMaterials.get(material.getName() );
-               
+
                if ( bulk == null ) {
                        return material;
                }
-               
+
                // Ok, now we have a thickness and a bulk material of the correct name,
                // we can make our own surface material.
-               
+
                Material.Surface surface = new Material.Surface( convertedMaterialName, bulk.getDensity() * thickness , true);
-               
+
                this.put(surface);
 
                return surface;
-               
+
        }
-       
+
        public Material.Line getLineMaterial( Material.Line material ) {
                Material.Line m = lineMaterials.get( material.getName() );
                return (m==null) ? material : m;
        }
-       
+
        public int size() {
                return bulkMaterials.size() + surfaceMaterials.size() + lineMaterials.size();
        }
 
        public Collection<Material> values() {
-               
+
                HashSet<Material> allMats = new HashSet<Material>();
                allMats.addAll( bulkMaterials.values() );
                allMats.addAll( surfaceMaterials.values() );
                allMats.addAll( lineMaterials.values() );
-               
+
                return allMats;
-               
+
        }
+
+    public Database<Material> asDatabase(Material.Type theType) {
+        Database<Material> result = new Database<Material>();
+        switch (theType) {
+            case LINE:
+                result.addAll(lineMaterials.values());
+                break;
+            case SURFACE:
+                result.addAll(surfaceMaterials.values());
+                break;
+            case BULK:
+            default:
+                result.addAll(bulkMaterials.values());
+        }
+        return result;
+    }
 }