diff --git a/diylc/diylc-core/src/org/diylc/presenter/update.xml b/diylc/diylc-core/src/org/diylc/presenter/update.xml
index bc0bd124..159b7936 100644
--- a/diylc/diylc-core/src/org/diylc/presenter/update.xml
+++ b/diylc/diylc-core/src/org/diylc/presenter/update.xml
@@ -4074,6 +4074,10 @@
IMPROVEMENT
"Snap to Components" features now works when creating new components as well as when moving existing ones
+
+ BUG_FIX
+ Printed projects are sometimes missing parts of components or text
+
BUG_FIX
"Snap to" configuration menu does not work properly when using translated UI to any language other than English
diff --git a/diylc/diylc-library/lib/diylc-core.jar b/diylc/diylc-library/lib/diylc-core.jar
index 9b75562f..dadbe988 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-library/src/org/diylc/components/misc/CommonNode.java b/diylc/diylc-library/src/org/diylc/components/misc/CommonNode.java
index 3426f514..f34f54d6 100644
--- a/diylc/diylc-library/src/org/diylc/components/misc/CommonNode.java
+++ b/diylc/diylc-library/src/org/diylc/components/misc/CommonNode.java
@@ -28,8 +28,6 @@ import java.awt.geom.Ellipse2D;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.awt.geom.RoundRectangle2D;
-import java.awt.geom.Rectangle2D.Double;
-import java.util.Locale;
import org.diylc.awt.StringUtils;
import org.diylc.common.HorizontalAlignment;
import org.diylc.common.ObjectCache;
@@ -57,7 +55,7 @@ public class CommonNode extends AbstractComponent implements ICommonNode
private static int BUFFER_X = 6;
private static int BUFFER_Y = 4;
- private static final int STROKE_WIDTH = 2;
+ private static final int STROKE_WIDTH = 1;
private static final Color BG_COLOR = Color.lightGray;
private static final long serialVersionUID = 1L;
diff --git a/diylc/diylc-swing/.classpath b/diylc/diylc-swing/.classpath
index b9f460f9..84865660 100644
--- a/diylc/diylc-swing/.classpath
+++ b/diylc/diylc-swing/.classpath
@@ -19,6 +19,8 @@
+
+
diff --git a/diylc/diylc-swing/lib/commons-logging-1.2.jar b/diylc/diylc-swing/lib/commons-logging-1.2.jar
new file mode 100644
index 00000000..93a3b9f6
Binary files /dev/null and b/diylc/diylc-swing/lib/commons-logging-1.2.jar differ
diff --git a/diylc/diylc-swing/lib/diylc-core.jar b/diylc/diylc-swing/lib/diylc-core.jar
index 9b75562f..dadbe988 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/pdfbox-2.0.27.jar b/diylc/diylc-swing/lib/pdfbox-2.0.27.jar
new file mode 100644
index 00000000..5510e409
Binary files /dev/null and b/diylc/diylc-swing/lib/pdfbox-2.0.27.jar differ
diff --git a/diylc/diylc-swing/library/main.jar b/diylc/diylc-swing/library/main.jar
index 93131325..d44f0b79 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 eee65d2e..2d3feac7 100644
--- a/diylc/diylc-swing/src/org/diylc/swing/ActionFactory.java
+++ b/diylc/diylc-swing/src/org/diylc/swing/ActionFactory.java
@@ -24,11 +24,12 @@ import java.awt.datatransfer.ClipboardOwner;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.geom.Area;
-import java.awt.print.PrinterException;
+import java.awt.print.PrinterJob;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
+import java.nio.file.Files;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -46,6 +47,8 @@ import javax.swing.JOptionPane;
import javax.swing.KeyStroke;
import javax.swing.filechooser.FileFilter;
import org.apache.log4j.Logger;
+import org.apache.pdfbox.pdmodel.PDDocument;
+import org.apache.pdfbox.printing.PDFPageable;
import org.diylc.appframework.miscutils.ConfigurationManager;
import org.diylc.appframework.miscutils.IConfigListener;
import org.diylc.appframework.miscutils.InMemoryConfigurationManager;
@@ -150,8 +153,8 @@ public class ActionFactory {
return new ExportPNGAction(plugInPort, drawingProvider, swingUI, defaultSuffix);
}
- public PrintAction createPrintAction(IDrawingProvider drawingProvider, int keyModifiers) {
- return new PrintAction(drawingProvider, keyModifiers);
+ public PrintAction createPrintAction(IDrawingProvider drawingProvider, ISwingUI swingUI, int keyModifiers) {
+ return new PrintAction(drawingProvider, swingUI, keyModifiers);
}
public ExportVariantsAction createExportVariantsAction(ISwingUI swingUI, IPlugInPort plugInPort) {
@@ -850,10 +853,12 @@ public class ActionFactory {
private static final long serialVersionUID = 1L;
private IDrawingProvider drawingProvider;
+ private ISwingUI swingUI;
- public PrintAction(IDrawingProvider drawingProvider, int keyModifiers) {
+ public PrintAction(IDrawingProvider drawingProvider, ISwingUI swingUI, int keyModifiers) {
super();
this.drawingProvider = drawingProvider;
+ this.swingUI = swingUI;
putValue(AbstractAction.NAME, "Print...");
putValue(AbstractAction.ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_P, keyModifiers));
putValue(AbstractAction.SMALL_ICON, IconLoader.Print.getIcon());
@@ -862,11 +867,33 @@ public class ActionFactory {
@Override
public void actionPerformed(ActionEvent e) {
LOG.info("PrintAction triggered");
- try {
- DrawingExporter.getInstance().print(this.drawingProvider);
- } catch (PrinterException e1) {
- e1.printStackTrace();
- }
+ swingUI.executeBackgroundTask(new ITask() {
+
+ @Override
+ public Void doInBackground() throws Exception {
+ File tempPdf = Files.createTempFile("diylc", ".pdf").toFile();
+ DrawingExporter.getInstance().exportPDF(PrintAction.this.drawingProvider, tempPdf);
+
+ PDDocument document = PDDocument.load(tempPdf);
+// PrintService printService = PrintServiceLookup.lookupDefaultPrintService();
+ PrinterJob job = PrinterJob.getPrinterJob();
+ PDFPageable pdfPageable = new PDFPageable(document);
+ job.setPageable(pdfPageable);
+// job.setPrintService(printService);
+ job.print();
+ DrawingExporter.getInstance().print(PrintAction.this.drawingProvider);
+ return null;
+ }
+
+ @Override
+ public void complete(Void result) {}
+
+ @Override
+ public void failed(Exception e) {
+ swingUI.showMessage("Could not print. " + e.getMessage(), "Error",
+ ISwingUI.ERROR_MESSAGE);
+ }
+ }, true);
}
}
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 c45dee37..59a069f9 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
@@ -80,7 +80,7 @@ public class FileMenuPlugin implements IPlugIn, IDynamicSubmenuHandler {
actionFactory.createExportPDFAction(plugInPort, drawingProvider, swingUI, ""), FILE_TITLE);
swingUI.injectMenuAction(
actionFactory.createExportPNGAction(plugInPort, drawingProvider, swingUI, ""), FILE_TITLE);
- swingUI.injectMenuAction(actionFactory.createPrintAction(drawingProvider,
+ swingUI.injectMenuAction(actionFactory.createPrintAction(drawingProvider, swingUI,
Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()), FILE_TITLE);
swingUI.injectSubmenu(TRACE_MASK_TITLE, IconLoader.TraceMask.getIcon(), FILE_TITLE);
swingUI.injectMenuAction(actionFactory.createExportPDFAction(plugInPort,
@@ -88,7 +88,7 @@ public class FileMenuPlugin implements IPlugIn, IDynamicSubmenuHandler {
swingUI.injectMenuAction(actionFactory.createExportPNGAction(plugInPort,
traceMaskDrawingProvider, swingUI, " (mask)"), TRACE_MASK_TITLE);
swingUI.injectMenuAction(
- actionFactory.createPrintAction(traceMaskDrawingProvider,
+ actionFactory.createPrintAction(traceMaskDrawingProvider, swingUI,
Toolkit.getDefaultToolkit().getMenuShortcutKeyMask() | KeyEvent.SHIFT_DOWN_MASK),
TRACE_MASK_TITLE);