Updates for 0.9.5
[debian/openrocket] / src / net / sf / openrocket / gui / adaptors / MotorConfigurationModel.java
index 9f96997c637268d4fced6b015def952b4fd206fe..5c01348747136b6b51432686772c313d490a34de 100644 (file)
@@ -1,44 +1,22 @@
 package net.sf.openrocket.gui.adaptors;
 
 
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.Map;
 
 import javax.swing.ComboBoxModel;
-import javax.swing.JButton;
-import javax.swing.JDialog;
-import javax.swing.JFrame;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.JTable;
-import javax.swing.JTextField;
-import javax.swing.ListSelectionModel;
 import javax.swing.SwingUtilities;
 import javax.swing.event.ChangeEvent;
 import javax.swing.event.ChangeListener;
 import javax.swing.event.EventListenerList;
 import javax.swing.event.ListDataEvent;
 import javax.swing.event.ListDataListener;
-import javax.swing.event.ListSelectionEvent;
-import javax.swing.event.ListSelectionListener;
 
-import net.miginfocom.swing.MigLayout;
-import net.sf.openrocket.gui.TextFieldListener;
-import net.sf.openrocket.gui.components.ResizeLabel;
+import net.sf.openrocket.gui.dialogs.EditMotorConfigurationDialog;
+import net.sf.openrocket.gui.main.BasicFrame;
 import net.sf.openrocket.rocketcomponent.ComponentChangeEvent;
 import net.sf.openrocket.rocketcomponent.Configuration;
-import net.sf.openrocket.rocketcomponent.Motor;
-import net.sf.openrocket.rocketcomponent.MotorMount;
 import net.sf.openrocket.rocketcomponent.Rocket;
