diff --git a/swing/src/net/sf/openrocket/file/wavefrontobj/OBJOptionChooser.java b/swing/src/net/sf/openrocket/file/wavefrontobj/OBJOptionChooser.java
index e8b88b4eb..3d4de68a2 100644
--- a/swing/src/net/sf/openrocket/file/wavefrontobj/OBJOptionChooser.java
+++ b/swing/src/net/sf/openrocket/file/wavefrontobj/OBJOptionChooser.java
@@ -11,7 +11,6 @@ import net.sf.openrocket.rocketcomponent.Rocket;
import net.sf.openrocket.rocketcomponent.RocketComponent;
import net.sf.openrocket.startup.Application;
import net.sf.openrocket.unit.UnitGroup;
-import org.jetbrains.annotations.NotNull;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
@@ -23,12 +22,16 @@ import javax.swing.JToggleButton;
import java.awt.Window;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
+import java.util.ArrayList;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
public class OBJOptionChooser extends JPanel {
private static final Translator trans = Application.getTranslator();
// Widgets
+ private final JLabel componentsLabel;
private final JCheckBox exportChildren;
private final JCheckBox exportAppearance;
private final JCheckBox exportAsSeparateFiles;
@@ -52,32 +55,9 @@ public class OBJOptionChooser extends JPanel {
this.rocket = rocket;
// ------------ Component selection ------------
- final boolean singleComponent = selectedComponents.size() == 1;
- String componentName = singleComponent ?
- "" + selectedComponents.get(0).getName() + "":
- trans.get("OBJOptionChooser.lbl.multipleComponents");
- JLabel components = new JLabel(String.format(trans.get("OBJOptionChooser.lbl.component"),
- componentName));
- if (!singleComponent) {
- StringBuilder tooltipBuilder = new StringBuilder("");
- int counter = 0;
- for (int i = 0; i < selectedComponents.size()-1; i++) {
- tooltipBuilder.append(selectedComponents.get(i).getName()).append(", ");
-
- // Add line break every 4 components
- if (counter == 4) {
- tooltipBuilder.append("
");
- counter = 0;
- } else {
- counter++;
- }
- }
- tooltipBuilder.append(selectedComponents.get(selectedComponents.size()-1).getComponentName());
- tooltipBuilder.append("");
-
- components.setToolTipText(tooltipBuilder.toString());
- }
- this.add(components, "spanx, wrap");
+ componentsLabel = new JLabel();
+ updateComponentsLabel(selectedComponents);
+ this.add(componentsLabel, "spanx, wrap");
this.add(new JSeparator(JSeparator.HORIZONTAL), "spanx, growx, wrap para");
@@ -85,6 +65,25 @@ public class OBJOptionChooser extends JPanel {
// ------------ Basic options ------------
//// Export children
this.exportChildren = new JCheckBox(trans.get("OBJOptionChooser.checkbox.exportChildren"));
+ this.exportChildren.addItemListener(new ItemListener() {
+ @Override
+ public void itemStateChanged(ItemEvent e) {
+ List components;
+ // Case: export children
+ if (e.getStateChange() == ItemEvent.SELECTED) {
+ final Set allComponents = new HashSet<>();
+ for (RocketComponent component : selectedComponents) {
+ allComponents.addAll(component.getAllChildren());
+ }
+ components = new ArrayList<>(allComponents);
+ }
+ // Case: don't export children
+ else {
+ components = selectedComponents;
+ }
+ updateComponentsLabel(components);
+ }
+ });
this.add(exportChildren, "spanx, wrap");
//// Remove origin offset
@@ -225,12 +224,50 @@ public class OBJOptionChooser extends JPanel {
loadOptions(opts);
}
+ private void updateComponentsLabel(List components) {
+ final String labelText;
+ final String tooltip;
+
+ final boolean isSingleComponent = components.size() == 1;
+ final String componentName = isSingleComponent ? "" + components.get(0).getName() + "":
+ trans.get("OBJOptionChooser.lbl.multipleComponents");
+ labelText = String.format(trans.get("OBJOptionChooser.lbl.component"), componentName);
+
+ if (!isSingleComponent) {
+ tooltip = createComponentsTooltip(components);
+ } else {
+ tooltip = "";
+ }
+
+ componentsLabel.setText(labelText);
+ componentsLabel.setToolTipText(tooltip);
+ }
+
+ private static String createComponentsTooltip(List selectedComponents) {
+ StringBuilder tooltipBuilder = new StringBuilder("");
+ int counter = 0;
+ for (int i = 0; i < selectedComponents.size()-1; i++) {
+ tooltipBuilder.append(selectedComponents.get(i).getName()).append(", ");
+
+ // Add line break every 4 components
+ if (counter == 4) {
+ tooltipBuilder.append("
");
+ counter = 0;
+ } else {
+ counter++;
+ }
+ }
+ tooltipBuilder.append(selectedComponents.get(selectedComponents.size()-1).getComponentName());
+ tooltipBuilder.append("");
+ return tooltipBuilder.toString();
+ }
+
public void loadOptions(OBJExportOptions opts) {
boolean onlyComponentAssemblies = isOnlyComponentAssembliesSelected(selectedComponents);
boolean hasChildren = isComponentsHaveChildren(selectedComponents);
if (onlyComponentAssemblies || !hasChildren) {
- exportChildren.setEnabled(false);
exportChildren.setSelected(true);
+ exportChildren.setEnabled(false);
if (onlyComponentAssemblies) {
exportChildren.setToolTipText(trans.get("OBJOptionChooser.checkbox.exportChildren.assemblies.ttip"));
} else {