create changelog entry
[debian/openrocket] / core / src / net / sf / openrocket / gui / configdialog / RocketComponentConfig.java
index 2a782d1513515c3370e5d88038f30b70d80f5483..c2fbd63ec362ca22ae2c83e5d836ae264e56c751 100644 (file)
@@ -25,12 +25,14 @@ import javax.swing.JTextArea;
 import javax.swing.JTextField;
 
 import net.miginfocom.swing.MigLayout;
+import net.sf.openrocket.database.ComponentPresetDatabase;
 import net.sf.openrocket.document.OpenRocketDocument;
 import net.sf.openrocket.gui.SpinnerEditor;
 import net.sf.openrocket.gui.adaptors.BooleanModel;
 import net.sf.openrocket.gui.adaptors.DoubleModel;
 import net.sf.openrocket.gui.adaptors.EnumModel;
 import net.sf.openrocket.gui.adaptors.MaterialModel;
+import net.sf.openrocket.gui.adaptors.PresetModel;
 import net.sf.openrocket.gui.components.BasicSlider;
 import net.sf.openrocket.gui.components.ColorIcon;
 import net.sf.openrocket.gui.components.StyledLabel;
@@ -41,6 +43,7 @@ import net.sf.openrocket.gui.util.GUIUtil;
 import net.sf.openrocket.gui.util.SwingPreferences;
 import net.sf.openrocket.l10n.Translator;
 import net.sf.openrocket.material.Material;
+import net.sf.openrocket.preset.ComponentPreset;
 import net.sf.openrocket.rocketcomponent.ComponentAssembly;
 import net.sf.openrocket.rocketcomponent.ExternalComponent;
 import net.sf.openrocket.rocketcomponent.ExternalComponent.Finish;
@@ -61,6 +64,8 @@ public class RocketComponentConfig extends JPanel {
        
        private final List<Invalidatable> invalidatables = new ArrayList<Invalidatable>();
        
+       private JComboBox presetComboBox;
+       private PresetModel presetModel;
        
        protected final JTextField componentNameField;
        protected JTextArea commentTextArea;
@@ -69,11 +74,11 @@ public class RocketComponentConfig extends JPanel {
        private JCheckBox colorDefault;
        private JPanel buttonPanel;
        
-       private JLabel massLabel;
+       private JLabel infoLabel;
        
        
        public RocketComponentConfig(OpenRocketDocument document, RocketComponent component) {
-               setLayout(new MigLayout("fill", "[grow, fill]"));
+               setLayout(new MigLayout("fill", "[min,align right]:10[fill, grow]"));
                this.document = document;
                this.component = component;
                
@@ -81,7 +86,7 @@ public class RocketComponentConfig extends JPanel {
                JLabel label = new JLabel(trans.get("RocketCompCfg.lbl.Componentname"));
                //// The component name.
                label.setToolTipText(trans.get("RocketCompCfg.ttip.Thecomponentname"));
-               this.add(label, "split, gapright 10");
+               this.add(label, "spanx, split");
                
                componentNameField = new JTextField(15);
                textFieldListener = new TextFieldListener();
@@ -89,11 +94,20 @@ public class RocketComponentConfig extends JPanel {
                componentNameField.addFocusListener(textFieldListener);
                //// The component name.
                componentNameField.setToolTipText(trans.get("RocketCompCfg.ttip.Thecomponentname"));
-               this.add(componentNameField, "growx, growy 0, wrap");
+               this.add(componentNameField, "growx");
+               
+               if (component.getPresetType() != null) {
+                       // If the component supports a preset, show the preset selection box.
+                       presetModel = new PresetModel(this, document, component);
+                       ((ComponentPresetDatabase) Application.getComponentPresetDao()).addDatabaseListener(presetModel);
+                       presetComboBox = new JComboBox(presetModel);
+                       presetComboBox.setEditable(false);
+                       this.add(presetComboBox, "");
+               }
                
                
                tabbedPane = new JTabbedPane();
-               this.add(tabbedPane, "growx, growy 1, wrap");
+               this.add(tabbedPane, "newline, span, growx, growy 1, wrap");
                
                //// Override and Mass and CG override options
                tabbedPane.addTab(trans.get("RocketCompCfg.tab.Override"), null, overrideTab(),
@@ -120,8 +134,8 @@ public class RocketComponentConfig extends JPanel {
                buttonPanel = new JPanel(new MigLayout("fill, ins 0"));
                
                //// Mass:
-               massLabel = new StyledLabel(trans.get("RocketCompCfg.lbl.Mass") + " ", -1);
-               buttonPanel.add(massLabel, "growx");
+               infoLabel = new StyledLabel(" ", -1);
+               buttonPanel.add(infoLabel, "growx");
                
                for (JButton b : buttons) {
                        buttonPanel.add(b, "right, gap para");
@@ -159,33 +173,38 @@ public class RocketComponentConfig extends JPanel {
                                colorDefault.setSelected(component.getColor() == null);
                }
                
-               // Mass label
+               // Info label
+               StringBuilder sb = new StringBuilder();
+               
+               if (component.getPresetComponent() != null) {
+                       ComponentPreset preset = component.getPresetComponent();
+                       sb.append(preset.getManufacturer() + " " + preset.getPartNo() + "      ");
+               }
+               
                if (component.isMassive()) {
-                       //// Component mass:
-                       String text = trans.get("RocketCompCfg.lbl.Componentmass") + " ";
-                       text += UnitGroup.UNITS_MASS.getDefaultUnit().toStringUnit(
-                                       component.getComponentMass());
+                       sb.append(trans.get("RocketCompCfg.lbl.Componentmass") + " ");
+                       sb.append(UnitGroup.UNITS_MASS.getDefaultUnit().toStringUnit(
+                                       component.getComponentMass()));
                        
                        String overridetext = null;
                        if (component.isMassOverridden()) {
-                               //// (overridden to 
                                overridetext = trans.get("RocketCompCfg.lbl.overriddento") + " " + UnitGroup.UNITS_MASS.getDefaultUnit().
                                                toStringUnit(component.getOverrideMass()) + ")";
                        }
                        
                        for (RocketComponent c = component.getParent(); c != null; c = c.getParent()) {
                                if (c.isMassOverridden() && c.getOverrideSubcomponents()) {
-                                       ///// (overridden by
                                        overridetext = trans.get("RocketCompCfg.lbl.overriddenby") + " " + c.getName() + ")";
                                }
                        }
                        
-                       if (overridetext != null)
-                               text = text + " " + overridetext;
+                       if (overridetext != null) {
+                               sb.append(" " + overridetext);
+                       }
                        
-                       massLabel.setText(text);
+                       infoLabel.setText(sb.toString());
                } else {
-                       massLabel.setText("");
+                       infoLabel.setText("");
                }
        }
        
@@ -198,6 +217,7 @@ public class RocketComponentConfig extends JPanel {
        
        protected JPanel materialPanel(JPanel panel, Material.Type type,
                        String materialString, String finishString) {
+               
                JLabel label = new JLabel(materialString);
                //// The component material affects the weight of the component.
                label.setToolTipText(trans.get("RocketCompCfg.lbl.ttip.componentmaterialaffects"));
@@ -636,6 +656,8 @@ public class RocketComponentConfig extends JPanel {
                for (Invalidatable i : invalidatables) {
                        i.invalidate();
                }
+               ((ComponentPresetDatabase) Application.getComponentPresetDao()).removeChangeListener(presetModel);
+               
        }
        
 }
\ No newline at end of file