Refactored preset GUI for unit of measure spinners; added launch lug, parachute, and streamer editors.

This commit is contained in:
Doug Pedrick 2012-05-10 23:51:26 +00:00
parent 0eb67f95cb
commit 8a5fd187b6
3 changed files with 1087 additions and 519 deletions

View File

@ -1,6 +1,5 @@
package net.sf.openrocket.gui.preset; package net.sf.openrocket.gui.preset;
import net.miginfocom.swing.MigLayout; import net.miginfocom.swing.MigLayout;
import net.sf.openrocket.gui.util.FileHelper; import net.sf.openrocket.gui.util.FileHelper;
import net.sf.openrocket.gui.util.SwingPreferences; import net.sf.openrocket.gui.util.SwingPreferences;
@ -11,7 +10,14 @@ import net.sf.openrocket.preset.ComponentPreset;
import net.sf.openrocket.preset.xml.OpenRocketComponentSaver; import net.sf.openrocket.preset.xml.OpenRocketComponentSaver;
import net.sf.openrocket.startup.Application; import net.sf.openrocket.startup.Application;
import javax.swing.*; import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableModel; import javax.swing.table.DefaultTableModel;
import javax.xml.bind.JAXBException; import javax.xml.bind.JAXBException;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
@ -25,28 +31,40 @@ import java.util.List;
/** /**
* A UI for editing component presets. Currently this is a standalone application - run the main within this class. * A UI for editing component presets. Currently this is a standalone application - run the main within this class.
* TODO: Full I18n * TODO: Full I18n TODO: Delete component TODO: Open .orc for editing TODO: Import .csv TODO: Export .csv TODO: Menu
* TODO: Delete component
* TODO: Open .orc for editing
* TODO: Import .csv
* TODO: Export .csv
* TODO: proper mass unit conversion
*/ */
public class ComponentPresetPanel extends JPanel implements PresetResultListener { public class ComponentPresetPanel extends JPanel implements PresetResultListener {
/**
* The logger.
*/
private static final LogHelper log = Application.getLogger(); private static final LogHelper log = Application.getLogger();
/**
* The I18N translator.
*/
private static ResourceBundleTranslator trans = null; private static ResourceBundleTranslator trans = null;
/**
* The table of presets.
*/
private JTable table;
/**
* The table's data model.
*/
private DataTableModel model;
/**
* Flag that indicates if an existing Preset is currently being edited.
*/
private boolean editingSelected = false;
static { static {
trans = new ResourceBundleTranslator("l10n.messages"); trans = new ResourceBundleTranslator("l10n.messages");
net.sf.openrocket.startup.Application.setBaseTranslator(trans); net.sf.openrocket.startup.Application.setBaseTranslator(trans);
} }
private JTable table;
private DataTableModel model;
private boolean editingSelected = false;
/** /**
* Create the panel. * Create the panel.
*/ */
@ -113,15 +131,23 @@ public class ComponentPresetPanel extends JPanel implements PresetResultListener
} }
/**
* Callback method from the PresetEditorDialog to notify this class when a preset has been saved. The 'save' is
* really just a call back here so the preset can be added to the master table. It's not to be confused with the
* save to disk.
*
* @param preset the new or modified preset
*/
@Override @Override
public void notifyResult(final ComponentPreset preset) { public void notifyResult(final ComponentPreset preset) {
if (preset != null) { if (preset != null) {
DataTableModel model = (DataTableModel) table.getModel(); DataTableModel model = (DataTableModel) table.getModel();
//Is this a new preset?
if (!editingSelected) { if (!editingSelected) {
model.addRow(new String[]{preset.getManufacturer().getDisplayName(), preset.getType().name(), preset.getPartNo(), preset.get(ComponentPreset.DESCRIPTION)}, model.addRow(new String[]{preset.getManufacturer().getDisplayName(), preset.getType().name(), preset.getPartNo(), preset.get(ComponentPreset.DESCRIPTION)}, preset);
preset);
} }
else { else {
//This is a modified preset; update all of the columns and the stored associated instance.
int row = table.getSelectedRow(); int row = table.getSelectedRow();
model.setValueAt(preset.getManufacturer().getDisplayName(), row, 0); model.setValueAt(preset.getManufacturer().getDisplayName(), row, 0);
model.setValueAt(preset.getType().name(), row, 1); model.setValueAt(preset.getType().name(), row, 1);
@ -150,6 +176,9 @@ public class ComponentPresetPanel extends JPanel implements PresetResultListener
} }
} }
/**
* A table model that adds associated objects to each row, allowing for easy retrieval.
*/
class DataTableModel extends DefaultTableModel { class DataTableModel extends DefaultTableModel {
private List<Object> associated = new ArrayList<Object>(); private List<Object> associated = new ArrayList<Object>();

View File

@ -8,8 +8,9 @@ import net.sf.openrocket.l10n.Translator;
import net.sf.openrocket.material.Material; import net.sf.openrocket.material.Material;
import net.sf.openrocket.startup.Application; import net.sf.openrocket.startup.Application;
import javax.swing.*; import javax.swing.DefaultComboBoxModel;
import java.awt.*; import javax.swing.SwingUtilities;
import java.awt.Component;
/** /**
* A material model specifically for presets. * A material model specifically for presets.
@ -22,9 +23,13 @@ public class MaterialModel extends DefaultComboBoxModel implements DatabaseListe
private static final Translator trans = Application.getTranslator(); private static final Translator trans = Application.getTranslator();
private Material.Type type;
private Component parent; private Component parent;
public MaterialModel(Component theParent, Material.Type type) { public MaterialModel(Component theParent, Material.Type type) {
parent = theParent; parent = theParent;
this.type = type;
switch (type) { switch (type) {
case LINE: case LINE:
@ -59,9 +64,7 @@ public class MaterialModel extends DefaultComboBoxModel implements DatabaseListe
SwingUtilities.invokeLater(new Runnable() { SwingUtilities.invokeLater(new Runnable() {
@Override @Override
public void run() { public void run() {
CustomMaterialDialog dialog = new CustomMaterialDialog( CustomMaterialDialog dialog = new CustomMaterialDialog(SwingUtilities.getWindowAncestor(parent), (Material) getSelectedItem(), true,
SwingUtilities.getWindowAncestor(parent),
(Material) getSelectedItem(), true,
//// Define custom material //// Define custom material
trans.get("MaterialModel.title.Defcustmat")); trans.get("MaterialModel.title.Defcustmat"));
@ -117,4 +120,7 @@ public class MaterialModel extends DefaultComboBoxModel implements DatabaseListe
this.fireContentsChanged(this, 0, database.size()); this.fireContentsChanged(this, 0, database.size());
} }
public Material.Type getType() {
return type;
}
} }

File diff suppressed because it is too large Load Diff