diff --git a/diylc/diylc-library/lib/diylc-core.jar b/diylc/diylc-library/lib/diylc-core.jar index ace0a931..266505c9 100644 Binary files a/diylc/diylc-library/lib/diylc-core.jar and b/diylc/diylc-library/lib/diylc-core.jar differ diff --git a/diylc/diylc-swing/DIYLCStarter.launch b/diylc/diylc-swing/DIYLCStarter.launch index 38c8ab51..aff8a7cb 100644 --- a/diylc/diylc-swing/DIYLCStarter.launch +++ b/diylc/diylc-swing/DIYLCStarter.launch @@ -11,5 +11,5 @@ - + diff --git a/diylc/diylc-swing/lib/diylc-core.jar b/diylc/diylc-swing/lib/diylc-core.jar index ace0a931..266505c9 100644 Binary files a/diylc/diylc-swing/lib/diylc-core.jar and b/diylc/diylc-swing/lib/diylc-core.jar differ diff --git a/diylc/diylc-swing/lib/swing-framework.jar b/diylc/diylc-swing/lib/swing-framework.jar index 0f3769b4..e3c7b6a5 100644 Binary files a/diylc/diylc-swing/lib/swing-framework.jar and b/diylc/diylc-swing/lib/swing-framework.jar differ diff --git a/diylc/diylc-swing/library/main.jar b/diylc/diylc-swing/library/main.jar index db0358b8..c177d9e9 100644 Binary files a/diylc/diylc-swing/library/main.jar and b/diylc/diylc-swing/library/main.jar differ diff --git a/diylc/diylc-swing/src/org/diylc/swing/ActionFactory.java b/diylc/diylc-swing/src/org/diylc/swing/ActionFactory.java index 9df3699e..262182a9 100644 --- a/diylc/diylc-swing/src/org/diylc/swing/ActionFactory.java +++ b/diylc/diylc-swing/src/org/diylc/swing/ActionFactory.java @@ -29,6 +29,7 @@ import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; @@ -40,6 +41,7 @@ import javax.swing.KeyStroke; import org.apache.log4j.Logger; import org.diylc.appframework.miscutils.ConfigurationManager; import org.diylc.common.BuildingBlockPackage; +import org.diylc.common.ComponentType; import org.diylc.common.IComponentTransformer; import org.diylc.common.IPlugInPort; import org.diylc.common.ITask; @@ -63,6 +65,7 @@ import org.diylc.swing.plugins.edit.ComponentTransferable; import org.diylc.swing.plugins.file.BomDialog; import org.diylc.swing.plugins.file.FileFilterEnum; import org.diylc.swingframework.ButtonDialog; +import org.diylc.swingframework.CheckBoxListDialog; import org.diylc.swingframework.IDrawingProvider; import org.diylc.swingframework.export.DrawingExporter; import org.diylc.utils.BomEntry; @@ -123,8 +126,8 @@ public class ActionFactory { return new PrintAction(drawingProvider, keyModifiers); } - public ExportVariantsAction createExportVariantsAction(ISwingUI swingUI) { - return new ExportVariantsAction(swingUI); + public ExportVariantsAction createExportVariantsAction(ISwingUI swingUI, IPlugInPort plugInPort) { + return new ExportVariantsAction(swingUI, plugInPort); } public ImportVariantsAction createImportVariantsAction(ISwingUI swingUI, IPlugInPort plugInPort) { @@ -689,11 +692,20 @@ public class ActionFactory { private static final long serialVersionUID = 1L; private ISwingUI swingUI; + private IPlugInPort plugInPort; + + private Map typeMap = new HashMap(); - public ExportVariantsAction(ISwingUI swingUI) { + public ExportVariantsAction(ISwingUI swingUI, IPlugInPort plugInPort) { super(); this.swingUI = swingUI; + this.plugInPort = plugInPort; putValue(AbstractAction.NAME, "Export Variants"); + + Map> componentTypes = plugInPort.getComponentTypes(); + for (Map.Entry> entry : componentTypes.entrySet()) + for (ComponentType type : entry.getValue()) + typeMap.put(type.getInstanceClass().getCanonicalName(), type); } @SuppressWarnings("unchecked") @@ -706,8 +718,33 @@ public class ActionFactory { swingUI.showMessage("No variants found to export.", "Error", IView.ERROR_MESSAGE); return; } + + List types = new ArrayList(); + for (String className : variantMap.keySet()) + types.add(typeMap.get(className)); + + CheckBoxListDialog dialog = new CheckBoxListDialog(swingUI.getOwnerFrame(), "Export Variants", types.toArray()); + + dialog.setVisible(true); + + if (dialog.getSelectedButtonCaption() != "OK") + return; + + Object[] selected = dialog.getSelectedOptions(); + + if (selected.length == 0) { + swingUI.showMessage("No building blocks selected for export.", "Error", IView.ERROR_MESSAGE); + return; + } + + Map> selectedVariants = new HashMap>(); + for (Object key : selected) { + ComponentType type = (ComponentType) key; + String clazz = type.getInstanceClass().getCanonicalName(); + selectedVariants.put(clazz, variantMap.get(clazz)); + } - final VariantPackage variantPkg = new VariantPackage(variantMap, System.getProperty("user.name")); + final VariantPackage variantPkg = new VariantPackage(selectedVariants, System.getProperty("user.name")); File initialFile = new File(variantPkg.getOwner() == null ? "variants.xml" : ("variants by " @@ -769,7 +806,6 @@ public class ActionFactory { @Override public void actionPerformed(ActionEvent e) { LOG.info("ImportVariantsAction triggered"); - final File file = DialogFactory.getInstance().showOpenDialog(FileFilterEnum.XML.getFilter(), @@ -821,8 +857,27 @@ public class ActionFactory { swingUI.showMessage("No building blocks found to export.", "Error", IView.ERROR_MESSAGE); return; } + + CheckBoxListDialog dialog = new CheckBoxListDialog(swingUI.getOwnerFrame(), "Export Building Blocks", blocks.keySet().toArray(new String[0])); + + dialog.setVisible(true); + + if (dialog.getSelectedButtonCaption() != "OK") + return; + + Object[] selected = dialog.getSelectedOptions(); + + if (selected.length == 0) { + swingUI.showMessage("No building blocks selected for export.", "Error", IView.ERROR_MESSAGE); + return; + } + + Map>> selectedBlocks = new HashMap>>(); + for (Object key : selected) { + selectedBlocks.put(key.toString(), blocks.get(key)); + } - final BuildingBlockPackage variantPkg = new BuildingBlockPackage(blocks, System.getProperty("user.name")); + final BuildingBlockPackage variantPkg = new BuildingBlockPackage(selectedBlocks, System.getProperty("user.name")); File initialFile = new File(variantPkg.getOwner() == null ? "building blocks.xml" : ("building blocks by " diff --git a/diylc/diylc-swing/src/org/diylc/swing/plugins/file/FileMenuPlugin.java b/diylc/diylc-swing/src/org/diylc/swing/plugins/file/FileMenuPlugin.java index eae1b77d..925af8f2 100644 --- a/diylc/diylc-swing/src/org/diylc/swing/plugins/file/FileMenuPlugin.java +++ b/diylc/diylc-swing/src/org/diylc/swing/plugins/file/FileMenuPlugin.java @@ -92,7 +92,7 @@ public class FileMenuPlugin implements IPlugIn, IDynamicSubmenuHandler { swingUI.injectMenuAction(actionFactory.createExportBlocksAction(swingUI), INTEGRATION_TITLE); swingUI.injectMenuAction(null, INTEGRATION_TITLE); swingUI.injectMenuAction(actionFactory.createImportVariantsAction(swingUI, plugInPort), INTEGRATION_TITLE); - swingUI.injectMenuAction(actionFactory.createExportVariantsAction(swingUI), INTEGRATION_TITLE); + swingUI.injectMenuAction(actionFactory.createExportVariantsAction(swingUI, plugInPort), INTEGRATION_TITLE); swingUI.injectMenuAction(null, FILE_TITLE); swingUI.injectMenuAction(actionFactory.createExitAction(plugInPort), FILE_TITLE); } diff --git a/diylc/diylc-swing/update.xml b/diylc/diylc-swing/update.xml index 770c0486..e71e1790 100644 --- a/diylc/diylc-swing/update.xml +++ b/diylc/diylc-swing/update.xml @@ -2413,7 +2413,11 @@ NEW_FEATURE Add switched type to "Open 1/4" Jack" component - + + + NEW_FEATURE + Selectable coordinate origin point for all perforated boards + IMPROVEMENT Vast improvement of rendering performance and memory management, especially with large layouts