1 package net.sf.openrocket.gui.configdialog;
3 import java.awt.event.ActionEvent;
4 import java.awt.event.ActionListener;
6 import javax.swing.JButton;
7 import javax.swing.SwingUtilities;
9 import net.sf.openrocket.rocketcomponent.FinSet;
10 import net.sf.openrocket.rocketcomponent.FreeformFinSet;
11 import net.sf.openrocket.rocketcomponent.RocketComponent;
14 public abstract class FinSetConfig extends RocketComponentConfig {
16 private JButton split = null;
18 public FinSetConfig(RocketComponent component) {
24 protected void addFinSetButtons() {
28 if (!(component instanceof FreeformFinSet)) {
29 convert = new JButton("Convert to freeform");
30 convert.setToolTipText("Convert this fin set into a freeform fin set");
31 convert.addActionListener(new ActionListener() {
33 public void actionPerformed(ActionEvent e) {
34 // Do change in future for overall safety
35 SwingUtilities.invokeLater(new Runnable() {
38 FreeformFinSet freeform = new FreeformFinSet((FinSet)component);
39 String name = component.getComponentName();
41 if (freeform.getName().startsWith(name)) {
42 freeform.setName(freeform.getComponentName() +
43 freeform.getName().substring(name.length()));
46 RocketComponent parent = component.getParent();
47 int index = parent.getChildPosition(component);
49 ComponentConfigDialog.addUndoPosition("Convert fin set");
50 parent.removeChild(index);
51 parent.addChild(freeform, index);
52 ComponentConfigDialog.showDialog(freeform);
56 ComponentConfigDialog.hideDialog();
61 split = new JButton("Split fins");
62 split.setToolTipText("Split the fin set into separate fins");
63 split.addActionListener(new ActionListener() {
65 public void actionPerformed(ActionEvent e) {
66 // Do change in future for overall safety
67 SwingUtilities.invokeLater(new Runnable() {
70 RocketComponent parent = component.getParent();
71 int index = parent.getChildPosition(component);
72 int count = ((FinSet)component).getFinCount();
73 double base = ((FinSet)component).getBaseRotation();
77 ComponentConfigDialog.addUndoPosition("Split fin set");
78 parent.removeChild(index);
79 for (int i=0; i<count; i++) {
80 FinSet copy = (FinSet)component.copy();
82 copy.setBaseRotation(base + i*2*Math.PI/count);
83 copy.setName(copy.getName() + " #" + (i+1));
84 parent.addChild(copy, index+i);
89 ComponentConfigDialog.hideDialog();
92 split.setEnabled(((FinSet)component).getFinCount() > 1);
97 addButtons(split,convert);
103 public void updateFields() {
104 super.updateFields();
106 split.setEnabled(((FinSet)component).getFinCount() > 1);