-import net.sf.openrocket.rocketcomponent.RocketComponent;
-import net.sf.openrocket.util.GUIUtil;
 
 public class MotorConfigurationModel implements ComboBoxModel, ChangeListener {
 
@@ -85,26 +63,26 @@ public class MotorConfigurationModel implements ComboBoxModel, ChangeListener {
 
        @Override
        public void setSelectedItem(Object item) {
+               if (item == null) {
+                       // Clear selection - huh?
+                       return;
+               }
                if (item == EDIT) {
                        
                        // Open edit dialog in the future, after combo box has closed
                        SwingUtilities.invokeLater(new Runnable() {
                                @Override
                                public void run() {
-                                       EditConfigurationDialog dialog = new EditConfigurationDialog();
-                                       dialog.setVisible(true);
-                                       
-                                       if (dialog.isRowSelected()) {
-                                               rocket.getDefaultConfiguration().setMotorConfigurationID(
-                                                               dialog.getSelectedID());
-                                       }
+                                       new EditMotorConfigurationDialog(rocket, BasicFrame.findFrame(rocket))
+                                               .setVisible(true);
                                }
                        });
 
                        return;
                }
-               if (!(item instanceof ID))
-                       return;
+               if (!(item instanceof ID)) {
+                       throw new IllegalArgumentException("MotorConfigurationModel item="+item);
+               }
                
                ID idObject = (ID) item;
                config.setMotorConfigurationID(idObject.getID());
@@ -181,200 +159,7 @@ public class MotorConfigurationModel implements ComboBoxModel, ChangeListener {
                
                @Override
                public String toString() {
-                       return rocket.getMotorConfigurationDescription(id);
-               }
-       }
-       
-       
-       private class EditConfigurationDialog extends JDialog {
-               private final ColumnTableModel tableModel;
-               private String[] ids;
-               int selection = -1;
-               
-               private final JButton addButton;
-               private final JButton removeButton;
-               private final JTextField nameField;
-               
-               private final JTable table;
-               
-               
-               public boolean isRowSelected() {
-                       return selection >= 0;
-               }
-               
-               public String getSelectedID() {
-                       if (selection >= 0)
-                               return ids[selection];
-                       return null;
-               }
-               
-               
-               public EditConfigurationDialog() {
-                       super((JFrame)null, "Edit configurations", true);
-
-                       ids = rocket.getMotorConfigurationIDs();
-                       
-                       // Create columns
-                       ArrayList<Column> columnList = new ArrayList<Column>();
-                       columnList.add(new Column("Name") {
-                               @Override
-                               public Object getValueAt(int row) {
-                                       return rocket.getMotorConfigurationDescription(ids[row]);
-                               }
-                       });
-                       
-                       // Create columns from the motor mounts
-                       Iterator<RocketComponent> iterator = rocket.deepIterator();
-                       while (iterator.hasNext()) {
-                               RocketComponent c = iterator.next();
-                               if (!(c instanceof MotorMount))
-                                       continue;
-                               
-                               final MotorMount mount = (MotorMount)c;
-                               if (!mount.isMotorMount())
-                                       continue;
-                               
-                               Column col = new Column(c.getName()) {
-                                       @Override
-                                       public Object getValueAt(int row) {
-                                               Motor motor = mount.getMotor(ids[row]);
-                                               if (motor == null)
-                                                       return "";
-                                               return motor.getDesignation(mount.getMotorDelay(ids[row]));
-                                       }
-                               };
-                               columnList.add(col);
-                       }
-                       tableModel = new ColumnTableModel(columnList.toArray(new Column[0])) {
-                               @Override
-                               public int getRowCount() {
-                                       return ids.length;
-                               }
-                       };
-
-                       
-                       
-                       // Create the panel
-                       JPanel panel = new JPanel(new MigLayout("fill","[shrink][grow]"));
-                       
-                       
-                       panel.add(new JLabel("Configuration name:"), "gapright para");
-                       nameField = new JTextField();
-                       new TextFieldListener() {
-                               @Override
-                               public void setText(String text) {
-                                       if (selection < 0 || ids[selection] == null)
-                                               return;
-                                       rocket.setMotorConfigurationName(ids[selection], text);
-                                       fireChange();
-                               }
-                       }.listenTo(nameField);
-                       panel.add(nameField, "growx, wrap");
-                       
-                       panel.add(new ResizeLabel("Leave empty for default description", -2), 
-                                       "skip, growx, wrap para");
-                       
-                       
-                       table = new JTable(tableModel);
-                       table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
-                       table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
-                               @Override
-                               public void valueChanged(ListSelectionEvent e) {
-                                       updateSelection();
-                               }
-                       });
-
-                       // Mouse listener to act on double-clicks
-                       table.addMouseListener(new MouseAdapter() {
-                               @Override
-                               public void mouseClicked(MouseEvent e) {
-                                       if (e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() == 2) {
-                                               EditConfigurationDialog.this.dispose();
-                                       }
-                               }
-                       });
-                        
-                       
-                       
-                       JScrollPane scrollpane = new JScrollPane(table);
-                       panel.add(scrollpane, "spanx, height 150lp, width 400lp, grow, wrap");
-                       
-                       
-                       addButton = new JButton("New");
-                       addButton.addActionListener(new ActionListener() {
-                               @Override
-                               public void actionPerformed(ActionEvent e) {
-                                       String id = rocket.newMotorConfigurationID();
-                                       ids = rocket.getMotorConfigurationIDs();
-                                       tableModel.fireTableDataChanged();
-                                       int sel;
-                                       for (sel=0; sel < ids.length; sel++) {
-                                               if (id.equals(ids[sel]))
-                                                       break;
-                                       }
-                                       table.getSelectionModel().addSelectionInterval(sel, sel);
-                               }
-                       });
-                       panel.add(addButton, "growx, spanx, split 2");
-                       
-                       removeButton = new JButton("Remove");
-                       removeButton.addActionListener(new ActionListener() {
-                               @Override
-                               public void actionPerformed(ActionEvent e) {
-                                       int sel = table.getSelectedRow();
-                                       if (sel < 0 || sel >= ids.length || ids[sel] == null)
-                                               return;
-                                       rocket.removeMotorConfigurationID(ids[sel]);
-                                       ids = rocket.getMotorConfigurationIDs();
-                                       tableModel.fireTableDataChanged();
-                                       if (sel >= ids.length)
-                                               sel--;
-                                       table.getSelectionModel().addSelectionInterval(sel, sel);
-                               }
-                       });
-                       panel.add(removeButton, "growx, wrap para");
-                       
-                       
-                       JButton close = new JButton("Close");
-                       close.addActionListener(new ActionListener() {
-                               @Override
-                               public void actionPerformed(ActionEvent e) {
-                                       EditConfigurationDialog.this.dispose();
-                               }
-                       });
-                       panel.add(close, "spanx, alignx 100%");
-                       
-                       this.getRootPane().setDefaultButton(close);
-                       
-                       
-                       this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
-                       GUIUtil.installEscapeCloseOperation(this);
-                       this.setLocationByPlatform(true);
-                       
-                       updateSelection();
-                       
-                       this.add(panel);
-                       this.validate();
-                       this.pack();
-               }
-               
-               private void fireChange() {
-                       int sel = table.getSelectedRow();
-                       tableModel.fireTableDataChanged();
-                       table.getSelectionModel().addSelectionInterval(sel, sel);
-               }
-               
-               private void updateSelection() {
-                       selection = table.getSelectedRow();
-                       if (selection < 0  ||  ids[selection] == null) {
-                               removeButton.setEnabled(false);
-                               nameField.setEnabled(false);
-                               nameField.setText("");
-                       } else {
-                               removeButton.setEnabled(true);
-                               nameField.setEnabled(true);
-                               nameField.setText(rocket.getMotorConfigurationName(ids[selection]));
-                       }
+                       return rocket.getMotorConfigurationNameOrDescription(id);
                }
        }