Merge pull request #1828 from SiboVG/issue-1818

[#1818] Update extension menu 'copy extension' after extension change
This commit is contained in:
Sibo Van Gool 2022-11-18 19:18:36 +01:00 committed by GitHub
commit f723508491
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -60,6 +60,8 @@ class SimulationOptionsPanel extends JPanel {
final Simulation simulation;
private JPanel currentExtensions;
final JPopupMenu extensionMenu;
JMenu extensionMenuCopyExtension;
SimulationOptionsPanel(OpenRocketDocument document, final Simulation simulation) {
super(new MigLayout("fill"));
@ -195,10 +197,10 @@ class SimulationOptionsPanel extends JPanel {
final JButton addExtension = new SelectColorButton(trans.get("simedtdlg.SimExt.add"));
final JPopupMenu menu = getExtensionMenu();
this.extensionMenu = getExtensionMenu();
addExtension.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ev) {
menu.show(addExtension, 5, addExtension.getBounds().height);
extensionMenu.show(addExtension, 5, addExtension.getBounds().height);
}
});
sub.add(addExtension, "growx, wrap 0");
@ -217,7 +219,8 @@ class SimulationOptionsPanel extends JPanel {
});
JPopupMenu basemenu = new JPopupMenu();
//// Use code / Launch conditions
for (final SimulationExtensionProvider provider : extensions) {
List<String> ids = provider.getIds();
for (final String id : ids) {
@ -242,41 +245,59 @@ class SimulationOptionsPanel extends JPanel {
}
}
}
JMenu copyMenu = null;
for (Simulation sim : document.getSimulations()) {
if (!sim.getSimulationExtensions().isEmpty()) {
JMenu menu = new JMenu(sim.getName());
for (final SimulationExtension ext : sim.getSimulationExtensions()) {
JMenuItem item = new JMenuItem(ext.getName());
item.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
SimulationExtension e = ext.clone();
simulation.getSimulationExtensions().add(e);
updateCurrentExtensions();
SwingSimulationExtensionConfigurator configurator = findConfigurator(e);
if (configurator != null) {
configurator.configure(e, simulation, SwingUtilities.windowForComponent(SimulationOptionsPanel.this));
updateCurrentExtensions();
}
}
});
menu.add(item);
}
if (copyMenu == null) {
copyMenu = new JMenu(trans.get("simedtdlg.SimExt.copyExtension"));
}
copyMenu.add(menu);
}
}
if (copyMenu != null) {
basemenu.add(copyMenu);
}
//// Copy extension
updateExtensionMenuCopyExtension(basemenu);
return basemenu;
}
/**
* Updates the contents of the "Copy extension" menu item in the extension menu.
* @param extensionMenu extension menu to add the "Copy extension" menu item to
*/
private void updateExtensionMenuCopyExtension(JPopupMenu extensionMenu) {
if (extensionMenu == null) {
return;
}
if (this.extensionMenuCopyExtension != null) {
extensionMenu.remove(this.extensionMenuCopyExtension);
}
this.extensionMenuCopyExtension = null;
for (Simulation sim : document.getSimulations()) {
if (sim.getSimulationExtensions().isEmpty()) {
continue;
}
JMenu menu = new JMenu(sim.getName());
for (final SimulationExtension ext : sim.getSimulationExtensions()) {
JMenuItem item = new JMenuItem(ext.getName());
item.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
SimulationExtension e = ext.clone();
simulation.getSimulationExtensions().add(e);
updateCurrentExtensions();
SwingSimulationExtensionConfigurator configurator = findConfigurator(e);
if (configurator != null) {
configurator.configure(e, simulation, SwingUtilities.windowForComponent(SimulationOptionsPanel.this));
updateCurrentExtensions();
}
}
});
menu.add(item);
}
if (this.extensionMenuCopyExtension == null) {
this.extensionMenuCopyExtension = new JMenu(trans.get("simedtdlg.SimExt.copyExtension"));
}
this.extensionMenuCopyExtension.add(menu);
}
if (this.extensionMenuCopyExtension != null) {
extensionMenu.add(this.extensionMenuCopyExtension);
}
}
private JComponent findMenu(MenuElement menu, List<String> menuItems) {
for (int i = 0; i < menuItems.size() - 1; i++) {
@ -314,6 +335,9 @@ class SimulationOptionsPanel extends JPanel {
currentExtensions.add(new SimulationExtensionPanel(e), "growx, wrap");
}
}
updateExtensionMenuCopyExtension(this.extensionMenu);
// Both needed:
this.revalidate();
this.repaint();
@ -336,7 +360,8 @@ class SimulationOptionsPanel extends JPanel {
JButton button;
this.add(new JPanel(), "spanx, split, growx, right");
// Configure
if (findConfigurator(extension) != null) {
button = new SelectColorButton(Icons.CONFIGURE);
button.addActionListener(new ActionListener() {
@ -349,7 +374,8 @@ class SimulationOptionsPanel extends JPanel {
});
this.add(button, "right");
}
// Help
if (extension.getDescription() != null) {
button = new SelectColorButton(Icons.HELP);
button.addActionListener(new ActionListener() {
@ -376,7 +402,8 @@ class SimulationOptionsPanel extends JPanel {
});
this.add(button, "right");
}
// Delete
button = new SelectColorButton(Icons.EDIT_DELETE);
button.addActionListener(new ActionListener() {
@Override