Update sim panel context menu item state

This commit is contained in:
SiboVG 2022-07-23 13:44:07 +02:00
parent 3602700ff3
commit ada48369e4

View File

@ -19,7 +19,7 @@ import java.util.Arrays;
import java.util.Comparator; import java.util.Comparator;
import javax.swing.AbstractAction; import javax.swing.AbstractAction;
import javax.swing.InputMap; import javax.swing.Action;
import javax.swing.JButton; import javax.swing.JButton;
import javax.swing.JCheckBox; import javax.swing.JCheckBox;
import javax.swing.JComponent; import javax.swing.JComponent;
@ -32,7 +32,6 @@ import javax.swing.JTable;
import javax.swing.KeyStroke; import javax.swing.KeyStroke;
import javax.swing.ListSelectionModel; import javax.swing.ListSelectionModel;
import javax.swing.SwingUtilities; import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener; import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.DefaultTableCellRenderer;
@ -100,83 +99,55 @@ public class SimulationPanel extends JPanel {
private final JButton plotButton; private final JButton plotButton;
private final JPopupMenu pm; private final JPopupMenu pm;
private final SimulationAction editSimulationAction;
private final SimulationAction runSimulationAction;
private final SimulationAction plotSimulationAction;
private final SimulationAction duplicateSimulationAction;
private final SimulationAction deleteSimulationAction;
public SimulationPanel(OpenRocketDocument doc) { public SimulationPanel(OpenRocketDocument doc) {
super(new MigLayout("fill", "[grow][][][][][][grow]")); super(new MigLayout("fill", "[grow][][][][][][grow]"));
this.document = doc; this.document = doc;
// Simulation actions
SimulationAction newSimulationAction = new NewSimulationAction();
editSimulationAction = new EditSimulationAction();
runSimulationAction = new RunSimulationAction();
plotSimulationAction = new PlotSimulationAction();
duplicateSimulationAction = new DuplicateSimulationAction();
deleteSimulationAction = new DeleteSimulationAction();
//////// The simulation action buttons //////// The simulation action buttons ////////
//// New simulation button //// New simulation button
{ JButton newButton = new SelectColorButton();
JButton button = new SelectColorButton(trans.get("simpanel.but.newsimulation")); tieActionToButtonNoIcon(newButton, newSimulationAction, trans.get("simpanel.but.newsimulation"));
//// Add a new simulation newButton.setToolTipText(trans.get("simpanel.but.ttip.newsimulation"));
button.setToolTipText(trans.get("simpanel.but.ttip.newsimulation")); this.add(newButton, "skip 1, gapright para");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Simulation sim = new Simulation(document.getRocket());
sim.setName(document.getNextSimulationName());
int n = document.getSimulationCount();
document.addSimulation(sim);
simulationTableModel.fireTableDataChanged();
simulationTable.clearSelection();
simulationTable.addRowSelectionInterval(n, n);
openDialog(false, sim);
}
});
this.add(button, "skip 1, gapright para");
}
//// Edit simulation button //// Edit simulation button
editButton = new SelectColorButton(trans.get("simpanel.but.editsimulation")); editButton = new SelectColorButton();
//// Edit the selected simulation tieActionToButtonNoIcon(editButton, editSimulationAction, trans.get("simpanel.but.editsimulation"));
editButton.setToolTipText(trans.get("simpanel.but.ttip.editsim")); editButton.setToolTipText(trans.get("simpanel.but.ttip.editsim"));
editButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
editSimulation();
}
});
this.add(editButton, "gapright para"); this.add(editButton, "gapright para");
//// Run simulations //// Run simulations
runButton = new SelectColorButton(trans.get("simpanel.but.runsimulations")); runButton = new SelectColorButton();
//// Re-run the selected simulations tieActionToButtonNoIcon(runButton, runSimulationAction, trans.get("simpanel.but.runsimulations"));
runButton.setToolTipText(trans.get("simpanel.but.ttip.runsimu")); runButton.setToolTipText(trans.get("simpanel.but.ttip.runsimu"));
runButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
runSimulation();
}
});
this.add(runButton, "gapright para"); this.add(runButton, "gapright para");
//// Delete simulations button //// Delete simulations button
deleteButton = new SelectColorButton(trans.get("simpanel.but.deletesimulations")); deleteButton = new SelectColorButton();
//// Delete the selected simulations tieActionToButtonNoIcon(deleteButton, deleteSimulationAction, trans.get("simpanel.but.deletesimulations"));
deleteButton.setToolTipText(trans.get("simpanel.but.ttip.deletesim")); deleteButton.setToolTipText(trans.get("simpanel.but.ttip.deletesim"));
deleteButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
deleteSimulation();
}
});
this.add(deleteButton, "gapright para"); this.add(deleteButton, "gapright para");
//// Plot / export button //// Plot / export button
plotButton = new SelectColorButton(trans.get("simpanel.but.plotexport")); plotButton = new SelectColorButton();
// button = new SelectColorButton("Plot flight"); tieActionToButtonNoIcon(plotButton, plotSimulationAction, trans.get("simpanel.but.plotexport"));
plotButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
plotSimulation();
}
});
this.add(plotButton, "wrap para"); this.add(plotButton, "wrap para");
@ -268,7 +239,7 @@ public class SimulationPanel extends JPanel {
if (row < 0 || row >= document.getSimulationCount()){ if (row < 0 || row >= document.getSimulationCount()){
return null; return null;
} }
Rocket rkt = document.getRocket(); Rocket rkt = document.getRocket();
FlightConfigurationId fcid = document.getSimulation(row).getId(); FlightConfigurationId fcid = document.getSimulation(row).getId();
return descriptor.format( rkt, fcid); return descriptor.format( rkt, fcid);
@ -423,7 +394,7 @@ public class SimulationPanel extends JPanel {
} }
) { ) {
private static final long serialVersionUID = 8686456963492628476L; private static final long serialVersionUID = 8686456963492628476L;
@Override @Override
@ -442,14 +413,15 @@ public class SimulationPanel extends JPanel {
simulationTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); simulationTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
simulationTable.setDefaultRenderer(Object.class, new JLabelRenderer()); simulationTable.setDefaultRenderer(Object.class, new JLabelRenderer());
simulationTableModel.setColumnWidths(simulationTable.getColumnModel()); simulationTableModel.setColumnWidths(simulationTable.getColumnModel());
pm = new JPopupMenu(); // Context menu
pm.add(new EditSimulationAction()); pm = new JPopupMenu();
pm.add(new DuplicateSimulationAction()); pm.add(editSimulationAction);
pm.add(new DeleteSimulationAction()); pm.add(duplicateSimulationAction);
pm.addSeparator(); pm.add(deleteSimulationAction);
pm.add(new RunSimulationAction()); pm.addSeparator();
pm.add(new PlotSimulationAction()); pm.add(runSimulationAction);
pm.add(plotSimulationAction);
// Mouse listener to act on double-clicks // Mouse listener to act on double-clicks
@ -528,6 +500,19 @@ public class SimulationPanel extends JPanel {
updateButtonStates(); updateButtonStates();
} }
private void newSimulation() {
Simulation sim = new Simulation(document.getRocket());
sim.setName(document.getNextSimulationName());
int n = document.getSimulationCount();
document.addSimulation(sim);
simulationTableModel.fireTableDataChanged();
simulationTable.clearSelection();
simulationTable.addRowSelectionInterval(n, n);
openDialog(false, sim);
}
private void plotSimulation() { private void plotSimulation() {
int selected = simulationTable.getSelectedRow(); int selected = simulationTable.getSelectedRow();
if (selected < 0) { if (selected < 0) {
@ -686,24 +671,11 @@ public class SimulationPanel extends JPanel {
} }
private void updateButtonStates() { private void updateButtonStates() {
int[] selection = simulationTable.getSelectedRows(); editSimulationAction.updateEnabledState();
if (selection.length == 0) { deleteSimulationAction.updateEnabledState();
editButton.setEnabled(false); runSimulationAction.updateEnabledState();
runButton.setEnabled(false); plotSimulationAction.updateEnabledState();
deleteButton.setEnabled(false); duplicateSimulationAction.updateEnabledState();
plotButton.setEnabled(false);
} else {
if (selection.length > 1) {
plotButton.setEnabled(false);
editButton.setEnabled(false);
} else {
plotButton.setEnabled(true);
editButton.setEnabled(true);
}
runButton.setEnabled(true);
deleteButton.setEnabled(true);
}
} }
/// when the simulation tab is selected this run outdated simulated if appropriate. /// when the simulation tab is selected this run outdated simulated if appropriate.
@ -775,7 +747,37 @@ public class SimulationPanel extends JPanel {
} }
} }
class EditSimulationAction extends AbstractAction { private void tieActionToButtonNoIcon(JButton button, Action action, String text) {
button.setAction(action);
button.setIcon(null);
button.setText(text);
}
private abstract static class SimulationAction extends AbstractAction {
private static final long serialVersionUID = 1L;
public abstract void updateEnabledState();
}
class NewSimulationAction extends SimulationAction {
public NewSimulationAction() {
putValue(NAME, trans.get("simpanel.but.newsimulation"));
this.putValue(MNEMONIC_KEY, KeyEvent.VK_N);
this.putValue(SMALL_ICON, Icons.FILE_NEW);
}
@Override
public void actionPerformed(ActionEvent e) {
newSimulation();
}
@Override
public void updateEnabledState() {
setEnabled(true);
}
}
class EditSimulationAction extends SimulationAction {
public EditSimulationAction() { public EditSimulationAction() {
putValue(NAME, trans.get("simpanel.pop.edit")); putValue(NAME, trans.get("simpanel.pop.edit"));
this.putValue(MNEMONIC_KEY, KeyEvent.VK_E); this.putValue(MNEMONIC_KEY, KeyEvent.VK_E);
@ -787,9 +789,14 @@ public class SimulationPanel extends JPanel {
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
editSimulation(); editSimulation();
} }
@Override
public void updateEnabledState() {
setEnabled(simulationTable.getSelectedRowCount() == 1);
}
} }
class RunSimulationAction extends AbstractAction { class RunSimulationAction extends SimulationAction {
public RunSimulationAction() { public RunSimulationAction() {
putValue(NAME, trans.get("simpanel.pop.run")); putValue(NAME, trans.get("simpanel.pop.run"));
putValue(SMALL_ICON, Icons.SIM_RUN); putValue(SMALL_ICON, Icons.SIM_RUN);
@ -799,9 +806,14 @@ public class SimulationPanel extends JPanel {
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
runSimulation(); runSimulation();
} }
@Override
public void updateEnabledState() {
setEnabled(simulationTable.getSelectedRowCount() > 0);
}
} }
class DeleteSimulationAction extends AbstractAction { class DeleteSimulationAction extends SimulationAction {
public DeleteSimulationAction() { public DeleteSimulationAction() {
putValue(NAME, trans.get("simpanel.pop.delete")); putValue(NAME, trans.get("simpanel.pop.delete"));
putValue(MNEMONIC_KEY, KeyEvent.VK_D); putValue(MNEMONIC_KEY, KeyEvent.VK_D);
@ -813,9 +825,14 @@ public class SimulationPanel extends JPanel {
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
deleteSimulation(); deleteSimulation();
} }
@Override
public void updateEnabledState() {
setEnabled(simulationTable.getSelectedRowCount() > 0);
}
} }
class PlotSimulationAction extends AbstractAction { class PlotSimulationAction extends SimulationAction {
public PlotSimulationAction() { public PlotSimulationAction() {
putValue(NAME, trans.get("simpanel.pop.plot")); putValue(NAME, trans.get("simpanel.pop.plot"));
putValue(SMALL_ICON, Icons.SIM_PLOT); putValue(SMALL_ICON, Icons.SIM_PLOT);
@ -825,9 +842,14 @@ public class SimulationPanel extends JPanel {
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
plotSimulation(); plotSimulation();
} }
@Override
public void updateEnabledState() {
setEnabled(simulationTable.getSelectedRowCount() == 1);
}
} }
class DuplicateSimulationAction extends AbstractAction { class DuplicateSimulationAction extends SimulationAction {
public DuplicateSimulationAction() { public DuplicateSimulationAction() {
putValue(NAME, trans.get("simpanel.pop.duplicate")); putValue(NAME, trans.get("simpanel.pop.duplicate"));
putValue(MNEMONIC_KEY, KeyEvent.VK_D); putValue(MNEMONIC_KEY, KeyEvent.VK_D);
@ -839,7 +861,12 @@ public class SimulationPanel extends JPanel {
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
duplicateSimulation(); duplicateSimulation();
} }
}
@Override
public void updateEnabledState() {
setEnabled(simulationTable.getSelectedRowCount() > 0);
}
}
public static class CellTransferable implements Transferable { public static class CellTransferable implements Transferable {