| /********************************************************************** |
| * Copyright (c) 2005, 2014 IBM Corporation, Ericsson |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM - Initial API and implementation |
| * Bernd Hufmann - Updated for TMF |
| * Matthew Khouzam - Minor refactor |
| **********************************************************************/ |
| |
| package org.eclipse.tracecompass.tmf.ui.views.uml2sd.dialogs; |
| |
| import java.text.MessageFormat; |
| import java.util.Arrays; |
| |
| import org.eclipse.jface.wizard.WizardPage; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.events.FocusEvent; |
| import org.eclipse.swt.events.FocusListener; |
| import org.eclipse.swt.events.KeyEvent; |
| import org.eclipse.swt.events.ModifyListener; |
| import org.eclipse.swt.events.MouseEvent; |
| import org.eclipse.swt.events.MouseTrackListener; |
| import org.eclipse.swt.events.SelectionEvent; |
| import org.eclipse.swt.events.SelectionListener; |
| import org.eclipse.swt.events.TraverseEvent; |
| import org.eclipse.swt.events.TraverseListener; |
| import org.eclipse.swt.graphics.GC; |
| import org.eclipse.swt.graphics.Image; |
| import org.eclipse.swt.graphics.ImageData; |
| import org.eclipse.swt.graphics.RGB; |
| import org.eclipse.swt.graphics.Rectangle; |
| import org.eclipse.swt.layout.GridData; |
| import org.eclipse.swt.layout.GridLayout; |
| import org.eclipse.swt.printing.PrintDialog; |
| import org.eclipse.swt.printing.Printer; |
| import org.eclipse.swt.printing.PrinterData; |
| import org.eclipse.swt.widgets.Button; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Control; |
| import org.eclipse.swt.widgets.Display; |
| import org.eclipse.swt.widgets.Group; |
| import org.eclipse.swt.widgets.Label; |
| import org.eclipse.swt.widgets.Shell; |
| import org.eclipse.swt.widgets.Text; |
| import org.eclipse.tracecompass.tmf.ui.project.model.TraceUtils; |
| import org.eclipse.tracecompass.tmf.ui.views.uml2sd.DiagramToolTip; |
| import org.eclipse.tracecompass.tmf.ui.views.uml2sd.NGC; |
| import org.eclipse.tracecompass.tmf.ui.views.uml2sd.SDWidget; |
| import org.eclipse.tracecompass.tmf.ui.views.uml2sd.util.Messages; |
| |
| /** |
| * The class implements the actual print dialog UI for collecting printing data. |
| * |
| * @version 1.0 |
| * @author sveyrier |
| */ |
| public class SDPrintDialogUI { |
| |
| private static final RGB FOCUS_COLOR = new RGB(0, 0, 128); |
| private static final RGB NON_FOCUS_COLOR = new RGB(221, 208, 200); |
| |
| // ------------------------------------------------------------------------ |
| // Attributes |
| // ------------------------------------------------------------------------ |
| /** |
| * The set horizontal pages number. |
| */ |
| private Button fSetHPagesNumber; |
| /** |
| * The set vertical pages number. |
| */ |
| private Button fSetVPagesNumber; |
| /** |
| * Flag whether to use current zoom or not. |
| */ |
| private Button fUseCurrentZoom; |
| /** |
| * Flag whether to print all pages or not |
| */ |
| private Button fAllPages; |
| /** |
| * Flag whether to print current page only |
| */ |
| private Button fCurrentPage; |
| /** |
| * Button to select a page list. |
| */ |
| private Button fPageList; |
| /** |
| * Button to select a page range. |
| */ |
| private Button fPageRange; |
| /** |
| * Text field to enter from page. |
| */ |
| private Text fFromPage; |
| /** |
| * Text field to enter to page. |
| */ |
| private Text fToPage; |
| /** |
| * The sequence diagram widget reference. |
| */ |
| private SDWidget fSdView; |
| /** |
| * Text field for number of horizontal pages |
| */ |
| private Text fHorPagesNum; |
| /** |
| * Text field for number of vertical pages |
| */ |
| private Text fVertPagesNum; |
| /** |
| * Text field for toal number of pages |
| */ |
| private Text fTotalPages; |
| /** |
| * A modify listener implementation to handle modifications. |
| */ |
| private ModifyListener fModifyListener; |
| /** |
| * A selection listener implementation to handle selections. |
| */ |
| private SelectionListener fSelectionListener; |
| /** |
| * Local canvas displaying sequence diagram overview. |
| */ |
| private LocalSD fOverviewCanvas; |
| /** |
| * Number of pages |
| */ |
| private int fNbPages = 0; |
| /** |
| * Number of selected pages. |
| */ |
| private int fPageNum = -1; |
| /** |
| * Number of first page. |
| */ |
| private int fFirstPage = -1; |
| /** |
| * List of pages to print. |
| */ |
| private int fPagesList[]; |
| |
| /** |
| * Value for dividing the sequence diagram into pages |
| */ |
| private float fStepX; |
| |
| /** |
| * Value for dividing the sequence diagram into pages |
| */ |
| private float fStepY; |
| |
| /** |
| * Value for dividing the sequence diagram into pages |
| */ |
| private float sTX; |
| |
| /** |
| * Value for dividing the sequence diagram into pages |
| */ |
| private float sTY; |
| |
| /** |
| * Page which to print from. |
| */ |
| private int fFrom; |
| /** |
| * Page which to print to. |
| */ |
| private int fTo; |
| /** |
| * Flag for enabling multi-selection. |
| */ |
| private boolean fMultiSelection = false; |
| /** |
| * Flag for enabling area selection. |
| */ |
| private boolean fAreaSelection = false; |
| /** |
| * Flag for printing all. |
| */ |
| private boolean fPrintAll; |
| /** |
| * Flag for printing current page only. |
| */ |
| private boolean fPrintCurrent; |
| /** |
| * Flag for printing a selection of pages. |
| */ |
| private boolean fPrintSelection; |
| /** |
| * Flag for printing a range of pages. |
| */ |
| private boolean fPrintRange; |
| /** |
| * Number of selected rows |
| */ |
| private int fNbRows; |
| /** |
| * Number of selected lines |
| */ |
| private int fNbLines; |
| /** |
| * The zoom factor. |
| */ |
| private float fZoomFactor; |
| /** |
| * The printer data reference. |
| */ |
| private PrinterData fPrinterData; |
| /** |
| * The diagram tooltip to show if necessary. |
| */ |
| private DiagramToolTip fToolTip = null; |
| /** |
| * Label for current selection. |
| */ |
| private Label fCurrentSelection; |
| /** |
| * The shell reference. |
| */ |
| private Shell fShell; |
| /** |
| * Button to open printer dialog from OS. |
| */ |
| private Button fPrinterDialog; |
| /** |
| * Flag for showing print button. |
| */ |
| private boolean fShowPrintButton; |
| /** |
| * Test value |
| */ |
| private int fTest = 3; |
| /** |
| * Parent wizard page if used as wizard |
| */ |
| private WizardPage fParentWizardPage = null; |
| /** |
| * Reference to parent print dialog. |
| */ |
| private SDPrintDialog fParentDialog = null; |
| |
| // ------------------------------------------------------------------------ |
| // Helper Class |
| // ------------------------------------------------------------------------ |
| /** |
| * Local sequence diagram widget used to display overview of sequence |
| * diagram to print. |
| * |
| * @version 1.0 |
| */ |
| private class LocalSD extends SDWidget { |
| |
| /** |
| * Constructor |
| * |
| * @param c |
| * Parent composite |
| * @param s |
| * Style bits |
| */ |
| public LocalSD(Composite c, int s) { |
| super(c, s); |
| } |
| |
| @Override |
| public int getContentsHeight() { |
| if (fSdView.getContentsHeight() > fSdView.getContentsHeight()) { |
| return (int) (fSdView.getVisibleHeight() / (float) fTest / fSdView.getZoomValue()); |
| } |
| return super.getContentsHeight(); |
| } |
| |
| @Override |
| public int getContentsWidth() { |
| if (fSdView.getVisibleWidth() > fSdView.getContentsWidth()) { |
| return (int) (fSdView.getVisibleWidth() / (float) fTest / fSdView.getZoomValue()); |
| } |
| return super.getContentsWidth(); |
| } |
| |
| @Override |
| protected void contentsMouseHover(MouseEvent event) { |
| // Do nothing |
| } |
| |
| /** |
| * Creates page selection images. |
| * |
| * @param img |
| * - Overview image |
| * @param width |
| * -The width value |
| * @param stepX |
| * - Step X |
| * @param height |
| * - Height value |
| * @param stepY |
| * - Step Y |
| * @return new image |
| */ |
| protected Image createPagesSelectionImages(Image img, int width, float stepX, int height, float stepY) { |
| |
| Image over = new Image(super.getShell().getDisplay(), img.getImageData()); |
| |
| for (int pageIndex = 0; pageIndex < fPagesList.length; pageIndex++) { |
| |
| int pageNum = fPagesList[pageIndex]; |
| |
| if (getPagesForSelection() > 0 && pageNum > 0) { |
| int line = pageNum / getNbRow(); |
| int row = pageNum % getNbRow(); |
| if (row != 0) { |
| line++; |
| } else { |
| row = getNbRow(); |
| } |
| |
| line--; |
| row--; |
| |
| Image toDel = over; |
| if (fOverviewCanvas.isFocusControl()) { |
| over = new Image(super.getShell().getDisplay(), drawRegionSelected(toDel, |
| new Rectangle(contentsToViewX((int) (row * stepX * fOverviewCanvas.getZoomValue())), contentsToViewY((int) (line * stepY * fOverviewCanvas.getZoomValue())), |
| ((int) (stepX * fOverviewCanvas.getZoomValue())), ((int) (stepY * fOverviewCanvas.getZoomValue()))), FOCUS_COLOR)); |
| } else { |
| over = new Image(super.getShell().getDisplay(), drawRegionSelected(toDel, |
| new Rectangle(contentsToViewX((int) (row * stepX * fOverviewCanvas.getZoomValue())), contentsToViewY((int) (line * stepY * fOverviewCanvas.getZoomValue())), |
| ((int) (stepX * fOverviewCanvas.getZoomValue())), ((int) (stepY * fOverviewCanvas.getZoomValue()))), NON_FOCUS_COLOR)); |
| } |
| toDel.dispose(); |
| } |
| } |
| |
| Arrays.sort(fPagesList); |
| int pos = Arrays.binarySearch(fPagesList, fPageNum); |
| if ((pos < 0) && (getPagesForSelection() > 0 && fPageNum > 0)) { |
| int line = fPageNum / getNbRow(); |
| int row = fPageNum % getNbRow(); |
| if (row != 0) { |
| line++; |
| } else { |
| row = getNbRow(); |
| } |
| |
| line--; |
| row--; |
| |
| Image toDel = over; |
| over = new Image(super.getShell().getDisplay(), drawRegionSelected(toDel, new Rectangle(contentsToViewX((int) (row * stepX * fOverviewCanvas.getZoomValue())), contentsToViewY((int) (line * stepY * fOverviewCanvas.getZoomValue())), |
| ((int) (stepX * fOverviewCanvas.getZoomValue())), ((int) (stepY * fOverviewCanvas.getZoomValue()))), NON_FOCUS_COLOR)); |
| toDel.dispose(); |
| } |
| |
| GC imGC2 = new GC(over); |
| imGC2.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_BLACK)); |
| NGC imGC = new NGC(fOverviewCanvas, imGC2); |
| for (int i = 0, x = 0; x <= width && stepX > 0; i++, x = (int) (i * stepX)) { |
| imGC.drawLine(x, 0, x, height); |
| } |
| |
| for (int j = 0, y = 0; y <= height && stepY > 0; j++, y = (int) (j * stepY)) { |
| imGC.drawLine(0, y, width, y); |
| } |
| |
| imGC2.dispose(); |
| imGC.dispose(); |
| return over; |
| } |
| |
| @Override |
| protected void drawContents(GC gc, int clipx, int clipy, int clipw, int cliph) { |
| |
| Image dbuffer = getDrawBuffer(); |
| computeStepXY(); |
| Image d; |
| |
| int lw = (int) (getContentsWidth() / getZoomValue()); |
| if (getContentsWidth() < getVisibleWidth()) { |
| lw = (int) (getVisibleWidth() / getZoomValue()); |
| } |
| |
| int lh = (int) (getContentsHeight() / getZoomValue()); |
| if (getContentsHeight() < getVisibleHeight()) { |
| lh = (int) (getVisibleHeight() / getZoomValue()); |
| } |
| d = createPagesSelectionImages(dbuffer, lw, fStepX, lh, fStepY); |
| |
| if (!isEnabled()) { |
| Image toDel = d; |
| d = new Image(super.getShell().getDisplay(), drawRegionSelected(d, new Rectangle(0, 0, lw, lh), NON_FOCUS_COLOR)); |
| toDel.dispose(); |
| } |
| |
| Rectangle area = getClientArea(); |
| int w = d.getBounds().width; |
| int h = d.getBounds().height; |
| gc.drawImage(d, 0, 0, w, h, 0, 0, area.width, area.height); |
| |
| fTotalPages.setText(Integer.valueOf(maxNumOfPages()).toString()); |
| displayPageNum(); |
| dbuffer.dispose(); |
| d.dispose(); |
| gc.dispose(); |
| } |
| |
| @Override |
| protected void keyPressedEvent(KeyEvent e) { |
| if (e.keyCode == SWT.CTRL) { |
| fMultiSelection = true; |
| } |
| if (e.keyCode == SWT.SHIFT) { |
| fAreaSelection = true; |
| } |
| if (e.keyCode == SWT.ARROW_DOWN) { |
| if (fPageNum + getNbRow() <= maxNumOfPages()) { |
| fPageNum += getNbRow(); |
| } |
| int line = fPageNum / getNbRow(); |
| int row = fPageNum % getNbRow(); |
| if (row == 0) { |
| line--; |
| } |
| if ((line + 1) * fStepY > (fOverviewCanvas.getContentsY() + fOverviewCanvas.getVisibleHeight()) / fOverviewCanvas.getZoomValue()) { |
| fOverviewCanvas.scrollBy(0, (int) (fStepY * fOverviewCanvas.getZoomValue())); |
| } |
| } |
| if (e.keyCode == SWT.ARROW_UP) { |
| if (fPageNum - getNbRow() > 0) { |
| fPageNum -= getNbRow(); |
| } |
| int line = fPageNum / getNbRow(); |
| int row = fPageNum % getNbRow(); |
| if (row == 0) { |
| line--; |
| } |
| if ((line) * fStepY <= fOverviewCanvas.getContentsY() / fOverviewCanvas.getZoomValue()) { |
| fOverviewCanvas.scrollBy(0, -(int) (fStepY * fOverviewCanvas.getZoomValue())); |
| } |
| } |
| if (e.keyCode == SWT.ARROW_LEFT) { |
| if ((fPageNum - 2) / getNbRow() == (fPageNum - 1) / getNbRow() && fPageNum > 1) { |
| fPageNum--; |
| } |
| int row = fPageNum % getNbRow(); |
| if ((row - 1) * fStepX < (fOverviewCanvas.getContentsX()) / fOverviewCanvas.getZoomValue()) { |
| fOverviewCanvas.scrollBy(-(int) (fStepX * fOverviewCanvas.getZoomValue()), 0); |
| } |
| } |
| if (e.keyCode == SWT.ARROW_RIGHT) { |
| if ((fPageNum - 1) / getNbRow() == fPageNum / getNbRow()) { |
| fPageNum++; |
| } |
| int row = fPageNum % getNbRow(); |
| if (row == 0) { |
| row = getNbRow(); |
| } |
| if ((row) * fStepX > (fOverviewCanvas.getContentsX() + fOverviewCanvas.getVisibleWidth()) / fOverviewCanvas.getZoomValue()) { |
| fOverviewCanvas.scrollBy((int) (fStepX * fOverviewCanvas.getZoomValue()), 0); |
| } |
| } |
| |
| if (e.keyCode == 32 && fPageNum > -1) { |
| Arrays.sort(fPagesList); |
| int pos = Arrays.binarySearch(fPagesList, fPageNum); |
| if (pos < 0) { |
| addToPagesList(fPageNum); |
| } else { |
| removeFromPagesList(fPageNum); |
| } |
| } |
| |
| if (!fAreaSelection && !fMultiSelection) { |
| fFirstPage = fPageNum; |
| fPagesList = new int[1]; |
| fPagesList[0] = fPageNum; |
| } else if ((fPageNum != -1) && (fAreaSelection) && (fFirstPage != -1)) { |
| fPagesList = new int[0]; |
| int line1 = fFirstPage / getNbRow(); |
| int row1 = fFirstPage % getNbRow(); |
| if (row1 != 0) { |
| line1++; |
| } else { |
| row1 = getNbRow(); |
| } |
| |
| int line2 = fPageNum / getNbRow(); |
| int row2 = fPageNum % getNbRow(); |
| if (row2 != 0) { |
| line2++; |
| } else { |
| row2 = getNbRow(); |
| } |
| |
| int temp; |
| if (line1 > line2) { |
| temp = line2; |
| line2 = line1; |
| line1 = temp; |
| } |
| |
| if (row1 > row2) { |
| temp = row2; |
| row2 = row1; |
| row1 = temp; |
| } |
| |
| for (int i = row1 - 1; i < row2; i++) { |
| for (int j = line1 - 1; j < line2; j++) { |
| addToPagesList(i + j * getNbRow() + 1); |
| } |
| } |
| } |
| displayPageNum(); |
| fOverviewCanvas.redraw(); |
| } |
| |
| @Override |
| protected void keyReleasedEvent(KeyEvent e) { |
| if (e.keyCode == SWT.CTRL) { |
| fMultiSelection = false; |
| } |
| if (e.keyCode == SWT.SHIFT) { |
| fAreaSelection = false; |
| } |
| } |
| |
| @Override |
| protected void contentsMouseDownEvent(MouseEvent event) { |
| |
| computeStepXY(); |
| int x1 = (int) ((event.x / fOverviewCanvas.getZoomValue()) / fStepX); |
| int x2 = (int) ((event.y / fOverviewCanvas.getZoomValue()) / fStepY); |
| |
| int oldPage = fPageNum; |
| |
| fPageNum = x1 + x2 * getNbRow() + 1; |
| |
| if (fPageNum > maxNumOfPages()) { |
| fPageNum = oldPage; |
| return; |
| } |
| |
| if (!fAreaSelection) { |
| fFirstPage = fPageNum; |
| } |
| |
| if ((fPageNum != -1) && (fMultiSelection)) { |
| Arrays.sort(fPagesList); |
| int pos = Arrays.binarySearch(fPagesList, fPageNum); |
| if (pos < 0) { |
| addToPagesList(fPageNum); |
| } else { |
| removeFromPagesList(fPageNum); |
| } |
| } else if ((fPageNum != -1) && (fAreaSelection) && (fFirstPage != -1)) { |
| |
| fPagesList = new int[0]; |
| |
| int line1 = fFirstPage / getNbRow(); |
| int row1 = fFirstPage % getNbRow(); |
| if (row1 != 0) { |
| line1++; |
| } else { |
| row1 = getNbRow(); |
| } |
| |
| int line2 = fPageNum / getNbRow(); |
| int row2 = fPageNum % getNbRow(); |
| if (row2 != 0) { |
| line2++; |
| } else { |
| row2 = getNbRow(); |
| } |
| |
| int temp; |
| if (line1 > line2) { |
| temp = line2; |
| line2 = line1; |
| line1 = temp; |
| } |
| |
| if (row1 > row2) { |
| temp = row2; |
| row2 = row1; |
| row1 = temp; |
| } |
| |
| for (int i = row1 - 1; i < row2; i++) { |
| for (int j = line1 - 1; j < line2; j++) { |
| addToPagesList(i + j * getNbRow() + 1); |
| } |
| } |
| } else { |
| fPagesList = new int[1]; |
| fPagesList[0] = fPageNum; |
| } |
| if ((event.stateMask & SWT.CTRL) != 0) { |
| fMultiSelection = true; |
| } |
| displayPageNum(); |
| redraw(); |
| } |
| |
| @Override |
| protected void contentsMouseMoveEvent(MouseEvent e) { |
| fToolTip.hideToolTip(); |
| } |
| |
| @Override |
| public void resizeContents(int w, int h) { |
| super.resizeContents(w, h); |
| } |
| |
| } |
| |
| /** |
| * A traverse listener implementation. |
| */ |
| protected static class LocalTraverseListener implements TraverseListener { |
| @Override |
| public void keyTraversed(TraverseEvent e) { |
| if ((e.detail == SWT.TRAVERSE_TAB_NEXT) || (e.detail == SWT.TRAVERSE_TAB_PREVIOUS)) { |
| e.doit = true; |
| } |
| } |
| } |
| |
| // ------------------------------------------------------------------------ |
| // Constructors |
| // ------------------------------------------------------------------------ |
| /** |
| * Constructor |
| * |
| * @param shell |
| * The shell reference |
| * @param sdWidget |
| * The sequence diagram widget reference |
| */ |
| public SDPrintDialogUI(Shell shell, SDWidget sdWidget) { |
| this(shell, sdWidget, false); |
| } |
| |
| /** |
| * Constructor |
| * |
| * @param shell |
| * The shell reference |
| * @param sdWidget |
| * The sequence diagram widget reference |
| * @param showPrintBtn |
| * Flag for showing print buttons |
| */ |
| public SDPrintDialogUI(Shell shell, SDWidget sdWidget, boolean showPrintBtn) { |
| fShell = shell; |
| fSdView = sdWidget; |
| fShowPrintButton = showPrintBtn; |
| |
| fPrinterData = Printer.getDefaultPrinterData(); |
| if (fPrinterData != null) { |
| fPrinterData.scope = PrinterData.SELECTION; |
| } |
| |
| fPagesList = new int[0]; |
| |
| fSelectionListener = new SelectionListener() { |
| |
| @Override |
| public void widgetSelected(SelectionEvent e) { |
| if (fUseCurrentZoom.getSelection()) { |
| fHorPagesNum.setEnabled(false); |
| fVertPagesNum.setEnabled(false); |
| } |
| if (fSetHPagesNumber.getSelection()) { |
| fHorPagesNum.setEnabled(true); |
| fVertPagesNum.setEnabled(false); |
| if (fCurrentPage.getSelection()) { |
| fCurrentPage.setSelection(false); |
| fAllPages.setSelection(true); |
| } |
| if ("".equals(fHorPagesNum.getText())) { //$NON-NLS-1$ |
| fHorPagesNum.setText("1"); //$NON-NLS-1$ |
| } |
| } |
| if (fSetVPagesNumber.getSelection()) { |
| fHorPagesNum.setEnabled(false); |
| fVertPagesNum.setEnabled(true); |
| if (fCurrentPage.getSelection()) { |
| fCurrentPage.setSelection(false); |
| fAllPages.setSelection(true); |
| } |
| if ("".equals(fVertPagesNum.getText())) { //$NON-NLS-1$ |
| fVertPagesNum.setText("1"); //$NON-NLS-1$ |
| } |
| } |
| if (fCurrentPage.getSelection() || fAllPages.getSelection() || fPageList.getSelection()) { |
| fFromPage.setEnabled(false); |
| fToPage.setEnabled(false); |
| } else { |
| fFromPage.setEnabled(true); |
| fToPage.setEnabled(true); |
| } |
| |
| fCurrentPage.setEnabled(fUseCurrentZoom.getSelection()); |
| fOverviewCanvas.setEnabled(fPageList.getSelection()); |
| if (fOverviewCanvas.isEnabled() && (e.widget == fUseCurrentZoom || e.widget == fSetHPagesNumber || e.widget == fSetVPagesNumber)) { |
| fPagesList = new int[1]; |
| fPagesList[0] = 1; |
| fPageNum = 1; |
| fFirstPage = 1; |
| } else if ((fOverviewCanvas.isEnabled() && (e.widget == fPageList)) && |
| (fPagesList == null || fPagesList.length <= 0)) { |
| |
| fPagesList = new int[1]; |
| fPagesList[0] = 1; |
| fPageNum = 1; |
| fFirstPage = 1; |
| } |
| computeStepXY(); |
| fTotalPages.setText(Integer.valueOf(maxNumOfPages()).toString()); |
| fOverviewCanvas.redraw(); |
| fOverviewCanvas.update(); |
| } |
| |
| @Override |
| public void widgetDefaultSelected(SelectionEvent e) { |
| fPagesList = new int[0]; |
| computeStepXY(); |
| fOverviewCanvas.redraw(); |
| } |
| |
| }; |
| |
| fModifyListener = e -> { |
| fPagesList = new int[0]; |
| computeStepXY(); |
| fTotalPages.setText(Integer.valueOf(maxNumOfPages()).toString()); |
| fOverviewCanvas.redraw(); |
| }; |
| } |
| |
| // ------------------------------------------------------------------------ |
| // Methods |
| // ------------------------------------------------------------------------ |
| |
| /** |
| * Creates new grid data object. |
| * |
| * @param span |
| * horizontal span. |
| * @return grid data |
| */ |
| protected GridData newGridData(int span) { |
| GridData data = new GridData(GridData.GRAB_VERTICAL | GridData.VERTICAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL); |
| data.horizontalSpan = span; |
| return data; |
| } |
| |
| /** |
| * Creates the dialog area. |
| * |
| * @param parent |
| * The parent composite |
| * @return dialog control |
| */ |
| public Control createDialogArea(Composite parent) { |
| |
| GridLayout parentLayout = new GridLayout(); |
| parentLayout.numColumns = 6; |
| parent.setLayout(parentLayout); |
| |
| Group g1 = new Group(parent, SWT.SHADOW_NONE); |
| g1.setText(Messages.SequenceDiagram_ZoomOption); |
| g1.setLayoutData(newGridData(3)); |
| GridLayout g1layout = new GridLayout(); |
| g1layout.numColumns = 2; |
| g1.setLayout(g1layout); |
| |
| fUseCurrentZoom = new Button(g1, SWT.RADIO); |
| fUseCurrentZoom.setText(Messages.SequenceDiagram_UseCurrentZoom); |
| fUseCurrentZoom.setLayoutData(newGridData(2)); |
| fUseCurrentZoom.addSelectionListener(fSelectionListener); |
| |
| fSetHPagesNumber = new Button(g1, SWT.RADIO); |
| fSetHPagesNumber.setText(Messages.SequenceDiagram_NumberOfHorizontalPages); |
| fSetHPagesNumber.setLayoutData(newGridData(1)); |
| fSetHPagesNumber.addSelectionListener(fSelectionListener); |
| |
| fHorPagesNum = new Text(g1, SWT.SINGLE | SWT.BORDER); |
| fHorPagesNum.addModifyListener(fModifyListener); |
| |
| fSetVPagesNumber = new Button(g1, SWT.RADIO); |
| fSetVPagesNumber.setText(Messages.SequenceDiagram_NumberOfVerticalPages); |
| fSetVPagesNumber.setLayoutData(newGridData(1)); |
| fSetVPagesNumber.addSelectionListener(fSelectionListener); |
| |
| fVertPagesNum = new Text(g1, SWT.SINGLE | SWT.BORDER); |
| fVertPagesNum.addModifyListener(fModifyListener); |
| |
| Label nbTotal = new Label(g1, SWT.SHADOW_NONE | SWT.RIGHT); |
| nbTotal.setText(Messages.TotalNumberOfPages); |
| // nbTotal.setLayoutData(newGridData(1)); |
| |
| fTotalPages = new Text(g1, SWT.SINGLE | SWT.BORDER | SWT.READ_ONLY); |
| // nbHV.addModifyListener(modifListener); |
| |
| Group g2 = new Group(parent, SWT.SHADOW_NONE); |
| g2.setText(Messages.SequenceDiagram_Preview); |
| GridData data = new GridData(GridData.GRAB_VERTICAL | GridData.VERTICAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL); |
| data.horizontalSpan = 3; |
| data.verticalSpan = 2; |
| g2.setLayoutData(data); |
| GridLayout g2layout = new GridLayout(); |
| // g2layout. |
| g2layout.numColumns = 1; |
| // SVLayout g2layout = new SVLayout(); |
| g2.setLayout(g2layout); |
| |
| GridData data2 = new GridData(GridData.GRAB_VERTICAL | GridData.VERTICAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL); |
| data2.horizontalSpan = 1; |
| data2.verticalSpan = 1; |
| |
| fOverviewCanvas = new LocalSD(g2, SWT.NO_BACKGROUND); |
| GridData seqDiagLayoutData = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL); |
| fOverviewCanvas.setLayoutData(seqDiagLayoutData); |
| // overviewCanvas.resizeContents(100,100); |
| if (fSdView.getContentsWidth() < fSdView.getVisibleWidth() && fSdView.getContentsHeight() < fSdView.getVisibleHeight()) { |
| fTest = 3; |
| } else { |
| fTest = 10; |
| } |
| fOverviewCanvas.setFrame(fSdView.getFrame(), true); |
| fOverviewCanvas.setZoomValue((float) 1 / fTest); |
| fOverviewCanvas.setCornerControl(null); |
| seqDiagLayoutData.widthHint = fOverviewCanvas.getContentsWidth() / fTest; |
| seqDiagLayoutData.widthHint = fOverviewCanvas.getFrame().getWidth() / fTest + 15; |
| |
| if (fSdView.getVisibleWidth() < fSdView.getContentsWidth()) { |
| seqDiagLayoutData.widthHint = fOverviewCanvas.getContentsWidth() / fTest; |
| if (seqDiagLayoutData.widthHint > Display.getDefault().getClientArea().width / 4) { |
| seqDiagLayoutData.widthHint = Display.getDefault().getClientArea().width / 4; |
| } |
| } else { |
| seqDiagLayoutData.widthHint = fOverviewCanvas.getFrame().getWidth() / fTest + 15; |
| } |
| |
| if (fSdView.getVisibleHeight() < fSdView.getContentsHeight()) { |
| seqDiagLayoutData.heightHint = fOverviewCanvas.getContentsHeight() / fTest; |
| if (seqDiagLayoutData.heightHint > Display.getDefault().getClientArea().width / 4) { |
| seqDiagLayoutData.heightHint = Display.getDefault().getClientArea().width / 4; |
| } |
| } else { |
| seqDiagLayoutData.heightHint = fOverviewCanvas.getFrame().getHeight() / fTest; |
| } |
| |
| fOverviewCanvas.setEnabled(false); |
| |
| fCurrentSelection = new Label(g2, SWT.SHADOW_NONE | SWT.LEFT); |
| fCurrentSelection.setLayoutData(newGridData(1)); |
| |
| Group g3 = new Group(parent, SWT.SHADOW_NONE); |
| g3.setText(Messages.SequenceDiagram_PrintRange); |
| g3.setLayoutData(newGridData(3)); |
| GridLayout g3layout = new GridLayout(); |
| g3layout.numColumns = 4; |
| g3.setLayout(g3layout); |
| |
| fAllPages = new Button(g3, SWT.RADIO); |
| fAllPages.setText(Messages.SequenceDiagram_AllPages); |
| fAllPages.setLayoutData(newGridData(4)); |
| fAllPages.addSelectionListener(fSelectionListener); |
| |
| fCurrentPage = new Button(g3, SWT.RADIO); |
| fCurrentPage.setText(Messages.SequenceDiagram_CurrentView); |
| fCurrentPage.setLayoutData(newGridData(4)); |
| fCurrentPage.setEnabled(true); |
| fCurrentPage.setSelection(true); |
| fCurrentPage.addSelectionListener(fSelectionListener); |
| |
| fPageList = new Button(g3, SWT.RADIO); |
| fPageList.setText(Messages.SequenceDiagram_SelectedPages); |
| fPageList.setLayoutData(newGridData(4)); |
| fPageList.addSelectionListener(fSelectionListener); |
| |
| fPageRange = new Button(g3, SWT.RADIO); |
| fPageRange.setText(Messages.SequenceDiagram_FromPage); |
| fPageRange.setLayoutData(newGridData(1)); |
| fPageRange.addSelectionListener(fSelectionListener); |
| |
| fFromPage = new Text(g3, SWT.SINGLE | SWT.BORDER); |
| |
| Label labelTo = new Label(g3, SWT.CENTER); |
| labelTo.setText(Messages.SequenceDiagram_to); |
| |
| fToPage = new Text(g3, SWT.SINGLE | SWT.BORDER); |
| |
| fToolTip = new DiagramToolTip(fOverviewCanvas); |
| |
| fOverviewCanvas.getViewControl().addMouseTrackListener(new MouseTrackListener() { |
| @Override |
| public void mouseEnter(MouseEvent e) { |
| fToolTip.hideToolTip(); |
| } |
| |
| @Override |
| public void mouseExit(MouseEvent e) { |
| fToolTip.hideToolTip(); |
| } |
| |
| @Override |
| public void mouseHover(MouseEvent e) { |
| int x1 = (int) (fOverviewCanvas.viewToContentsX(e.x) / fOverviewCanvas.getZoomValue() / fStepX); |
| int x2 = (int) (fOverviewCanvas.viewToContentsY(e.y) / fOverviewCanvas.getZoomValue() / fStepY); |
| int num = x1 + x2 * getNbRow() + 1; |
| if (num > maxNumOfPages()) { |
| return; |
| } |
| if (num > 0) { |
| fToolTip.showToolTip(String.valueOf(num)); |
| displayPageNum(); |
| } else { |
| fCurrentSelection.setText("");//$NON-NLS-1$ |
| fToolTip.hideToolTip(); |
| } |
| } |
| |
| }); |
| |
| fOverviewCanvas.addTraverseListener(new LocalTraverseListener()); |
| |
| fOverviewCanvas.addFocusListener(new FocusListener() { |
| @Override |
| public void focusGained(FocusEvent e) { |
| fOverviewCanvas.redraw(); |
| } |
| |
| @Override |
| public void focusLost(FocusEvent e) { |
| fOverviewCanvas.redraw(); |
| } |
| }); |
| |
| if (fShowPrintButton) { |
| Composite printerDlg = new Composite(parent, SWT.NONE); |
| data = new GridData(SWT.FILL, SWT.DEFAULT, true, false); |
| data.horizontalSpan = 6; |
| parentLayout = new GridLayout(); |
| parentLayout.numColumns = 2; |
| printerDlg.setLayout(parentLayout); |
| printerDlg.setLayoutData(data); |
| |
| Label label = new Label(printerDlg, SWT.NONE); |
| label.setLayoutData(new GridData(SWT.FILL, SWT.DEFAULT, true, false)); |
| fPrinterDialog = new Button(printerDlg, SWT.PUSH); |
| fPrinterDialog.setText(Messages.SequenceDiagram_Printer); |
| |
| fPrinterDialog.addSelectionListener(new SelectionListener() { |
| @Override |
| public void widgetSelected(SelectionEvent e) { |
| printButtonSelected(); |
| } |
| |
| @Override |
| public void widgetDefaultSelected(SelectionEvent e) { |
| // Do nothing |
| } |
| |
| }); |
| } |
| |
| updatePrinterStatus(); |
| |
| return parent; |
| } |
| |
| /** |
| * Get number of pages for selection. |
| * |
| * @return number of pages for selection. |
| */ |
| public int getPagesForSelection() { |
| return fNbPages; |
| } |
| |
| /** |
| * Handler for when the OK button is pressed |
| * |
| * @return True if the operation was successful, false if there was an error |
| */ |
| public boolean okPressed() { |
| fPrintAll = fAllPages.getSelection(); |
| fPrintCurrent = fCurrentPage.getSelection(); |
| fPrintSelection = fPageList.getSelection(); |
| fPrintRange = fPageRange.getSelection(); |
| try { |
| if (fPrintRange) { |
| fFrom = Integer.valueOf(fFromPage.getText()).intValue(); |
| fTo = Integer.valueOf(fToPage.getText()).intValue(); |
| if (fFrom > maxNumOfPages() || fTo > maxNumOfPages() || fFrom <= 0 || fTo <= 0) { |
| TraceUtils.displayErrorMsg(Messages.SequenceDiagram_Error, Messages.SequenceDiagram_InvalidRange); |
| return false; |
| } |
| } else if (fSetHPagesNumber.getSelection() && fNbPages <= 0) { |
| TraceUtils.displayErrorMsg(Messages.SequenceDiagram_Error, Messages.SequenceDiagram_InvalidNbHorizontal); |
| return false; |
| } else if (fSetVPagesNumber.getSelection() && fNbPages <= 0) { |
| TraceUtils.displayErrorMsg(Messages.SequenceDiagram_Error, Messages.SequenceDiagram_InvalidNbVertical); |
| return false; |
| } else if (fPrintSelection && getPageList().length <= 0) { |
| TraceUtils.displayErrorMsg(Messages.SequenceDiagram_Error, Messages.SequenceDiagram_NoPageSelected); |
| return false; |
| } |
| |
| } catch (Exception e) { |
| TraceUtils.displayErrorMsg(Messages.SequenceDiagram_Error, Messages.SequenceDiagram_InvalidRange); |
| fFrom = 0; |
| fTo = 0; |
| return false; |
| } |
| |
| return true; |
| } |
| |
| /** |
| * Draws region that was selected |
| * |
| * @param img |
| * The corresponding image |
| * @param r |
| * The selected rectangle. |
| * @param color |
| * The color to use for selection |
| * @return image data reference |
| */ |
| public ImageData drawRegionSelected(Image img, Rectangle r, RGB color) { |
| ImageData id = img.getImageData(); |
| for (int a = 0; a < r.width && r.x + a < id.width; a++) { |
| for (int b = 0; b < r.height && r.y + b < id.height; b++) { |
| int index = id.getPixel(r.x + a, r.y + b); |
| RGB rgb = id.palette.getRGB(index); |
| rgb = combine(color, rgb); |
| id.setPixel(r.x + a, r.y + b, id.palette.getPixel(rgb)); |
| } |
| } |
| return id; |
| } |
| |
| /** |
| * Combines two RGB colors. |
| * |
| * @param front |
| * The front color |
| * @param back |
| * The back color |
| * @return new RGB color |
| */ |
| public static RGB combine(RGB front, RGB back) { |
| int _af = 128; |
| int _ab = 200; |
| |
| double af = (_af) / 255.0; |
| double rf = front.red; |
| double gf = front.green; |
| double bf = front.blue; |
| |
| double ab = (_ab) / 255.0; |
| double rb = back.red; |
| double gb = back.green; |
| double bb = back.blue; |
| |
| double k = (1.0 - af) * ab; |
| int r = (int) ((af * rf + k * rb)); |
| int g = (int) ((af * gf + k * gb)); |
| int b = (int) ((af * bf + k * bb)); |
| |
| return new RGB(r, g, b); |
| } |
| |
| /** |
| * Computes value for X coordinates step and Y coordinates step. |
| */ |
| protected void computeStepXY() { |
| float cw = fOverviewCanvas.getContentsWidth() / fOverviewCanvas.getZoomValue(); |
| float ch = fOverviewCanvas.getContentsHeight() / fOverviewCanvas.getZoomValue(); |
| try { |
| if (fPrinterData == null) { |
| fStepX = 0; |
| fStepY = 0; |
| fNbPages = 0; |
| fZoomFactor = 0; |
| } else { |
| Printer printer = new Printer(fPrinterData); |
| if (fSetHPagesNumber.getSelection()) { |
| fNbPages = Integer.valueOf(fHorPagesNum.getText()).intValue(); |
| float z1 = fSdView.getContentsWidth() / cw; |
| float z2 = printer.getClientArea().width / ((float) fSdView.getContentsWidth() / fNbPages); |
| |
| fStepY = printer.getClientArea().height / z1 / z2; |
| fStepX = cw / fNbPages; |
| } else if (fSetVPagesNumber.getSelection()) { |
| fNbPages = Integer.valueOf(fVertPagesNum.getText()).intValue(); |
| float z1 = fSdView.getContentsHeight() / ch; |
| float z2 = printer.getClientArea().height / ((float) fSdView.getContentsHeight() / fNbPages); |
| fStepX = printer.getClientArea().width / z1 / z2; |
| fStepY = ch / fNbPages; |
| } else { |
| float z1 = fSdView.getContentsWidth() / (cw); |
| fStepX = fSdView.getVisibleWidth() / z1; |
| fNbPages = Math.round(cw / fStepX); |
| if (fNbPages == 0) { |
| fNbPages = 1; |
| } |
| int pw = printer.getClientArea().width; |
| int ph = printer.getClientArea().height; |
| float z2 = pw / ((float) fSdView.getContentsWidth() / fNbPages); |
| fStepY = ph / z1 / z2; |
| } |
| } |
| } catch (NumberFormatException e) { |
| fStepX = fStepY = fNbPages = 0; |
| fZoomFactor = 0; |
| } |
| sTX = fStepX * (fSdView.getContentsWidth() / cw); |
| sTY = fStepY * (fSdView.getContentsHeight() / ch); |
| float rat = 1; |
| if ((fSdView.getVisibleWidth() > fSdView.getContentsWidth()) && (fSetVPagesNumber.getSelection() || fSetHPagesNumber.getSelection())) { |
| rat = (float) fSdView.getVisibleWidth() / (float) fSdView.getContentsWidth(); |
| } |
| fZoomFactor = (fOverviewCanvas.getContentsWidth() / cw) / fOverviewCanvas.getZoomFactor() * rat; |
| } |
| |
| /** |
| * Returns the pages list. |
| * |
| * @return the pages list. |
| */ |
| public int[] getPageList() { |
| return Arrays.copyOf(fPagesList, fPagesList.length); |
| } |
| |
| /** |
| * Adds a page to pages list. |
| * |
| * @param num |
| * The number of the the new page |
| */ |
| public void addToPagesList(int num) { |
| int temp[] = new int[fPagesList.length + 1]; |
| System.arraycopy(fPagesList, 0, temp, 0, fPagesList.length); |
| temp[temp.length - 1] = num; |
| fPagesList = new int[temp.length]; |
| System.arraycopy(temp, 0, fPagesList, 0, temp.length); |
| } |
| |
| /** |
| * Removes a page from the pages list. |
| * |
| * @param num |
| * The number of the page to remove |
| */ |
| public void removeFromPagesList(int num) { |
| int pos = Arrays.binarySearch(fPagesList, num); |
| int temp[] = new int[fPagesList.length - 1]; |
| System.arraycopy(fPagesList, 0, temp, 0, pos); |
| System.arraycopy(fPagesList, pos + 1, temp, pos, fPagesList.length - pos - 1); |
| fPagesList = new int[temp.length]; |
| System.arraycopy(temp, 0, fPagesList, 0, temp.length); |
| } |
| |
| /** |
| * Returns the maximum number of pages. |
| * |
| * @return maximum number of pages. |
| */ |
| public int maxNumOfPages() { |
| return (getNbRow() * getNbLines()); |
| } |
| |
| /** |
| * Returns the number of rows. |
| * |
| * @return number of rows. |
| */ |
| public int getNbRow() { |
| if (!fSetHPagesNumber.isDisposed()) { |
| int cw = (int) (fOverviewCanvas.getContentsWidth() / fOverviewCanvas.getZoomValue()); |
| int row = 1; |
| if (fStepX != 0) { |
| row = (int) (cw / fStepX); |
| if (fSetHPagesNumber.getSelection()) { |
| row = Math.round(cw / fStepX); |
| } else if ((cw % fStepX != 0)) { |
| row++; |
| } |
| } |
| fNbRows = row; |
| } |
| return fNbRows; |
| } |
| |
| /** |
| * Returns the number of lines. |
| * |
| * @return number of lines |
| */ |
| public int getNbLines() { |
| if (!fSetVPagesNumber.isDisposed()) { |
| int ch = (int) (fOverviewCanvas.getContentsHeight() / fOverviewCanvas.getZoomValue()); |
| int line = 1; |
| if (fStepY != 0) { |
| line = (int) (ch / fStepY); |
| if (fSetVPagesNumber.getSelection()) { |
| line = Math.round(ch / fStepY); |
| } else if (ch % fStepY != 0) { |
| line++; |
| } |
| } |
| fNbLines = line; |
| } |
| return fNbLines; |
| } |
| |
| /** |
| * Returns whether to print all pages or not. |
| * |
| * @return <code>true</code> for all pages else <code>false</code>. |
| */ |
| public boolean printAll() { |
| return fPrintAll; |
| } |
| |
| /** |
| * Returns whether to print only current page |
| * |
| * @return <code>true</code> for current page only else <code>false</code>.. |
| */ |
| public boolean printCurrent() { |
| return fPrintCurrent; |
| } |
| |
| /** |
| * Returns whether to print selected pages. |
| * |
| * @return <code>true</code> for selected pages only else <code>false</code> |
| * . |
| */ |
| public boolean printSelection() { |
| return fPrintSelection; |
| } |
| |
| /** |
| * Returns whether to print range of pages. |
| * |
| * @return <code>true</code> for range of pages only else <code>false</code> |
| * . |
| */ |
| public boolean printRange() { |
| return fPrintRange; |
| } |
| |
| /** |
| * Returns the step in X direction. |
| * |
| * @return step in X direction |
| */ |
| public float getStepX() { |
| return sTX; |
| } |
| |
| /** |
| * Returns the step in Y direction. |
| * |
| * @return step in Y direction |
| */ |
| public float getStepY() { |
| return sTY; |
| } |
| |
| /** |
| * Returns the zoom factor |
| * |
| * @return zoom factor |
| */ |
| public float getZoomFactor() { |
| return fZoomFactor; |
| } |
| |
| /** |
| * Returns the printer data reference. |
| * |
| * @return printer data reference |
| */ |
| public PrinterData getPrinterData() { |
| return fPrinterData; |
| } |
| |
| /** |
| * Returns the page number to start printing from. |
| * |
| * @return page number to start printing from |
| */ |
| public int getFrom() { |
| return fFrom; |
| } |
| |
| /** |
| * Returns the page number to print to. |
| * |
| * @return page number to print to |
| */ |
| public int getTo() { |
| return fTo; |
| } |
| |
| /** |
| * Displays current number of pages |
| */ |
| protected void displayPageNum() { |
| if (fPageNum > 0) { |
| String message = MessageFormat.format(Messages.SequenceDiagram_Page, new Object[] { Integer.valueOf(fPageNum) }); |
| fCurrentSelection.setText(message); |
| fCurrentSelection.getParent().layout(); |
| } |
| } |
| |
| /** |
| * Returns the shell reference. |
| * |
| * @return the shell reference. |
| */ |
| public Shell getShell() { |
| return fShell; |
| } |
| |
| /** |
| * Sets the shell. |
| * |
| * @param shell |
| * The shell reference. |
| */ |
| public void setShell(Shell shell) { |
| fShell = shell; |
| } |
| |
| /** |
| * Handle selection of print button. |
| */ |
| public void printButtonSelected() { |
| PrintDialog printer = new PrintDialog(getShell()); |
| if (fAllPages.getSelection()) { |
| printer.setScope(PrinterData.ALL_PAGES); |
| } |
| if (fCurrentPage.getSelection()) { |
| printer.setScope(PrinterData.SELECTION); |
| } |
| if (fPageList.getSelection()) { |
| printer.setScope(PrinterData.SELECTION); |
| } |
| if (fPageRange.getSelection()) { |
| printer.setScope(PrinterData.PAGE_RANGE); |
| fFrom = Integer.valueOf(fFromPage.getText()).intValue(); |
| fTo = Integer.valueOf(fToPage.getText()).intValue(); |
| printer.setStartPage(fFrom); |
| printer.setEndPage(fTo); |
| } |
| |
| PrinterData newPrinterData = printer.open(); |
| if (newPrinterData != null) { |
| fPrinterData = newPrinterData; |
| } |
| updatePrinterStatus(); |
| |
| if (printer.getScope() == PrinterData.ALL_PAGES) { |
| fAllPages.setSelection(true); |
| fCurrentPage.setSelection(false); |
| fPageList.setSelection(false); |
| fPageRange.setSelection(false); |
| fHorPagesNum.setEnabled(false); |
| fVertPagesNum.setEnabled(false); |
| } |
| if (printer.getScope() == PrinterData.PAGE_RANGE) { |
| fAllPages.setSelection(false); |
| fCurrentPage.setSelection(false); |
| fPageList.setSelection(false); |
| fPageRange.setSelection(true); |
| fFromPage.setEnabled(true); |
| fToPage.setEnabled(true); |
| fFromPage.setText((Integer.valueOf(printer.getStartPage())).toString()); |
| fToPage.setText((Integer.valueOf(printer.getEndPage())).toString()); |
| } |
| computeStepXY(); |
| fOverviewCanvas.redraw(); |
| } |
| |
| /** |
| * Sets parent wizard page |
| * |
| * @param parent |
| * The parent wizard page |
| */ |
| public void setParentWizardPage(WizardPage parent) { |
| fParentWizardPage = parent; |
| } |
| |
| /** |
| * Sets the parent dialog box. |
| * |
| * @param parent |
| * The parent dialog box. |
| */ |
| public void setParentDialog(SDPrintDialog parent) { |
| fParentDialog = parent; |
| } |
| |
| /** |
| * Updates the printer status |
| */ |
| protected void updatePrinterStatus() { |
| if (fParentWizardPage != null) { |
| // used in the wizard dialog |
| if (fPrinterData == null) { |
| // show error message and disable Finish button |
| fParentWizardPage.setErrorMessage(Messages.SequenceDiagram_NoPrinterSelected); |
| fParentWizardPage.setPageComplete(false); |
| } else { |
| // clear error message and enable Finish button |
| fParentWizardPage.setErrorMessage(null); |
| fParentWizardPage.setPageComplete(true); |
| } |
| } else if (fParentDialog != null) { |
| // used in the print dialog |
| if (fPrinterData == null) { |
| // show error message and disable OK button |
| fParentDialog.setErrorMessage(Messages.SequenceDiagram_NoPrinterSelected); |
| fParentDialog.setPageComplete(false); |
| } else { |
| // clear error message and enable OK button |
| fParentDialog.setErrorMessage(null); |
| fParentDialog.setPageComplete(true); |
| } |
| } |
| } |
| |
| } |