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);