Merge pull request #167 from kruland2607/master

Prevent reordering columns in flight configuration tables to prevent casting exceptions.
This commit is contained in:
kruland2607 2013-11-14 18:43:51 -08:00
commit b6f68ff89d
4 changed files with 11 additions and 22 deletions

View File

@ -18,8 +18,6 @@ import net.sf.openrocket.formatting.RocketDescriptor;
import net.sf.openrocket.gui.util.GUIUtil;
import net.sf.openrocket.l10n.Translator;
import net.sf.openrocket.rocketcomponent.FlightConfigurableComponent;
import net.sf.openrocket.rocketcomponent.MotorConfiguration;
import net.sf.openrocket.rocketcomponent.MotorMount;
import net.sf.openrocket.rocketcomponent.Rocket;
import net.sf.openrocket.startup.Application;
import net.sf.openrocket.util.Pair;
@ -87,7 +85,7 @@ public abstract class FlightConfigurablePanel<T extends FlightConfigurableCompon
ListSelectionModel model = (ListSelectionModel) e.getSource();
for( int row = firstrow; row <= lastrow; row ++) {
if ( model.isSelectedIndex(row) ) {
String id = (String) table.getValueAt(row, 0);
String id = (String) table.getValueAt(row, table.convertColumnIndexToView(0));
rocket.getDefaultConfiguration().setFlightConfigurationID(id);
return;
}
@ -106,8 +104,8 @@ public abstract class FlightConfigurablePanel<T extends FlightConfigurableCompon
protected T getSelectedComponent() {
int col = table.getSelectedColumn();
int row = table.getSelectedRow();
int col = table.convertColumnIndexToModel(table.getSelectedColumn());
int row = table.convertRowIndexToModel(table.getSelectedRow());
if ( row < 0 || col < 0 ) {
return null;
}
@ -120,8 +118,8 @@ public abstract class FlightConfigurablePanel<T extends FlightConfigurableCompon
}
protected String getSelectedConfigurationId() {
int col = table.getSelectedColumn();
int row = table.getSelectedRow();
int col = table.convertColumnIndexToModel(table.getSelectedColumn());
int row = table.convertRowIndexToModel(table.getSelectedRow());
if ( row < 0 || col < 0 ) {
return null;
}
@ -141,6 +139,7 @@ public abstract class FlightConfigurablePanel<T extends FlightConfigurableCompon
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
JLabel label = (JLabel) c;
column = table.convertColumnIndexToModel(column);
switch (column) {
case 0: {
label.setText(descriptor.format(rocket, (String) value));

View File

@ -134,6 +134,7 @@ public class MotorConfigurationPanel extends FlightConfigurablePanel<MotorMount>
};
JTable configurationTable = new JTable(configurationTableModel);
configurationTable.getTableHeader().setReorderingAllowed(false);
configurationTable.setCellSelectionEnabled(true);
configurationTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
configurationTable.setDefaultRenderer(Object.class, new MotorTableCellRenderer());
@ -263,6 +264,8 @@ public class MotorConfigurationPanel extends FlightConfigurablePanel<MotorMount>
@Override
public Component getTableCellRendererComponent(JTable table,Object value, boolean isSelected, boolean hasFocus, int row,int column) {
column = table.convertColumnIndexToModel(column);
row = table.convertRowIndexToModel(row);
switch (column) {
case 0: {
JLabel label = new JLabel(descriptor.format(rocket, (String) value));

View File

@ -1,8 +1,5 @@
package net.sf.openrocket.gui.main.flightconfigpanel;
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
@ -15,20 +12,16 @@ import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableCellRenderer;
import net.sf.openrocket.formatting.RocketDescriptor;
import net.sf.openrocket.gui.dialogs.flightconfiguration.DeploymentSelectionDialog;
import net.sf.openrocket.gui.util.GUIUtil;
import net.sf.openrocket.l10n.Translator;
import net.sf.openrocket.rocketcomponent.DeploymentConfiguration;
import net.sf.openrocket.rocketcomponent.DeploymentConfiguration.DeployEvent;
import net.sf.openrocket.rocketcomponent.MotorMount;
import net.sf.openrocket.rocketcomponent.RecoveryDevice;
import net.sf.openrocket.rocketcomponent.Rocket;
import net.sf.openrocket.startup.Application;
import net.sf.openrocket.unit.UnitGroup;
import net.sf.openrocket.util.Pair;
public class RecoveryConfigurationPanel extends FlightConfigurablePanel<RecoveryDevice> {
@ -74,6 +67,7 @@ public class RecoveryConfigurationPanel extends FlightConfigurablePanel<Recovery
//// Recovery selection
recoveryTableModel = new FlightConfigurableTableModel<RecoveryDevice>(RecoveryDevice.class, rocket);
JTable recoveryTable = new JTable(recoveryTableModel);
recoveryTable.getTableHeader().setReorderingAllowed(false);
recoveryTable.setCellSelectionEnabled(true);
recoveryTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
recoveryTable.addMouseListener(new MouseAdapter() {

View File

@ -1,8 +1,5 @@
package net.sf.openrocket.gui.main.flightconfigpanel;
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
@ -15,20 +12,15 @@ import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableCellRenderer;
import net.sf.openrocket.formatting.RocketDescriptor;
import net.sf.openrocket.gui.dialogs.flightconfiguration.SeparationSelectionDialog;
import net.sf.openrocket.gui.util.GUIUtil;
import net.sf.openrocket.l10n.Translator;
import net.sf.openrocket.rocketcomponent.MotorMount;
import net.sf.openrocket.rocketcomponent.RecoveryDevice;
import net.sf.openrocket.rocketcomponent.Rocket;
import net.sf.openrocket.rocketcomponent.Stage;
import net.sf.openrocket.rocketcomponent.StageSeparationConfiguration;
import net.sf.openrocket.startup.Application;
import net.sf.openrocket.unit.UnitGroup;
import net.sf.openrocket.util.Pair;
public class SeparationConfigurationPanel extends FlightConfigurablePanel<Stage> {
@ -81,6 +73,7 @@ public class SeparationConfigurationPanel extends FlightConfigurablePanel<Stage>
};
JTable separationTable = new JTable(separationTableModel);
separationTable.getTableHeader().setReorderingAllowed(false);
separationTable.setCellSelectionEnabled(true);
separationTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
separationTable.addMouseListener(new MouseAdapter() {