### Eclipse Workspace Patch 1.0 #P org.eclipse.gmf.runtime.common.ui.printing.win32 Index: src/org/eclipse/gmf/runtime/common/ui/printing/PrintHelper.java =================================================================== RCS file: /cvsroot/modeling/org.eclipse.gmf/plugins/org.eclipse.gmf.runtime.common.ui.printing.win32/src/org/eclipse/gmf/runtime/common/ui/printing/PrintHelper.java,v retrieving revision 1.6 diff -u -r1.6 PrintHelper.java --- src/org/eclipse/gmf/runtime/common/ui/printing/PrintHelper.java 6 Oct 2006 13:33:08 -0000 1.6 +++ src/org/eclipse/gmf/runtime/common/ui/printing/PrintHelper.java 18 Apr 2008 15:39:15 -0000 @@ -16,15 +16,14 @@ import java.util.List; import java.util.Locale; -import org.eclipse.swt.printing.PrinterData; -import org.eclipse.ui.PlatformUI; - import org.eclipse.gmf.runtime.common.core.util.Log; import org.eclipse.gmf.runtime.common.core.util.StringStatics; import org.eclipse.gmf.runtime.common.core.util.Trace; import org.eclipse.gmf.runtime.common.ui.printing.internal.CommonPrintingDebugOptions; import org.eclipse.gmf.runtime.common.ui.printing.internal.CommonPrintingStatusCodes; import org.eclipse.gmf.runtime.common.ui.printing.internal.PrintingPlugin; +import org.eclipse.swt.printing.PrinterData; +import org.eclipse.ui.PlatformUI; /** * The PrintHelper implements the IPrintHelper interface for the platform @@ -323,9 +322,7 @@ // initialize dialog resetDialog(); - initScaleFitTo(1, 1); - initScalePercent(100); - + if (diagramList != null) { for (int c = 0; c < diagramList.size(); c++) { assert (diagramList.get(c) instanceof String); @@ -521,5 +518,21 @@ public void setDlgPaperSize(int index, double width, double height) { setPaperSize(index, width, height); } + + /** + * Initialize the scaling factor in the print dialog. + */ + @Override + public void setScaleFactor(int scaleFactor) { + initScalePercent(scaleFactor); + } + + /** + * Initialize the scale width and height in the print dialog. + */ + @Override + public void setScaleToWidthHeight(int width, int height) { + initScaleFitTo(width, height); + } } \ No newline at end of file #P org.eclipse.gmf.runtime.diagram.ui.printing.render Index: src/org/eclipse/gmf/runtime/diagram/ui/printing/render/dialogs/ActionsBlock.java =================================================================== RCS file: /cvsroot/modeling/org.eclipse.gmf/plugins/org.eclipse.gmf.runtime.diagram.ui.printing.render/src/org/eclipse/gmf/runtime/diagram/ui/printing/render/dialogs/ActionsBlock.java,v retrieving revision 1.3 diff -u -r1.3 ActionsBlock.java --- src/org/eclipse/gmf/runtime/diagram/ui/printing/render/dialogs/ActionsBlock.java 4 Apr 2008 21:50:20 -0000 1.3 +++ src/org/eclipse/gmf/runtime/diagram/ui/printing/render/dialogs/ActionsBlock.java 18 Apr 2008 15:39:16 -0000 @@ -14,6 +14,7 @@ import org.eclipse.gmf.runtime.common.ui.action.actions.IPrintActionHelper; import org.eclipse.gmf.runtime.diagram.ui.printing.internal.l10n.DiagramUIPrintingMessages; import org.eclipse.gmf.runtime.diagram.ui.printing.internal.printpreview.PrintPreviewHelper; +import org.eclipse.gmf.runtime.diagram.ui.printing.internal.util.PrintHelperUtil; import org.eclipse.gmf.runtime.diagram.ui.printing.render.actions.EnhancedPrintActionHelper; import org.eclipse.gmf.runtime.diagram.ui.printing.render.internal.printpreview.RenderedPrintPreviewHelper; import org.eclipse.gmf.runtime.diagram.ui.printing.render.model.PrintOptions; @@ -75,9 +76,15 @@ break; default: PrintPreviewHelper previewHelper = getPrintPreviewHelper(); - previewHelper.setUserScale(options.getScaleFactor() / 100f); + + PrintHelperUtil.setScale(options.getScaleFactor()); + PrintHelperUtil.setScaleToWidth(options.getFitToPagesWidth()); + PrintHelperUtil.setScaleToHeight(options.getFitToPagesHeight()); previewHelper.enablePrinting(false); + previewHelper.doPrintPreview(getPrintActionHelper()); + + options.setScaleFactor(PrintHelperUtil.getScale()); } } Index: src/org/eclipse/gmf/runtime/diagram/ui/printing/render/util/PrintHelper.java =================================================================== RCS file: /cvsroot/modeling/org.eclipse.gmf/plugins/org.eclipse.gmf.runtime.diagram.ui.printing.render/src/org/eclipse/gmf/runtime/diagram/ui/printing/render/util/PrintHelper.java,v retrieving revision 1.3 diff -u -r1.3 PrintHelper.java --- src/org/eclipse/gmf/runtime/diagram/ui/printing/render/util/PrintHelper.java 4 Apr 2008 21:44:32 -0000 1.3 +++ src/org/eclipse/gmf/runtime/diagram/ui/printing/render/util/PrintHelper.java 18 Apr 2008 15:39:16 -0000 @@ -14,6 +14,7 @@ import java.util.List; import org.eclipse.gmf.runtime.common.ui.printing.IPrintHelper; +import org.eclipse.gmf.runtime.diagram.ui.printing.internal.util.PrintHelperUtil; import org.eclipse.gmf.runtime.diagram.ui.printing.render.dialogs.JPSPrintDialog; import org.eclipse.gmf.runtime.diagram.ui.printing.render.model.PrintOptions; import org.eclipse.jface.dialogs.IDialogConstants; @@ -40,9 +41,10 @@ */ private void initPrintOptions() { options.setPercentScaling(true); - options.setScaleFactor(100); - options.setFitToPagesWidth(1); - options.setFitToPagesHeight(1); + + options.setScaleFactor(PrintHelperUtil.getScale()); + options.setFitToPagesWidth(PrintHelperUtil.getScaleToWidth()); + options.setFitToPagesHeight(PrintHelperUtil.getScaleToHeight()); options.setAllPages(true); options.setRangeFrom(1); @@ -149,5 +151,16 @@ public PrintOptions getPrintOptions() { return options; } + + @Override + public void setScaleFactor(int scaleFactor) { + options.setScaleFactor(scaleFactor) ; + } + + @Override + public void setScaleToWidthHeight(int width, int height) { + options.setFitToPagesWidth(width); + options.setFitToPagesHeight(height); + } } #P org.eclipse.gmf.runtime.common.ui.printing Index: src/org/eclipse/gmf/runtime/common/ui/printing/IPrintHelper.java =================================================================== RCS file: /cvsroot/modeling/org.eclipse.gmf/plugins/org.eclipse.gmf.runtime.common.ui.printing/src/org/eclipse/gmf/runtime/common/ui/printing/IPrintHelper.java,v retrieving revision 1.3 diff -u -r1.3 IPrintHelper.java --- src/org/eclipse/gmf/runtime/common/ui/printing/IPrintHelper.java 3 Oct 2006 14:54:47 -0000 1.3 +++ src/org/eclipse/gmf/runtime/common/ui/printing/IPrintHelper.java 18 Apr 2008 15:39:17 -0000 @@ -152,4 +152,21 @@ */ void setDlgPaperSize(int index, double width, double length); + /** + * Preserve the scale factor that the user enters in the preview or print + * dialogs. + * + * @param scaleFactor a zoom factor integer value greater than 0. + */ + void setScaleFactor(int scaleFactor); + + /** + * Preserve the width and height scale factors + * + * @param width scale to number of pages wide + * @param height scale to number of pages high + */ + void setScaleToWidthHeight(int width, int height); + + } #P org.eclipse.gmf.runtime.diagram.ui.printing Index: src/org/eclipse/gmf/runtime/diagram/ui/printing/internal/util/PrintHelperUtil.java =================================================================== RCS file: /cvsroot/modeling/org.eclipse.gmf/plugins/org.eclipse.gmf.runtime.diagram.ui.printing/src/org/eclipse/gmf/runtime/diagram/ui/printing/internal/util/PrintHelperUtil.java,v retrieving revision 1.1 diff -u -r1.1 PrintHelperUtil.java --- src/org/eclipse/gmf/runtime/diagram/ui/printing/internal/util/PrintHelperUtil.java 7 Mar 2008 16:51:34 -0000 1.1 +++ src/org/eclipse/gmf/runtime/diagram/ui/printing/internal/util/PrintHelperUtil.java 18 Apr 2008 15:39:19 -0000 @@ -37,12 +37,45 @@ import org.eclipse.swt.widgets.Shell; /** - * Helper to assist in making an offscreen diagram suitable for printing or + * Helper to assist in making an off screen diagram suitable for printing or * previewing. * * @author James Bruck (jbruck) */ public class PrintHelperUtil { + + // + // The following printing attributes are saved across + // the preview and print dialogs. + // + private static int scaleFactor = 100; + private static int scaleWidth = 1; + private static int scaleHeight = 1; + + public static int getScale() { + return scaleFactor; + } + + public static void setScale(int scale) { + scaleFactor = scale; + } + + public static int getScaleToWidth() { + return scaleWidth; + } + + public static void setScaleToWidth(int width) { + scaleWidth = width; + } + + public static int getScaleToHeight() { + return scaleHeight; + } + + public static void setScaleToHeight(int height) { + scaleHeight = height; + } + /** * Creates a DiagramEditPart given the Diagram * without opening an editor. @@ -293,4 +326,5 @@ return pageBreakBounds; } + } Index: src/org/eclipse/gmf/runtime/diagram/ui/printing/internal/util/DiagramPrinterHelper.java =================================================================== RCS file: /cvsroot/modeling/org.eclipse.gmf/plugins/org.eclipse.gmf.runtime.diagram.ui.printing/src/org/eclipse/gmf/runtime/diagram/ui/printing/internal/util/DiagramPrinterHelper.java,v retrieving revision 1.1 diff -u -r1.1 DiagramPrinterHelper.java --- src/org/eclipse/gmf/runtime/diagram/ui/printing/internal/util/DiagramPrinterHelper.java 7 Mar 2008 16:51:34 -0000 1.1 +++ src/org/eclipse/gmf/runtime/diagram/ui/printing/internal/util/DiagramPrinterHelper.java 18 Apr 2008 15:39:19 -0000 @@ -37,10 +37,8 @@ * * Basic functionality was factored into this class from the DiagramPrinterUtil. * This class and its specializing classes: - * JPSDiagramPrinterHelper and SWTDiagramPrinterHelper will be subject to change - * during phase 2 of printing enhancement changes. * - * @author jbruck + * @author James Bruck (jbruck) */ public class DiagramPrinterHelper { @@ -160,10 +158,24 @@ } else { helper.setDlgPaperSize(storedPageType.getIndex(), 0, 0); } - } + } + helper.setScaleFactor(PrintHelperUtil.getScale()); + helper.setScaleToWidthHeight(PrintHelperUtil.getScaleToWidth(), PrintHelperUtil.getScaleToHeight()); printerData = helper.openPrintDlg(diagramNames); + if (printerData != null) { + if (helper.getDlgScalePercent() != -1) { + PrintHelperUtil.setScale(helper.getDlgScalePercent()); + } + if (helper.getDlgScaleFitToM() != -1) { + PrintHelperUtil.setScaleToWidth(helper.getDlgScaleFitToM()); + } + if (helper.getDlgScaleFitToN() != -1) { + PrintHelperUtil.setScaleToHeight(helper.getDlgScaleFitToN()); + } + } + return printerData; } Index: src/org/eclipse/gmf/runtime/diagram/ui/printing/internal/printpreview/PrintPreviewHelper.java =================================================================== RCS file: /cvsroot/modeling/org.eclipse.gmf/plugins/org.eclipse.gmf.runtime.diagram.ui.printing/src/org/eclipse/gmf/runtime/diagram/ui/printing/internal/printpreview/PrintPreviewHelper.java,v retrieving revision 1.15 diff -u -r1.15 PrintPreviewHelper.java --- src/org/eclipse/gmf/runtime/diagram/ui/printing/internal/printpreview/PrintPreviewHelper.java 8 Apr 2008 02:16:31 -0000 1.15 +++ src/org/eclipse/gmf/runtime/diagram/ui/printing/internal/printpreview/PrintPreviewHelper.java 18 Apr 2008 15:39:19 -0000 @@ -11,6 +11,7 @@ package org.eclipse.gmf.runtime.diagram.ui.printing.internal.printpreview; + import java.util.ArrayList; import java.util.List; @@ -70,6 +71,7 @@ import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.Shell; +import org.eclipse.swt.widgets.Text; import org.eclipse.swt.widgets.ToolBar; import org.eclipse.swt.widgets.ToolItem; import org.eclipse.ui.IEditorPart; @@ -279,6 +281,7 @@ /** * The print preview helper is capable of showing zoom input. + * userScale is a value between 0 and 1. */ protected double userScale = 1; @@ -337,6 +340,8 @@ public void doPrintPreview(IPrintActionHelper prActionHelper) { this.printActionHelper = prActionHelper; + setUserScale(PrintHelperUtil.getScale()); + if (getDiagramEditorPart() == null) { MessageDialog .openInformation(PlatformUI.getWorkbench() @@ -413,6 +418,7 @@ public void widgetSelected(SelectionEvent e) { //should not be enabled Assert.isNotNull(printActionHelper); + printActionHelper .doPrint(PlatformUI.getWorkbench() .getActiveWorkbenchWindow().getActivePage() @@ -470,11 +476,8 @@ if (userY < 0) userY = 0; } - - updateLeftRightUpDownButtonsForToolbar(); - - updateCompositeForNumberOfColumns(numberOfRowsToDisplay, - numberOfColumnsToDisplay); + + refreshComposite(); } @@ -553,9 +556,7 @@ public void widgetSelected(SelectionEvent e) { if (userX > 0) { userX--; - updateCompositeForNumberOfColumns(numberOfRowsToDisplay, - numberOfColumnsToDisplay); - updateLeftRightUpDownButtonsForToolbar(); + refreshComposite(); } } @@ -589,9 +590,7 @@ //check for max pages to be safe if (!(userX + numberOfColumnsToDisplay + 1 > getTotalNumberOfColumns())) { userX++; - updateCompositeForNumberOfColumns(numberOfRowsToDisplay, - numberOfColumnsToDisplay); - updateLeftRightUpDownButtonsForToolbar(); + refreshComposite(); } } @@ -615,9 +614,7 @@ public void widgetSelected(SelectionEvent e) { if (userY > 0) { userY--; - updateCompositeForNumberOfColumns(numberOfRowsToDisplay, - numberOfColumnsToDisplay); - updateLeftRightUpDownButtonsForToolbar(); + refreshComposite(); } } @@ -641,9 +638,7 @@ public void widgetSelected(SelectionEvent e) { if (!(userY + numberOfRowsToDisplay + 1 > getTotalNumberOfRows())) { userY++; - updateCompositeForNumberOfColumns(numberOfRowsToDisplay, - numberOfColumnsToDisplay); - updateLeftRightUpDownButtonsForToolbar(); + refreshComposite(); } } @@ -654,7 +649,39 @@ widgetSelected(e); } }); + + new ToolItem(bar, SWT.SEPARATOR); + + ToolItem separator = new ToolItem(bar, SWT.SEPARATOR); + Text textField = new Text(bar, SWT.SINGLE | SWT.BORDER); + textField.setText("XXXXX");//$NON-NLS-1$ + textField.setEnabled(true); + textField.pack(); + textField.setText(getDisplayScale(PrintHelperUtil.getScale())); + + separator.setWidth(textField.getBounds().width); + separator.setControl(textField); + + textField.addSelectionListener(new SelectionListener() { + + public void widgetSelected(SelectionEvent e) { + // do nothing. + } + + public void widgetDefaultSelected(SelectionEvent e) { + String scaleFactor = ((Text) e.getSource()).getText(); + int percentageIndex = scaleFactor.indexOf("%"); //$NON-NLS-1$ + if (percentageIndex > 0) { + scaleFactor = scaleFactor.substring(0, percentageIndex); + } + int scalePercentage = Integer.parseInt(scaleFactor); + setUserScale(scalePercentage); + refreshComposite(); + ((Text) e.getSource()).setText(getDisplayScale(scalePercentage)); + } + }); + new ToolItem(bar, SWT.SEPARATOR); closeTool = new ToolItem(bar, SWT.NULL); closeTool.setToolTipText(DiagramUIPrintingMessages.PrintPreview_CloseToolItem); @@ -690,17 +717,16 @@ composite = new Composite(body, SWT.NULL); composite.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, true)); - - updateCompositeForNumberOfColumns(numberOfRowsToDisplay, numberOfColumnsToDisplay); - - updateLeftRightUpDownButtonsForToolbar(); + + refreshComposite(); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } - + + dispose(); shell.dispose(); } @@ -926,6 +952,17 @@ } /** + * A convenience method for refreshing the displayed image in the preview. + */ + private void refreshComposite(){ + + updateCompositeForNumberOfColumns(numberOfRowsToDisplay, + numberOfColumnsToDisplay); + + updateLeftRightUpDownButtonsForToolbar(); + } + + /** * Draw the composite centered on the body based on the number of columns. * Also calls the method to make the images and insert them into the * composite. @@ -1137,13 +1174,14 @@ * displaying in the print preview. */ protected void drawPage(Graphics g, GC gc, float scale, int row, int col, PageMargins margins) { + org.eclipse.draw2d.geometry.Point pageSize = PageInfoHelper - .getPageSize(getPreferenceStore(), false, getMapMode()); + .getPageSize(getPreferenceStore(), false, getMapMode()); g.pushState(); Rectangle bounds = getBounds(); - + int scaledPageSizeWidth = (int)(pageSize.x/userScale) ; int scaledPageSizeHeight = (int)(pageSize.y/userScale) ; @@ -1271,9 +1309,25 @@ ScaledGraphics scaledGraphics) { return new MapModeGraphics(scaledGraphics, getMapMode()); } - - public void setUserScale(double userScale){ - this.userScale = userScale; + + /** + * Sets the scale factor. + * + * @param scale : valid input is an integer larger than 0 representing a scale percentage + */ + private void setUserScale(int scale){ + userScale = scale/100f; + PrintHelperUtil.setScale(scale); } - + + /** + * Prepare a string appropriate to show the scale factor to the user. + * + * @param scale the scale factor, an integer greater than 0. + * @return A string of the scale factor to be displayed to the user. + */ + private String getDisplayScale(int scale) { + return String.valueOf(scale) + "%"; //$NON-NLS-1$ + } + } \ No newline at end of file