Refactored preset GUI for unit of measure spinners; added launch lug, parachute, and streamer editors.
This commit is contained in:
parent
0eb67f95cb
commit
8a5fd187b6
@ -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>();
|
||||||
|
@ -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
Loading…
x
Reference in New Issue
Block a user