UI refactoring

This commit is contained in:
Sampo Niskanen 2013-03-17 11:13:32 +02:00
parent d27a394813
commit b2776f5e92
4 changed files with 92 additions and 11 deletions

View File

@ -1841,16 +1841,16 @@ RecoveryConfigurationPanel.table.deployment.default = Default ({0})
SeparationConfigurationPanel.table.separation.default = Default ({0})
IgnitionSelectionDialog.opt.title = Which flight configurations are affected:
IgnitionSelectionDialog.opt.default = Change the default ignition event for this motor
IgnitionSelectionDialog.opt.default = Change all configurations using the default ignition event
IgnitionSelectionDialog.opt.override = Override for the {0} flight configuration only
DeploymentSelectionDialog.opt.title = Which flight configurations are affected:
DeploymentSelectionDialog.opt.default = Change the default deployment event for this recovery device
DeploymentSelectionDialog.opt.default = Change all configuration using the default deployment event
DeploymentSelectionDialog.opt.override = Override for the {0} flight configuration only
SeparationSelectionDialog.lbl.separation = Stage separation at:
SeparationSelectionDialog.opt.title = Which flight configurations are affected:
SeparationSelectionDialog.opt.default = Change the default separation event for this stage
SeparationSelectionDialog.opt.default = Change all configuration using the default separation event
SeparationSelectionDialog.opt.override = Override for the {0} flight configuration only
MotorConfigurationPanel.description = <b>Select the motors and motor ignition events of your rocket.</b><br> <em>Motor mounts:</em> Select which components function as motor mounts.<br> <em>Motor configurations:</em> Select the motor and ignition event for each motor mount.

View File

@ -41,12 +41,13 @@ public class IgnitionSelectionDialog extends JDialog {
JPanel panel = new JPanel(new MigLayout("fill"));
boolean isDefault = component.getIgnitionConfiguration().isDefault(id);
panel.add(new JLabel(trans.get("IgnitionSelectionDialog.opt.title")), "span, wrap rel");
final JRadioButton defaultButton = new JRadioButton(trans.get("IgnitionSelectionDialog.opt.default"), true);
final JRadioButton defaultButton = new JRadioButton(trans.get("IgnitionSelectionDialog.opt.default"), isDefault);
panel.add(defaultButton, "span, gapleft para, wrap rel");
String str = trans.get("IgnitionSelectionDialog.opt.override");
str = str.replace("{0}", rocket.getFlightConfigurationNameOrDescription(id));
final JRadioButton overrideButton = new JRadioButton(str, false);
final JRadioButton overrideButton = new JRadioButton(str, !isDefault);
panel.add(overrideButton, "span, gapleft para, wrap para");
ButtonGroup buttonGroup = new ButtonGroup();
@ -90,6 +91,7 @@ public class IgnitionSelectionDialog extends JDialog {
panel.add(okButton, "sizegroup btn");
JButton cancel = new JButton(trans.get("button.cancel"));
cancel.addActionListener(new ActionListener() {
@Override

View File

@ -1,5 +1,8 @@
package net.sf.openrocket.gui.dialogs.flightconfiguration;
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;
@ -11,6 +14,7 @@ import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;
@ -82,11 +86,13 @@ public class MotorConfigurationPanel extends JPanel {
configurationTable = new JTable(configurationTableModel);
configurationTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
configurationTable.setRowSelectionAllowed(true);
configurationTable.setDefaultRenderer(Object.class, new MotorTableCellRenderer());
configurationTable.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
updateButtonState();
if (e.getClickCount() == 2) {
// FIXME: Double-click on ignition column should select ignition
// Double-click edits motor
@ -142,7 +148,12 @@ public class MotorConfigurationPanel extends JPanel {
}
public void fireTableDataChanged() {
int selected = configurationTable.getSelectedRow();
configurationTableModel.fireTableDataChanged();
if (selected >= 0) {
selected = Math.min(selected, configurationTable.getRowCount() - 1);
configurationTable.getSelectionModel().setSelectionInterval(selected, selected);
}
updateButtonState();
}
@ -162,6 +173,11 @@ public class MotorConfigurationPanel extends JPanel {
return null;
}
return getMount(row);
}
private MotorMount getMount(int row) {
int count = 0;
for (RocketComponent c : rocket) {
if (c instanceof MotorMount) {
@ -178,6 +194,8 @@ public class MotorConfigurationPanel extends JPanel {
throw new IndexOutOfBoundsException("Invalid row, row=" + row + " count=" + count);
}
private void selectMotor() {
String id = rocket.getDefaultConfiguration().getFlightConfigurationID();
MotorMount mount = getCurrentMount();
@ -203,8 +221,7 @@ public class MotorConfigurationPanel extends JPanel {
}
flightConfigurationDialog.fireContentsUpdated();
configurationTableModel.fireTableDataChanged();
updateButtonState();
fireTableDataChanged();
}
private void removeMotor() {
@ -216,8 +233,7 @@ public class MotorConfigurationPanel extends JPanel {
mount.getMotorConfiguration().resetDefault(id);
flightConfigurationDialog.fireContentsUpdated();
configurationTableModel.fireTableDataChanged();
updateButtonState();
fireTableDataChanged();
}
private void selectIgnition() {
@ -233,8 +249,58 @@ public class MotorConfigurationPanel extends JPanel {
dialog.setVisible(true);
flightConfigurationDialog.fireContentsUpdated();
configurationTableModel.fireTableDataChanged();
updateButtonState();
fireTableDataChanged();
}
private class MotorTableCellRenderer extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if (!(c instanceof JLabel)) {
return c;
}
JLabel label = (JLabel) c;
MotorMount mount = getMount(row);
String id = rocket.getDefaultConfiguration().getFlightConfigurationID();
switch (column) {
case 0:
regular(label);
break;
case 1:
if (mount.getMotorConfiguration().get(id).getMotor() != null) {
regular(label);
} else {
shaded(label);
}
break;
case 2:
if (mount.getIgnitionConfiguration().isDefault(id)) {
shaded(label);
} else {
regular(label);
}
break;
}
return label;
}
private void shaded(JLabel label) {
GUIUtil.changeFontStyle(label, Font.ITALIC);
label.setForeground(Color.GRAY);
}
private void regular(JLabel label) {
GUIUtil.changeFontStyle(label, Font.PLAIN);
label.setForeground(Color.BLACK);
}
}
}

View File

@ -397,6 +397,19 @@ public class GUIUtil {
}
/**
* Changes the style of the font of the specified label.
*
* @param label the component for which to change the font
* @param style the change in the font style
*/
public static void changeFontStyle(JLabel label, int style) {
Font font = label.getFont();
font = font.deriveFont(style);
label.setFont(font);
}
/**
* Traverses recursively the component tree, and sets all applicable component