Constrain preset editor on existing files to only use populated Materials; minor other cleanup.
This commit is contained in:
parent
00696ce7a3
commit
ed629bd227
@ -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
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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.
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user