diff --git a/cave/com.raytheon.uf.viz.d2d.ui/src/com/raytheon/uf/viz/d2d/ui/dialogs/PrintDialog.java b/cave/com.raytheon.uf.viz.d2d.ui/src/com/raytheon/uf/viz/d2d/ui/dialogs/PrintDialog.java index 872e98d3d0..e75dd0cb34 100644 --- a/cave/com.raytheon.uf.viz.d2d.ui/src/com/raytheon/uf/viz/d2d/ui/dialogs/PrintDialog.java +++ b/cave/com.raytheon.uf.viz.d2d.ui/src/com/raytheon/uf/viz/d2d/ui/dialogs/PrintDialog.java @@ -20,15 +20,12 @@ package com.raytheon.uf.viz.d2d.ui.dialogs; import java.awt.Color; -import java.awt.geom.AffineTransform; -import java.awt.image.AffineTransformOp; import java.awt.image.BufferedImage; import java.awt.image.ComponentColorModel; import java.awt.image.IndexColorModel; import java.awt.image.WritableRaster; import java.io.File; -import java.io.IOException; -import java.io.OutputStream; +import java.io.InputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; @@ -69,6 +66,7 @@ import com.raytheon.uf.common.localization.LocalizationContext.LocalizationLevel import com.raytheon.uf.common.localization.LocalizationContext.LocalizationType; import com.raytheon.uf.common.localization.LocalizationFile; import com.raytheon.uf.common.localization.PathManagerFactory; +import com.raytheon.uf.common.localization.SaveableOutputStream; import com.raytheon.uf.common.status.IUFStatusHandler; import com.raytheon.uf.common.status.UFStatus; import com.raytheon.uf.viz.core.IDisplayPane; @@ -85,21 +83,20 @@ import com.raytheon.viz.ui.dialogs.CaveSWTDialog; import com.raytheon.viz.ui.editor.AbstractEditor; /** - * TODO Add Description + * Print Dialog * *
  * 
  * SOFTWARE HISTORY
  * 
- * Date         Ticket#    Engineer    Description
- * ------------ ---------- ----------- --------------------------
- * Feb 15, 2011            bkowal     Initial creation
- * ======================================
- * AWIPS2 DR Work
- * 08/15/2012         1053 jkorman     Added capability to save/restore user
- * print settings.
- * 10/12/2012         1229 rferrel    Made dialog non-blocking.
- * 12/09/2014   ASM #11982 D. Friedman Fix print-to-file
+ * Date          Ticket#  Engineer     Description
+ * ------------- -------- ------------ -----------------------------------------
+ * Feb 15, 2011           bkowal       Initial creation
+ * Aug 15, 2012  1053     jkorman      Added capability to save/restore user
+ *                                     print settings.
+ * Oct 12, 2012  1229     rferrel      Made dialog non-blocking.
+ * Dec 09, 2014  11982    D. Friedman  Fix print-to-file
+ * May 13, 2016  5653     randerso     Fixed print scaling
  * 
  * 
* @@ -142,6 +139,8 @@ public class PrintDialog extends CaveSWTDialog { /* Remaining Settings */ private Spinner scaleSpinner = null; + private Button fitToPageBtn; + private Combo magnificationCombo = null; private Spinner copiesSpinner = null; @@ -158,8 +157,6 @@ public class PrintDialog extends CaveSWTDialog { private DensityInformationStorage densityInformationStorage = null; - private float SCALE_CONST = .89f; - private class MagnificationInformationStorage { private double applicationMagnification = 0.0; @@ -187,11 +184,19 @@ public class PrintDialog extends CaveSWTDialog { public float scale; + public boolean fitToPage = false; + public boolean invert = false; } - public PrintDialog(Shell shell) { - super(shell, SWT.DIALOG_TRIM, CAVE.DO_NOT_BLOCK); + /** + * Constructor + * + * @param parent + * parent shell + */ + public PrintDialog(Shell parent) { + super(parent, SWT.DIALOG_TRIM, CAVE.DO_NOT_BLOCK); this.setText("Print"); } @@ -199,25 +204,11 @@ public class PrintDialog extends CaveSWTDialog { protected Layout constructShellLayout() { // Create the main layout for the shell. GridLayout mainLayout = new GridLayout(2, true); - mainLayout.marginHeight = 20; - mainLayout.verticalSpacing = 2; - mainLayout.marginWidth = 15; return mainLayout; } - /* - * (non-Javadoc) - * - * @see - * com.raytheon.viz.ui.dialogs.CaveSWTDialogBase#initializeComponents(org - * .eclipse.swt.widgets.Shell) - */ @Override protected void initializeComponents(Shell shell) { - this.initializeComponents(); - } - - private void initializeComponents() { this.saveMagnificationAndDensityByResource(); this.createPrintToGroup(); @@ -231,20 +222,20 @@ public class PrintDialog extends CaveSWTDialog { private void createPrintToGroup() { ArrayList availablePrinters = this.getAvailablePrinters(); - GridData gridData = new GridData(); - gridData.horizontalAlignment = GridData.FILL; - gridData.heightHint = 70; - gridData.horizontalSpan = 2; - Group group = new Group(this.shell, SWT.SHADOW_ETCHED_IN); + GridData gridData = new GridData(SWT.FILL, SWT.DEFAULT, true, false); + gridData.horizontalSpan = 2; group.setLayoutData(gridData); - group.setLayout(new GridLayout(3, false)); + + GridLayout gridLayout = new GridLayout(3, false); + group.setLayout(gridLayout); group.setText("Print To"); Button button = new Button(group, SWT.RADIO); button.setText("Printer"); button.setSelection(true); button.addSelectionListener(new SelectionAdapter() { + @Override public void widgetSelected(SelectionEvent event) { if (printerRadioButton.getSelection()) { selectedPrinterCombo.setEnabled(true); @@ -257,12 +248,10 @@ public class PrintDialog extends CaveSWTDialog { }); this.printerRadioButton = button; - gridData = new GridData(); - gridData.widthHint = 195; - gridData.horizontalSpan = 2; - Combo combo = new Combo(group, SWT.DROP_DOWN | SWT.READ_ONLY); + gridData = new GridData(SWT.FILL, SWT.DEFAULT, true, false); combo.setLayoutData(gridData); + if (availablePrinters != null) { Iterator printerIterator = availablePrinters.iterator(); while (printerIterator.hasNext()) { @@ -272,9 +261,13 @@ public class PrintDialog extends CaveSWTDialog { } this.selectedPrinterCombo = combo; + // filler + new Label(group, SWT.NONE); + button = new Button(group, SWT.RADIO); button.setText("File"); button.addSelectionListener(new SelectionAdapter() { + @Override public void widgetSelected(SelectionEvent event) { if (fileRadioButton.getSelection()) { selectedPrinterCombo.setEnabled(false); @@ -285,9 +278,12 @@ public class PrintDialog extends CaveSWTDialog { }); this.fileRadioButton = button; - gridData = new GridData(); - gridData.widthHint = 195; Text text = new Text(group, SWT.BORDER); + gridData = new GridData(SWT.FILL, SWT.DEFAULT, true, false); + GC gc = new GC(text); + int textWidth = gc.getFontMetrics().getAverageCharWidth() * 30; + gc.dispose(); + gridData.minimumWidth = textWidth; text.setLayoutData(gridData); text.setEnabled(false); this.destinationFileText = text; @@ -295,6 +291,7 @@ public class PrintDialog extends CaveSWTDialog { button = new Button(group, SWT.PUSH); button.setText("Browse ..."); button.addSelectionListener(new SelectionAdapter() { + @Override public void widgetSelected(SelectionEvent event) { selectDestinationFile(destinationFileText.getText()); } @@ -338,15 +335,25 @@ public class PrintDialog extends CaveSWTDialog { } private void createRemainingPrintingSettingsSection() { - Composite composite = new Composite(this.shell, SWT.NONE); - composite.setLayout(new GridLayout(2, false)); + Composite comp = new Composite(this.shell, SWT.BORDER); + GridData gridData = new GridData(SWT.FILL, SWT.DEFAULT, true, false); + gridData.horizontalSpan = 2; + comp.setLayoutData(gridData); + GridLayout gridLayout = new GridLayout(2, false); + comp.setLayout(gridLayout); - Label label = new Label(composite, SWT.NONE); - label.setText("% Scale: "); + Composite leftComp = new Composite(comp, SWT.NONE); + gridData = new GridData(SWT.FILL, SWT.DEFAULT, true, false); + leftComp.setLayoutData(gridData); + leftComp.setLayout(new GridLayout(2, false)); - GridData gridData = new GridData(); - gridData.widthHint = 55; - Spinner spinner = new Spinner(composite, SWT.READ_ONLY); + Label label = new Label(leftComp, SWT.NONE); + gridData = new GridData(SWT.LEFT, SWT.CENTER, false, false); + label.setLayoutData(gridData); + label.setText("Scale %:"); + + Spinner spinner = new Spinner(leftComp, SWT.READ_ONLY | SWT.BORDER); + gridData = new GridData(SWT.FILL, SWT.DEFAULT, true, false); spinner.setLayoutData(gridData); spinner.setMinimum(0); spinner.setMaximum(9999); @@ -354,15 +361,47 @@ public class PrintDialog extends CaveSWTDialog { spinner.setIncrement(1); this.scaleSpinner = spinner; - composite = new Composite(this.shell, SWT.NONE); - composite.setLayout(new GridLayout(2, false)); + this.fitToPageBtn = new Button(leftComp, SWT.CHECK); + gridData = new GridData(SWT.RIGHT, SWT.DEFAULT, true, false); + gridData.horizontalSpan = 2; + this.fitToPageBtn.setLayoutData(gridData); + this.fitToPageBtn.setText("Fit to Page"); + this.fitToPageBtn.addSelectionListener(new SelectionAdapter() { - label = new Label(composite, SWT.NONE); - label.setText("\u0020\u0020\u0020\u0020\u0020Mag: "); + @Override + public void widgetSelected(SelectionEvent e) { + scaleSpinner.setEnabled(!fitToPageBtn.getSelection()); + } - gridData = new GridData(); - gridData.widthHint = 110; - Combo combo = new Combo(composite, SWT.READ_ONLY | SWT.DROP_DOWN); + }); + + label = new Label(leftComp, SWT.NONE); + gridData = new GridData(SWT.LEFT, SWT.CENTER, false, false); + label.setLayoutData(gridData); + label.setText("Copies:"); + + spinner = new Spinner(leftComp, SWT.READ_ONLY | SWT.BORDER); + gridData = new GridData(SWT.FILL, SWT.DEFAULT, true, false); + spinner.setLayoutData(gridData); + + spinner.setMinimum(1); + spinner.setMaximum(9999); + spinner.setSelection(0); + spinner.setIncrement(1); + this.copiesSpinner = spinner; + + Composite rightComp = new Composite(comp, SWT.NONE); + gridData = new GridData(SWT.FILL, SWT.DEFAULT, true, false); + rightComp.setLayoutData(gridData); + rightComp.setLayout(new GridLayout(2, false)); + + label = new Label(rightComp, SWT.NONE); + gridData = new GridData(SWT.RIGHT, SWT.CENTER, true, false); + label.setLayoutData(gridData); + label.setText("Mag:"); + + Combo combo = new Combo(rightComp, SWT.READ_ONLY | SWT.DROP_DOWN); + gridData = new GridData(SWT.FILL, SWT.DEFAULT, true, false); combo.setLayoutData(gridData); /* Get The Magnification Values. */ for (int i = 0; i < MagnificationPopulator.getMagnifications().length; i++) { @@ -377,6 +416,7 @@ public class PrintDialog extends CaveSWTDialog { } } combo.addSelectionListener(new SelectionAdapter() { + @Override public void widgetSelected(SelectionEvent event) { okButton.setEnabled(false); cancelButton.setEnabled(false); @@ -387,31 +427,13 @@ public class PrintDialog extends CaveSWTDialog { }); this.magnificationCombo = combo; - composite = new Composite(this.shell, SWT.NONE); - composite.setLayout(new GridLayout(2, false)); + label = new Label(rightComp, SWT.NONE); + gridData = new GridData(SWT.RIGHT, SWT.CENTER, true, false); + label.setLayoutData(gridData); + label.setText("Density:"); - label = new Label(composite, SWT.NONE); - label.setText("\u0020\u0020Copies: "); - - gridData = new GridData(); - gridData.widthHint = 55; - spinner = new Spinner(composite, SWT.READ_ONLY); - spinner.setLayoutData(gridData); - spinner.setMinimum(1); - spinner.setMaximum(9999); - spinner.setSelection(0); - spinner.setIncrement(1); - this.copiesSpinner = spinner; - - composite = new Composite(this.shell, SWT.NONE); - composite.setLayout(new GridLayout(2, false)); - - label = new Label(composite, SWT.NONE); - label.setText("Density: "); - - gridData = new GridData(); - gridData.widthHint = 110; - combo = new Combo(composite, SWT.READ_ONLY | SWT.DROP_DOWN); + combo = new Combo(rightComp, SWT.READ_ONLY | SWT.DROP_DOWN); + gridData = new GridData(SWT.FILL, SWT.DEFAULT, true, false); combo.setLayoutData(gridData); for (int i = 0; i < DensityPopulator.getDensityLabels().length; i++) { combo.add(DensityPopulator.getDensityLabels()[i]); @@ -424,6 +446,7 @@ public class PrintDialog extends CaveSWTDialog { } } combo.addSelectionListener(new SelectionAdapter() { + @Override public void widgetSelected(SelectionEvent event) { okButton.setEnabled(false); cancelButton.setEnabled(false); @@ -434,25 +457,25 @@ public class PrintDialog extends CaveSWTDialog { }); this.densityCombo = combo; - gridData = new GridData(); + rightComp = new Composite(comp, SWT.NONE); + gridData = new GridData(SWT.FILL, SWT.DEFAULT, true, false); gridData.horizontalSpan = 2; - composite = new Composite(this.shell, SWT.NONE); - composite.setLayoutData(gridData); - composite.setLayout(new GridLayout(2, false)); - label = new Label(composite, SWT.NONE); - label.setText("\u0020\u0020\u0020\u0020\u0020Paper: "); + rightComp.setLayoutData(gridData); + rightComp.setLayout(new GridLayout(2, false)); + label = new Label(rightComp, SWT.NONE); + label.setText("Paper:"); - gridData = new GridData(); - gridData.widthHint = 295; - combo = new Combo(composite, SWT.READ_ONLY | SWT.DROP_DOWN); + combo = new Combo(rightComp, SWT.READ_ONLY | SWT.DROP_DOWN); + gridData = new GridData(SWT.FILL, SWT.DEFAULT, true, false); combo.setLayoutData(gridData); combo.add("DEFAULT"); combo.setEnabled(false); combo.select(0); + // TODO: implement paper settings gridData = new GridData(); gridData.horizontalAlignment = SWT.CENTER; - Button button = new Button(this.shell, SWT.CHECK); + Button button = new Button(comp, SWT.CHECK); button.setLayoutData(gridData); button.setText("Invert Black/White"); button.setSelection(true); @@ -460,20 +483,23 @@ public class PrintDialog extends CaveSWTDialog { gridData = new GridData(); gridData.horizontalAlignment = SWT.CENTER; - button = new Button(this.shell, SWT.CHECK); + button = new Button(comp, SWT.CHECK); button.setLayoutData(gridData); button.setText("Manual Feed"); button.setEnabled(false); + // TODO: implement manual feed } private void createPrintDialogButtons() { + int buttonWidth = getDisplay().getDPI().x * 3 / 2; GridData gridData = new GridData(); gridData.horizontalAlignment = SWT.CENTER; - gridData.widthHint = 125; + gridData.widthHint = buttonWidth; Button button = new Button(this.shell, SWT.PUSH); button.setLayoutData(gridData); button.setText("OK"); button.addSelectionListener(new SelectionAdapter() { + @Override public void widgetSelected(SelectionEvent event) { okButton.setEnabled(false); cancelButton.setEnabled(false); @@ -488,11 +514,12 @@ public class PrintDialog extends CaveSWTDialog { gridData = new GridData(); gridData.horizontalAlignment = SWT.CENTER; - gridData.widthHint = 125; + gridData.widthHint = buttonWidth; button = new Button(this.shell, SWT.PUSH); button.setLayoutData(gridData); button.setText("Cancel"); button.addSelectionListener(new SelectionAdapter() { + @Override public void widgetSelected(SelectionEvent event) { okButton.setEnabled(false); cancelButton.setEnabled(false); @@ -651,8 +678,8 @@ public class PrintDialog extends CaveSWTDialog { } else if (this.fileRadioButton.getSelection()) { printerSettings.selectedPrinter = this.printToFileData; printerSettings.selectedPrinter.printToFile = true; - printerSettings.selectedPrinter.fileName = - this.destinationFileText.getText(); + printerSettings.selectedPrinter.fileName = this.destinationFileText + .getText(); } printerSettings.selectedPrinter.copyCount = this.copiesSpinner .getSelection(); @@ -661,10 +688,12 @@ public class PrintDialog extends CaveSWTDialog { printerSettings.printInGrayscale = true; } if (this.landscapeRadioButton.getSelection()) { + printerSettings.selectedPrinter.orientation = PrinterData.LANDSCAPE; printerSettings.printInLandscape = true; } printerSettings.scale = ((float) this.scaleSpinner.getSelection() / 100); + printerSettings.fitToPage = this.fitToPageBtn.getSelection(); if (this.invertCheckbox.getSelection()) { printerSettings.invert = true; @@ -675,42 +704,7 @@ public class PrintDialog extends CaveSWTDialog { private void print(PrinterSettings printerSettings) { AbstractEditor editor = (AbstractEditor) EditorUtil.getActiveEditor(); - BufferedImage bi = editor.screenshot(); - Display display = editor.getActiveDisplayPane().getDisplay(); - Printer printer = new Printer(printerSettings.selectedPrinter); - Point screenDPI = display.getDPI(); - Point printerDPI = printer.getDPI(); - - // Determine the bounds of the entire area of the printer - Rectangle printArea = printer.getClientArea(); - float imageWidth = bi.getWidth() / (float) screenDPI.x; - float imageHeight = bi.getHeight() / (float) screenDPI.y; - float imageAspect = imageWidth / imageHeight; - - float printerWidth = printArea.width / (float) printerDPI.x; - float printerHeight = printArea.height / (float) printerDPI.y; - float printerAspect = printerWidth / printerHeight; - - // rotate image if necessary for best fit - // NOTE: rotating the image since the SWT Transform appears to have an - // error for exact 90 degree rotations - - boolean rotated = false; - if (printerSettings.printInLandscape) { - if ((imageAspect - 1) * (printerAspect - 1) < 0) { - AffineTransform transform = AffineTransform - .getQuadrantRotateInstance(1); - transform.concatenate(AffineTransform.getTranslateInstance(0.0, - -bi.getHeight())); - AffineTransformOp transformOp = new AffineTransformOp( - transform, AffineTransformOp.TYPE_NEAREST_NEIGHBOR); - bi = transformOp.filter(bi, new BufferedImage(bi.getHeight(), - bi.getWidth(), bi.getType())); - rotated = true; - } - } - if (printerSettings.invert) { // Only invert gray pixels, not colored pixels, awt doesn't not have // a good filter for this. @@ -731,6 +725,7 @@ public class PrintDialog extends CaveSWTDialog { Image image = null; Image colorImage = null; + Printer printer = new Printer(printerSettings.selectedPrinter); colorImage = new Image(printer, imageData); if (!printerSettings.printInGrayscale) { image = colorImage; @@ -740,45 +735,67 @@ public class PrintDialog extends CaveSWTDialog { image = grayScaleImage; } - // scale to adjust for difference in pixel aspect - float aspectScale = ((float) printerDPI.y / printerDPI.x) - / ((float) screenDPI.y / screenDPI.x); + Rectangle printArea = printer.getClientArea(); + Display display = editor.getActiveDisplayPane().getDisplay(); + Point screenDPI = display.getDPI(); + Point printerDPI = printer.getDPI(); - // now scale to fill the page - Rectangle imageBounds = image.getBounds(); - float hScale = ((float) printArea.width / imageBounds.width) - * printerSettings.scale; - float vScale = (printArea.height / (imageBounds.height * aspectScale)) - * printerSettings.scale; - float scaleX = Math.min(hScale, vScale); - // float scaleY = (scaleX * aspectScale) * printerSettings.scale; + float scale = printerSettings.scale; - // if rotated shift image to right edge of page - Rectangle trim = printer.computeTrim(0, 0, 0, 0); - Point offset = new Point(-trim.x, -trim.y); - if (rotated) { - offset.x += printArea.width - (imageBounds.width) * scaleX; + if (printerSettings.fitToPage) { + // get image size in inches + float imageWidth = bi.getWidth() / (float) screenDPI.x; + float imageHeight = bi.getHeight() / (float) screenDPI.y; + + // get print area size in inches + float printerWidth = printArea.width / (float) printerDPI.x; + float printerHeight = printArea.height / (float) printerDPI.y; + + // compute scale to fit the page + float hScale, vScale; + hScale = printerWidth / imageWidth; + vScale = printerHeight / imageHeight; + scale = Math.min(hScale, vScale); } + // compute output image size in printer pixels + int scaledImageWidth = Math.round(scale * bi.getWidth() * printerDPI.x + / screenDPI.x); + int scaledImageHeight = Math.round(scale * bi.getHeight() + * printerDPI.y / screenDPI.y); + + Point offset = new Point(0, 0); + Point remaining = new Point(scaledImageWidth, scaledImageHeight); if (printer.startJob("CAVE")) { - if (printer.startPage()) { - GC gc = new GC(printer); - Transform transform = new Transform(gc.getDevice()); - transform.translate(offset.x, offset.y); + while (remaining.x > 0 && remaining.y > 0) { + if (printer.startPage()) { + GC gc = new GC(printer); + gc.setClipping(printArea); - transform.scale(SCALE_CONST * printerSettings.scale - * printerDPI.x / (float) screenDPI.x, SCALE_CONST - * printerSettings.scale * printerDPI.y - / (float) screenDPI.y); - gc.setTransform(transform); + Transform transform = new Transform(gc.getDevice()); + transform.translate(offset.x, offset.y); + transform.scale(scale * printerDPI.x / screenDPI.x, scale + * printerDPI.y / screenDPI.y); - gc.drawImage(image, 0, 0); + gc.setTransform(transform); - transform.dispose(); - gc.dispose(); - printer.endPage(); - printer.endJob(); + gc.drawImage(image, 0, 0); + + transform.dispose(); + gc.dispose(); + printer.endPage(); + } + + remaining.x -= printArea.width; + offset.x -= printArea.width; + if (remaining.x <= 0) { + remaining.x = scaledImageWidth; + offset.x = 0; + remaining.y -= printArea.height; + offset.y -= printArea.height; + } } + printer.endJob(); } image.dispose(); @@ -894,6 +911,7 @@ public class PrintDialog extends CaveSWTDialog { settings.setCopies(copiesSpinner.getSelection()); settings.setScale(scaleSpinner.getSelection()); + settings.setFitToPage(fitToPageBtn.getSelection()); settings.setDensity(densityCombo.getSelectionIndex()); settings.setMag(magnificationCombo.getSelectionIndex()); @@ -910,25 +928,15 @@ public class PrintDialog extends CaveSWTDialog { LocalizationContext ctx = initUserLocalization(); // Get a list of localization files! - LocalizationFile f = PathManagerFactory.getPathManager() + LocalizationFile lf = PathManagerFactory.getPathManager() .getLocalizationFile(ctx, SETTINGS_FILENAME); - OutputStream strm = null; - try { - strm = f.openOutputStream(); + + try (SaveableOutputStream strm = lf.openOutputStream()) { JAXB.marshal(settings, strm); // Ensure that the file is saved on the server! - f.save(); + strm.save(); } catch (Exception e) { statusHandler.error("Could not save user print settings", e); - } finally { - if (f != null) { - try { - strm.close(); - } catch (IOException ioe) { - statusHandler.error("Could not close user print settings", - ioe); - } - } } } @@ -940,15 +948,14 @@ public class PrintDialog extends CaveSWTDialog { LocalizationContext ctx = initUserLocalization(); // Get a list of localization files! - LocalizationFile f = PathManagerFactory.getPathManager() + LocalizationFile lf = PathManagerFactory.getPathManager() .getLocalizationFile(ctx, SETTINGS_FILENAME); // If its not there, no previous settings have been saved. Just exit. - if (f.exists()) { + if (lf.exists()) { UserPrintSettings settings = null; - try { + try (InputStream strm = lf.openInputStream()) { - settings = (UserPrintSettings) JAXB.unmarshal( - f.openInputStream(), UserPrintSettings.class); + settings = JAXB.unmarshal(strm, UserPrintSettings.class); } catch (Exception e) { statusHandler.error( @@ -980,6 +987,10 @@ public class PrintDialog extends CaveSWTDialog { scaleSpinner.setSelection(settings.getScale()); } } + + fitToPageBtn.setSelection(settings.isFitToPage()); + scaleSpinner.setEnabled(!fitToPageBtn.getSelection()); + n = settings.getDensity(); if (n != null) { if ((n >= 0) && (n < densityCombo.getItemCount())) { @@ -1025,16 +1036,17 @@ public class PrintDialog extends CaveSWTDialog { * * @return the initialized localization */ - public static LocalizationContext initUserLocalization() { + private static LocalizationContext initUserLocalization() { return initLocalization(LocalizationLevel.USER); } /** * Initialize a LocalizationContext for the given LocalizationLevel. * + * @param level * @return the initialized localization */ - public static LocalizationContext initLocalization(LocalizationLevel level) { + private static LocalizationContext initLocalization(LocalizationLevel level) { IPathManager pm = PathManagerFactory.getPathManager(); LocalizationContext localization = pm.getContext( LocalizationType.COMMON_STATIC, level); diff --git a/cave/com.raytheon.uf.viz.d2d.ui/src/com/raytheon/uf/viz/d2d/ui/dialogs/UserPrintSettings.java b/cave/com.raytheon.uf.viz.d2d.ui/src/com/raytheon/uf/viz/d2d/ui/dialogs/UserPrintSettings.java index 8f7ccdb558..c002cc57fd 100644 --- a/cave/com.raytheon.uf.viz.d2d.ui/src/com/raytheon/uf/viz/d2d/ui/dialogs/UserPrintSettings.java +++ b/cave/com.raytheon.uf.viz.d2d.ui/src/com/raytheon/uf/viz/d2d/ui/dialogs/UserPrintSettings.java @@ -24,41 +24,40 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; -import com.raytheon.uf.common.serialization.ISerializableObject; - /** * Allows user printer settings to be persisted to an XML file. * *
- *
+ * 
  * SOFTWARE HISTORY
- *
- * Date         Ticket#    Engineer    Description
- * ------------ ---------- ----------- --------------------------
- * Aug 13, 2012       1053 jkorman     Initial creation
- *
+ * 
+ * Date          Ticket#  Engineer  Description
+ * ------------- -------- --------- --------------------------
+ * Aug 13, 2012  1053     jkorman   Initial creation
+ * May 13, 2016  5653     randerso  Added Fit to Page setting
+ * 
  * 
- * + * * @author jkorman - * @version 1.0 + * @version 1.0 */ @XmlRootElement @XmlAccessorType(XmlAccessType.NONE) -public class UserPrintSettings implements ISerializableObject { +public class UserPrintSettings { public enum PRINT_ORIENTATION { - PORTRAIT(false), - LANDSCAPE(true); - + PORTRAIT(false), LANDSCAPE(true); + private final boolean printLandscape; - + private PRINT_ORIENTATION(boolean orientation) { this.printLandscape = orientation; } /** * Is this enum set to landscape? + * * @return Is this enum set to landscape? */ public boolean isPrintLandscape() { @@ -67,7 +66,9 @@ public class UserPrintSettings implements ISerializableObject { /** * Get the proper enum instance depending on the orientation. - * @param landscape The landscape mode. True return LANDSCAPE. + * + * @param landscape + * The landscape mode. True return LANDSCAPE. * @return */ public static PRINT_ORIENTATION getPrintOrientation(boolean landscape) { @@ -77,34 +78,37 @@ public class UserPrintSettings implements ISerializableObject { @XmlElement private String printerUsed; - + @XmlElement private String printerFile; - + @XmlElement private boolean usePrinterFile = false; - + @XmlElement private PRINT_ORIENTATION orientation = PRINT_ORIENTATION.PORTRAIT; @XmlElement private boolean invertBlackWhite = false; - + @XmlElement private boolean printGrayScale = false; - + @XmlElement private Integer copies = 1; @XmlElement private Integer density = 0; - + @XmlElement private Integer mag = 0; @XmlElement private Integer scale = 100; - + + @XmlElement + private boolean fitToPage = false; + /** * Construct an instance with defaults values. */ @@ -113,6 +117,7 @@ public class UserPrintSettings implements ISerializableObject { /** * Get the name of the printer that was used. + * * @return The printer name. */ public String getPrinterUsed() { @@ -121,7 +126,9 @@ public class UserPrintSettings implements ISerializableObject { /** * Set the name of the printer that was used. - * @param printerUsed The printer name. + * + * @param printerUsed + * The printer name. */ public void setPrinterUsed(String printerUsed) { this.printerUsed = printerUsed; @@ -129,6 +136,7 @@ public class UserPrintSettings implements ISerializableObject { /** * Get the name of the print file that was used. + * * @return The print filename. */ public String getPrinterFile() { @@ -137,7 +145,9 @@ public class UserPrintSettings implements ISerializableObject { /** * Set the name of the print file that was used. - * @param printerFile The print filename. + * + * @param printerFile + * The print filename. */ public void setPrinterFile(String printerFile) { this.printerFile = printerFile; @@ -145,6 +155,7 @@ public class UserPrintSettings implements ISerializableObject { /** * Should print to file be used? + * * @return Should print to file be used? */ public boolean isUsePrinterFile() { @@ -153,7 +164,9 @@ public class UserPrintSettings implements ISerializableObject { /** * Set whether print to file was used. - * @param usePrinterFile Was print to file used? + * + * @param usePrinterFile + * Was print to file used? */ public void setUsePrinterFile(boolean usePrinterFile) { this.usePrinterFile = usePrinterFile; @@ -161,6 +174,7 @@ public class UserPrintSettings implements ISerializableObject { /** * Get the print page orientation. + * * @return The print orientation. */ public PRINT_ORIENTATION getOrientation() { @@ -169,14 +183,17 @@ public class UserPrintSettings implements ISerializableObject { /** * Set the print page orientation. - * @param orientation The print orientation. + * + * @param orientation + * The print orientation. */ public void setOrientation(PRINT_ORIENTATION orientation) { this.orientation = orientation; } - + /** * Should black and white be inverted? + * * @return Should black and white be inverted? */ public boolean getInvertBlackWhite() { @@ -185,7 +202,9 @@ public class UserPrintSettings implements ISerializableObject { /** * Set whether black and white should be inverted? - * @param invertBlackWhite Should black and white be inverted. + * + * @param invertBlackWhite + * Should black and white be inverted. */ public void setInvertBlackWhite(boolean invertBlackWhite) { this.invertBlackWhite = invertBlackWhite; @@ -193,6 +212,7 @@ public class UserPrintSettings implements ISerializableObject { /** * Should the print be converted to gray scale? + * * @return Should the print be converted to gray scale? */ public boolean isPrintGrayScale() { @@ -201,7 +221,9 @@ public class UserPrintSettings implements ISerializableObject { /** * Set whether the print should be converted to grayscale. - * @param printGrayScale Should the print be converted to grayscale. + * + * @param printGrayScale + * Should the print be converted to grayscale. */ public void setPrintGrayScale(boolean printGrayScale) { this.printGrayScale = printGrayScale; @@ -209,6 +231,7 @@ public class UserPrintSettings implements ISerializableObject { /** * Get the number of copies that should be printed. + * * @return The number of print copies. */ public Integer getCopies() { @@ -217,15 +240,19 @@ public class UserPrintSettings implements ISerializableObject { /** * Set the number of copies that should be printed. - * @param copies The number of copies that should be printed. + * + * @param copies + * The number of copies that should be printed. */ public void setCopies(Integer copies) { this.copies = copies; } /** - * Get the print density that should be used. NOTE : This value is the ordinal value - * returned by the control. The value does not correspond to an actual density value. + * Get the print density that should be used. NOTE : This value is the + * ordinal value returned by the control. The value does not correspond to + * an actual density value. + * * @return the density */ public Integer getDensity() { @@ -233,15 +260,18 @@ public class UserPrintSettings implements ISerializableObject { } /** - * @param density the density to set + * @param density + * the density to set */ public void setDensity(Integer density) { this.density = density; } /** - * Get the print magnification that should be used. NOTE : This value is the ordinal value - * returned by the control. The value does not correspond to an actual magnification value. + * Get the print magnification that should be used. NOTE : This value is the + * ordinal value returned by the control. The value does not correspond to + * an actual magnification value. + * * @return the density */ public Integer getMag() { @@ -249,14 +279,17 @@ public class UserPrintSettings implements ISerializableObject { } /** - * @param mag the mag to set + * @param mag + * the mag to set */ public void setMag(Integer mag) { this.mag = mag; } /** - * Get the print scaling that should be used. This is a percent value i.e. 100% = 100. + * Get the print scaling that should be used. This is a percent value i.e. + * 100% = 100. + * * @return The print scaling factor. */ public Integer getScale() { @@ -264,10 +297,27 @@ public class UserPrintSettings implements ISerializableObject { } /** - * Set the print scaling that should be used. This is a percent value i.e. 100% = 100. - * @param scale The print scaling factor. + * Set the print scaling that should be used. This is a percent value i.e. + * 100% = 100. + * + * @param scale + * The print scaling factor. */ public void setScale(Integer scale) { this.scale = scale; } + + /** + * @return true if should fit to page + */ + public Boolean isFitToPage() { + return fitToPage; + } + + /** + * @param fitToPage + */ + public void setFitToPage(Boolean fitToPage) { + this.fitToPage = fitToPage; + } }