2bc082b122fdbbab71c53d0483c26cc8b4d82ba2
[deliverable/tracecompass.git] / org.eclipse.tracecompass.tmf.ui / src / org / eclipse / tracecompass / tmf / ui / views / uml2sd / dialogs / SDPrintDialogUI.java
1 /**********************************************************************
2 * Copyright (c) 2005, 2014 IBM Corporation, Ericsson
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
7 *
8 * Contributors:
9 * IBM - Initial API and implementation
10 * Bernd Hufmann - Updated for TMF
11 * Matthew Khouzam - Minor refactor
12 **********************************************************************/
13
14 package org.eclipse.tracecompass.tmf.ui.views.uml2sd.dialogs;
15
16 import java.text.MessageFormat;
17 import java.util.Arrays;
18
19 import org.eclipse.jface.dialogs.MessageDialog;
20 import org.eclipse.jface.wizard.WizardPage;
21 import org.eclipse.swt.SWT;
22 import org.eclipse.swt.events.FocusEvent;
23 import org.eclipse.swt.events.FocusListener;
24 import org.eclipse.swt.events.KeyEvent;
25 import org.eclipse.swt.events.ModifyEvent;
26 import org.eclipse.swt.events.ModifyListener;
27 import org.eclipse.swt.events.MouseEvent;
28 import org.eclipse.swt.events.MouseTrackListener;
29 import org.eclipse.swt.events.SelectionEvent;
30 import org.eclipse.swt.events.SelectionListener;
31 import org.eclipse.swt.events.TraverseEvent;
32 import org.eclipse.swt.events.TraverseListener;
33 import org.eclipse.swt.graphics.GC;
34 import org.eclipse.swt.graphics.Image;
35 import org.eclipse.swt.graphics.ImageData;
36 import org.eclipse.swt.graphics.RGB;
37 import org.eclipse.swt.graphics.Rectangle;
38 import org.eclipse.swt.layout.GridData;
39 import org.eclipse.swt.layout.GridLayout;
40 import org.eclipse.swt.printing.PrintDialog;
41 import org.eclipse.swt.printing.Printer;
42 import org.eclipse.swt.printing.PrinterData;
43 import org.eclipse.swt.widgets.Button;
44 import org.eclipse.swt.widgets.Composite;
45 import org.eclipse.swt.widgets.Control;
46 import org.eclipse.swt.widgets.Display;
47 import org.eclipse.swt.widgets.Group;
48 import org.eclipse.swt.widgets.Label;
49 import org.eclipse.swt.widgets.Shell;
50 import org.eclipse.swt.widgets.Text;
51 import org.eclipse.tracecompass.tmf.ui.views.uml2sd.DiagramToolTip;
52 import org.eclipse.tracecompass.tmf.ui.views.uml2sd.NGC;
53 import org.eclipse.tracecompass.tmf.ui.views.uml2sd.SDWidget;
54 import org.eclipse.tracecompass.tmf.ui.views.uml2sd.util.Messages;
55
56 /**
57 * The class implements the actual print dialog UI for collecting printing data.
58 *
59 * @version 1.0
60 * @author sveyrier
61 */
62 public class SDPrintDialogUI {
63
64 private static final RGB FOCUS_COLOR = new RGB(0, 0, 128);
65 private static final RGB NON_FOCUS_COLOR = new RGB(221, 208, 200);
66
67 // ------------------------------------------------------------------------
68 // Attributes
69 // ------------------------------------------------------------------------
70 /**
71 * The set horizontal pages number.
72 */
73 private Button fSetHPagesNumber;
74 /**
75 * The set vertical pages number.
76 */
77 private Button fSetVPagesNumber;
78 /**
79 * Flag whether to use current zoom or not.
80 */
81 private Button fUseCurrentZoom;
82 /**
83 * Flag whether to print all pages or not
84 */
85 private Button fAllPages;
86 /**
87 * Flag whether to print current page only
88 */
89 private Button fCurrentPage;
90 /**
91 * Button to select a page list.
92 */
93 private Button fPageList;
94 /**
95 * Button to select a page range.
96 */
97 private Button fPageRange;
98 /**
99 * Text field to enter from page.
100 */
101 private Text fFromPage;
102 /**
103 * Text field to enter to page.
104 */
105 private Text fToPage;
106 /**
107 * The sequence diagram widget reference.
108 */
109 private SDWidget fSdView;
110 /**
111 * Text field for number of horizontal pages
112 */
113 private Text fHorPagesNum;
114 /**
115 * Text field for number of vertical pages
116 */
117 private Text fVertPagesNum;
118 /**
119 * Text field for toal number of pages
120 */
121 private Text fTotalPages;
122 /**
123 * A modify listener implementation to handle modifications.
124 */
125 private ModifyListener fModifyListener;
126 /**
127 * A selection listener implementation to handle selections.
128 */
129 private SelectionListener fSelectionListener;
130 /**
131 * Local canvas displaying sequence diagram overview.
132 */
133 private LocalSD fOverviewCanvas;
134 /**
135 * Number of pages
136 */
137 private int fNbPages = 0;
138 /**
139 * Number of selected pages.
140 */
141 private int fPageNum = -1;
142 /**
143 * Number of first page.
144 */
145 private int fFirstPage = -1;
146 /**
147 * List of pages to print.
148 */
149 private int fPagesList[];
150
151 /**
152 * Value for dividing the sequence diagram into pages
153 */
154 private float fStepX;
155
156 /**
157 * Value for dividing the sequence diagram into pages
158 */
159 private float fStepY;
160
161 /**
162 * Value for dividing the sequence diagram into pages
163 */
164 private float sTX;
165
166 /**
167 * Value for dividing the sequence diagram into pages
168 */
169 private float sTY;
170
171 /**
172 * Page which to print from.
173 */
174 private int fFrom;
175 /**
176 * Page which to print to.
177 */
178 private int fTo;
179 /**
180 * Flag for enabling multi-selection.
181 */
182 private boolean fMultiSelection = false;
183 /**
184 * Flag for enabling area selection.
185 */
186 private boolean fAreaSelection = false;
187 /**
188 * Flag for printing all.
189 */
190 private boolean fPrintAll;
191 /**
192 * Flag for printing current page only.
193 */
194 private boolean fPrintCurrent;
195 /**
196 * Flag for printing a selection of pages.
197 */
198 private boolean fPrintSelection;
199 /**
200 * Flag for printing a range of pages.
201 */
202 private boolean fPrintRange;
203 /**
204 * Number of selected rows
205 */
206 private int fNbRows;
207 /**
208 * Number of selected lines
209 */
210 private int fNbLines;
211 /**
212 * The zoom factor.
213 */
214 private float fZoomFactor;
215 /**
216 * The printer data reference.
217 */
218 private PrinterData fPrinterData;
219 /**
220 * The diagram tooltip to show if necessary.
221 */
222 private DiagramToolTip fToolTip = null;
223 /**
224 * Label for current selection.
225 */
226 private Label fCurrentSelection;
227 /**
228 * The shell reference.
229 */
230 private Shell fShell;
231 /**
232 * Button to open printer dialog from OS.
233 */
234 private Button fPrinterDialog;
235 /**
236 * Flag for showing print button.
237 */
238 private boolean fShowPrintButton;
239 /**
240 * Test value
241 */
242 private int fTest = 3;
243 /**
244 * Parent wizard page if used as wizard
245 */
246 private WizardPage fParentWizardPage = null;
247 /**
248 * Reference to parent print dialog.
249 */
250 private SDPrintDialog fParentDialog = null;
251
252 // ------------------------------------------------------------------------
253 // Helper Class
254 // ------------------------------------------------------------------------
255 /**
256 * Local sequence diagram widget used to display overview of sequence
257 * diagram to print.
258 *
259 * @version 1.0
260 */
261 private class LocalSD extends SDWidget {
262
263 /**
264 * Constructor
265 *
266 * @param c
267 * Parent composite
268 * @param s
269 * Style bits
270 */
271 public LocalSD(Composite c, int s) {
272 super(c, s);
273 }
274
275 @Override
276 public int getContentsHeight() {
277 if (fSdView.getContentsHeight() > fSdView.getContentsHeight()) {
278 return (int) (fSdView.getVisibleHeight() / (float) fTest / fSdView.getZoomValue());
279 }
280 return super.getContentsHeight();
281 }
282
283 @Override
284 public int getContentsWidth() {
285 if (fSdView.getVisibleWidth() > fSdView.getContentsWidth()) {
286 return (int) (fSdView.getVisibleWidth() / (float) fTest / fSdView.getZoomValue());
287 }
288 return super.getContentsWidth();
289 }
290
291 @Override
292 protected void contentsMouseHover(MouseEvent event) {
293 }
294
295 /**
296 * Creates page selection images.
297 *
298 * @param img
299 * - Overview image
300 * @param width
301 * -The width value
302 * @param stepX
303 * - Step X
304 * @param height
305 * - Height value
306 * @param stepY
307 * - Step Y
308 * @return new image
309 */
310 protected Image createPagesSelectionImages(Image img, int width, float stepX, int height, float stepY) {
311
312 Image over = new Image(super.getShell().getDisplay(), img.getImageData());
313
314 for (int pageIndex = 0; pageIndex < fPagesList.length; pageIndex++) {
315
316 int pageNum = fPagesList[pageIndex];
317
318 if (getPagesForSelection() > 0 && pageNum > 0) {
319 int line = pageNum / getNbRow();
320 int row = pageNum % getNbRow();
321 if (row != 0) {
322 line++;
323 } else {
324 row = getNbRow();
325 }
326
327 line--;
328 row--;
329
330 Image toDel = over;
331 if (fOverviewCanvas.isFocusControl()) {
332 over = new Image(super.getShell().getDisplay(), drawRegionSelected(toDel,
333 new Rectangle(contentsToViewX((int) (row * stepX * fOverviewCanvas.getZoomValue())), contentsToViewY((int) (line * stepY * fOverviewCanvas.getZoomValue())),
334 ((int) (stepX * fOverviewCanvas.getZoomValue())), ((int) (stepY * fOverviewCanvas.getZoomValue()))), FOCUS_COLOR));
335 } else {
336 over = new Image(super.getShell().getDisplay(), drawRegionSelected(toDel,
337 new Rectangle(contentsToViewX((int) (row * stepX * fOverviewCanvas.getZoomValue())), contentsToViewY((int) (line * stepY * fOverviewCanvas.getZoomValue())),
338 ((int) (stepX * fOverviewCanvas.getZoomValue())), ((int) (stepY * fOverviewCanvas.getZoomValue()))), NON_FOCUS_COLOR));
339 }
340 toDel.dispose();
341 }
342 }
343
344 Arrays.sort(fPagesList);
345 int pos = Arrays.binarySearch(fPagesList, fPageNum);
346 if ((pos < 0) && (getPagesForSelection() > 0 && fPageNum > 0)) {
347 int line = fPageNum / getNbRow();
348 int row = fPageNum % getNbRow();
349 if (row != 0) {
350 line++;
351 } else {
352 row = getNbRow();
353 }
354
355 line--;
356 row--;
357
358 Image toDel = over;
359 over = new Image(super.getShell().getDisplay(), drawRegionSelected(toDel, new Rectangle(contentsToViewX((int) (row * stepX * fOverviewCanvas.getZoomValue())), contentsToViewY((int) (line * stepY * fOverviewCanvas.getZoomValue())),
360 ((int) (stepX * fOverviewCanvas.getZoomValue())), ((int) (stepY * fOverviewCanvas.getZoomValue()))), NON_FOCUS_COLOR));
361 toDel.dispose();
362 }
363
364 GC imGC2 = new GC(over);
365 imGC2.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_BLACK));
366 NGC imGC = new NGC(fOverviewCanvas, imGC2);
367 for (int i = 0, x = 0; x <= width && stepX > 0; i++, x = (int) (i * stepX)) {
368 imGC.drawLine(x, 0, x, height);
369 }
370
371 for (int j = 0, y = 0; y <= height && stepY > 0; j++, y = (int) (j * stepY)) {
372 imGC.drawLine(0, y, width, y);
373 }
374
375 imGC2.dispose();
376 imGC.dispose();
377 return over;
378 }
379
380 @Override
381 protected void drawContents(GC gc, int clipx, int clipy, int clipw, int cliph) {
382
383 Image dbuffer = getDrawBuffer();
384 computeStepXY();
385 Image d;
386
387 int lw = (int) (getContentsWidth() / getZoomValue());
388 if (getContentsWidth() < getVisibleWidth()) {
389 lw = (int) (getVisibleWidth() / getZoomValue());
390 }
391
392 int lh = (int) (getContentsHeight() / getZoomValue());
393 if (getContentsHeight() < getVisibleHeight()) {
394 lh = (int) (getVisibleHeight() / getZoomValue());
395 }
396 d = createPagesSelectionImages(dbuffer, lw, fStepX, lh, fStepY);
397
398 if (!isEnabled()) {
399 Image toDel = d;
400 d = new Image(super.getShell().getDisplay(), drawRegionSelected(d, new Rectangle(0, 0, lw, lh), NON_FOCUS_COLOR));
401 toDel.dispose();
402 }
403
404 Rectangle area = getClientArea();
405 int w = d.getBounds().width;
406 int h = d.getBounds().height;
407 gc.drawImage(d, 0, 0, w, h, 0, 0, area.width, area.height);
408
409 fTotalPages.setText(Integer.valueOf(maxNumOfPages()).toString());
410 displayPageNum();
411 dbuffer.dispose();
412 d.dispose();
413 gc.dispose();
414 }
415
416 @Override
417 protected void keyPressedEvent(KeyEvent e) {
418 if (e.keyCode == SWT.CTRL) {
419 fMultiSelection = true;
420 }
421 if (e.keyCode == SWT.SHIFT) {
422 fAreaSelection = true;
423 }
424 if (e.keyCode == SWT.ARROW_DOWN) {
425 if (fPageNum + getNbRow() <= maxNumOfPages()) {
426 fPageNum += getNbRow();
427 }
428 int line = fPageNum / getNbRow();
429 int row = fPageNum % getNbRow();
430 if (row == 0) {
431 line--;
432 }
433 if ((line + 1) * fStepY > (fOverviewCanvas.getContentsY() + fOverviewCanvas.getVisibleHeight()) / fOverviewCanvas.getZoomValue()) {
434 fOverviewCanvas.scrollBy(0, (int) (fStepY * fOverviewCanvas.getZoomValue()));
435 }
436 }
437 if (e.keyCode == SWT.ARROW_UP) {
438 if (fPageNum - getNbRow() > 0) {
439 fPageNum -= getNbRow();
440 }
441 int line = fPageNum / getNbRow();
442 int row = fPageNum % getNbRow();
443 if (row == 0) {
444 line--;
445 }
446 if ((line) * fStepY <= fOverviewCanvas.getContentsY() / fOverviewCanvas.getZoomValue()) {
447 fOverviewCanvas.scrollBy(0, -(int) (fStepY * fOverviewCanvas.getZoomValue()));
448 }
449 }
450 if (e.keyCode == SWT.ARROW_LEFT) {
451 if ((fPageNum - 2) / getNbRow() == (fPageNum - 1) / getNbRow() && fPageNum > 1) {
452 fPageNum--;
453 }
454 int row = fPageNum % getNbRow();
455 if ((row - 1) * fStepX < (fOverviewCanvas.getContentsX()) / fOverviewCanvas.getZoomValue()) {
456 fOverviewCanvas.scrollBy(-(int) (fStepX * fOverviewCanvas.getZoomValue()), 0);
457 }
458 }
459 if (e.keyCode == SWT.ARROW_RIGHT) {
460 if ((fPageNum - 1) / getNbRow() == fPageNum / getNbRow()) {
461 fPageNum++;
462 }
463 int row = fPageNum % getNbRow();
464 if (row == 0) {
465 row = getNbRow();
466 }
467 if ((row) * fStepX > (fOverviewCanvas.getContentsX() + fOverviewCanvas.getVisibleWidth()) / fOverviewCanvas.getZoomValue()) {
468 fOverviewCanvas.scrollBy((int) (fStepX * fOverviewCanvas.getZoomValue()), 0);
469 }
470 }
471
472 if (e.keyCode == 32 && fPageNum > -1) {
473 Arrays.sort(fPagesList);
474 int pos = Arrays.binarySearch(fPagesList, fPageNum);
475 if (pos < 0) {
476 addToPagesList(fPageNum);
477 } else {
478 removeFromPagesList(fPageNum);
479 }
480 }
481
482 if (!fAreaSelection && !fMultiSelection) {
483 fFirstPage = fPageNum;
484 fPagesList = new int[1];
485 fPagesList[0] = fPageNum;
486 } else if ((fPageNum != -1) && (fAreaSelection) && (fFirstPage != -1)) {
487 fPagesList = new int[0];
488 int line1 = fFirstPage / getNbRow();
489 int row1 = fFirstPage % getNbRow();
490 if (row1 != 0) {
491 line1++;
492 } else {
493 row1 = getNbRow();
494 }
495
496 int line2 = fPageNum / getNbRow();
497 int row2 = fPageNum % getNbRow();
498 if (row2 != 0) {
499 line2++;
500 } else {
501 row2 = getNbRow();
502 }
503
504 int temp;
505 if (line1 > line2) {
506 temp = line2;
507 line2 = line1;
508 line1 = temp;
509 }
510
511 if (row1 > row2) {
512 temp = row2;
513 row2 = row1;
514 row1 = temp;
515 }
516
517 for (int i = row1 - 1; i < row2; i++) {
518 for (int j = line1 - 1; j < line2; j++) {
519 addToPagesList(i + j * getNbRow() + 1);
520 }
521 }
522 }
523 displayPageNum();
524 fOverviewCanvas.redraw();
525 }
526
527 @Override
528 protected void keyReleasedEvent(KeyEvent e) {
529 if (e.keyCode == SWT.CTRL) {
530 fMultiSelection = false;
531 }
532 if (e.keyCode == SWT.SHIFT) {
533 fAreaSelection = false;
534 }
535 }
536
537 @Override
538 protected void contentsMouseDownEvent(MouseEvent event) {
539
540 computeStepXY();
541 int x1 = (int) ((event.x / fOverviewCanvas.getZoomValue()) / fStepX);
542 int x2 = (int) ((event.y / fOverviewCanvas.getZoomValue()) / fStepY);
543
544 int oldPage = fPageNum;
545
546 fPageNum = x1 + x2 * getNbRow() + 1;
547
548 if (fPageNum > maxNumOfPages()) {
549 fPageNum = oldPage;
550 return;
551 }
552
553 if (!fAreaSelection) {
554 fFirstPage = fPageNum;
555 }
556
557 if ((fPageNum != -1) && (fMultiSelection)) {
558 Arrays.sort(fPagesList);
559 int pos = Arrays.binarySearch(fPagesList, fPageNum);
560 if (pos < 0) {
561 addToPagesList(fPageNum);
562 } else {
563 removeFromPagesList(fPageNum);
564 }
565 } else if ((fPageNum != -1) && (fAreaSelection) && (fFirstPage != -1)) {
566
567 fPagesList = new int[0];
568
569 int line1 = fFirstPage / getNbRow();
570 int row1 = fFirstPage % getNbRow();
571 if (row1 != 0) {
572 line1++;
573 } else {
574 row1 = getNbRow();
575 }
576
577 int line2 = fPageNum / getNbRow();
578 int row2 = fPageNum % getNbRow();
579 if (row2 != 0) {
580 line2++;
581 } else {
582 row2 = getNbRow();
583 }
584
585 int temp;
586 if (line1 > line2) {
587 temp = line2;
588 line2 = line1;
589 line1 = temp;
590 }
591
592 if (row1 > row2) {
593 temp = row2;
594 row2 = row1;
595 row1 = temp;
596 }
597
598 for (int i = row1 - 1; i < row2; i++) {
599 for (int j = line1 - 1; j < line2; j++) {
600 addToPagesList(i + j * getNbRow() + 1);
601 }
602 }
603 } else {
604 fPagesList = new int[1];
605 fPagesList[0] = fPageNum;
606 }
607 if ((event.stateMask & SWT.CTRL) != 0) {
608 fMultiSelection = true;
609 }
610 displayPageNum();
611 redraw();
612 }
613
614 @Override
615 protected void contentsMouseMoveEvent(MouseEvent e) {
616 fToolTip.hideToolTip();
617 }
618
619 @Override
620 public void resizeContents(int w, int h) {
621 super.resizeContents(w, h);
622 }
623
624 }
625
626 /**
627 * A traverse listener implementation.
628 */
629 protected static class LocalTraverseListener implements TraverseListener {
630 @Override
631 public void keyTraversed(TraverseEvent e) {
632 if ((e.detail == SWT.TRAVERSE_TAB_NEXT) || (e.detail == SWT.TRAVERSE_TAB_PREVIOUS)) {
633 e.doit = true;
634 }
635 }
636 }
637
638 // ------------------------------------------------------------------------
639 // Constructors
640 // ------------------------------------------------------------------------
641 /**
642 * Constructor
643 *
644 * @param shell
645 * The shell reference
646 * @param sdWidget
647 * The sequence diagram widget reference
648 */
649 public SDPrintDialogUI(Shell shell, SDWidget sdWidget) {
650 this(shell, sdWidget, false);
651 }
652
653 /**
654 * Constructor
655 *
656 * @param shell
657 * The shell reference
658 * @param sdWidget
659 * The sequence diagram widget reference
660 * @param showPrintBtn
661 * Flag for showing print buttons
662 */
663 public SDPrintDialogUI(Shell shell, SDWidget sdWidget, boolean showPrintBtn) {
664 fShell = shell;
665 fSdView = sdWidget;
666 fShowPrintButton = showPrintBtn;
667
668 fPrinterData = Printer.getDefaultPrinterData();
669 if (fPrinterData != null) {
670 fPrinterData.scope = PrinterData.SELECTION;
671 }
672
673 fPagesList = new int[0];
674
675 fSelectionListener = new SelectionListener() {
676
677 @Override
678 public void widgetSelected(SelectionEvent e) {
679 if (fUseCurrentZoom.getSelection()) {
680 fHorPagesNum.setEnabled(false);
681 fVertPagesNum.setEnabled(false);
682 }
683 if (fSetHPagesNumber.getSelection()) {
684 fHorPagesNum.setEnabled(true);
685 fVertPagesNum.setEnabled(false);
686 if (fCurrentPage.getSelection()) {
687 fCurrentPage.setSelection(false);
688 fAllPages.setSelection(true);
689 }
690 if ("".equals(fHorPagesNum.getText())) { //$NON-NLS-1$
691 fHorPagesNum.setText("1"); //$NON-NLS-1$
692 }
693 }
694 if (fSetVPagesNumber.getSelection()) {
695 fHorPagesNum.setEnabled(false);
696 fVertPagesNum.setEnabled(true);
697 if (fCurrentPage.getSelection()) {
698 fCurrentPage.setSelection(false);
699 fAllPages.setSelection(true);
700 }
701 if ("".equals(fVertPagesNum.getText())) { //$NON-NLS-1$
702 fVertPagesNum.setText("1"); //$NON-NLS-1$
703 }
704 }
705 if (fCurrentPage.getSelection() || fAllPages.getSelection() || fPageList.getSelection()) {
706 fFromPage.setEnabled(false);
707 fToPage.setEnabled(false);
708 } else {
709 fFromPage.setEnabled(true);
710 fToPage.setEnabled(true);
711 }
712
713 fCurrentPage.setEnabled(fUseCurrentZoom.getSelection());
714 fOverviewCanvas.setEnabled(fPageList.getSelection());
715 if (fOverviewCanvas.isEnabled() && (e.widget == fUseCurrentZoom || e.widget == fSetHPagesNumber || e.widget == fSetVPagesNumber)) {
716 fPagesList = new int[1];
717 fPagesList[0] = 1;
718 fPageNum = 1;
719 fFirstPage = 1;
720 } else if ((fOverviewCanvas.isEnabled() && (e.widget == fPageList)) &&
721 (fPagesList == null || fPagesList.length <= 0)) {
722
723 fPagesList = new int[1];
724 fPagesList[0] = 1;
725 fPageNum = 1;
726 fFirstPage = 1;
727 }
728 computeStepXY();
729 fTotalPages.setText(Integer.valueOf(maxNumOfPages()).toString());
730 fOverviewCanvas.redraw();
731 fOverviewCanvas.update();
732 }
733
734 @Override
735 public void widgetDefaultSelected(SelectionEvent e) {
736 fPagesList = new int[0];
737 computeStepXY();
738 fOverviewCanvas.redraw();
739 }
740
741 };
742
743 fModifyListener = new ModifyListener() {
744 @Override
745 public void modifyText(ModifyEvent e) {
746 fPagesList = new int[0];
747 computeStepXY();
748 fTotalPages.setText(Integer.valueOf(maxNumOfPages()).toString());
749 fOverviewCanvas.redraw();
750 }
751
752 };
753 }
754
755 // ------------------------------------------------------------------------
756 // Methods
757 // ------------------------------------------------------------------------
758
759 /**
760 * Creates new grid data object.
761 *
762 * @param span
763 * horizontal span.
764 * @return grid data
765 */
766 protected GridData newGridData(int span) {
767 GridData data = new GridData(GridData.GRAB_VERTICAL | GridData.VERTICAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL);
768 data.horizontalSpan = span;
769 return data;
770 }
771
772 /**
773 * Creates the dialog area.
774 *
775 * @param parent
776 * The parent composite
777 * @return dialog control
778 */
779 public Control createDialogArea(Composite parent) {
780
781 GridLayout parentLayout = new GridLayout();
782 parentLayout.numColumns = 6;
783 parent.setLayout(parentLayout);
784
785 Group g1 = new Group(parent, SWT.SHADOW_NONE);
786 g1.setText(Messages.SequenceDiagram_ZoomOption);
787 g1.setLayoutData(newGridData(3));
788 GridLayout g1layout = new GridLayout();
789 g1layout.numColumns = 2;
790 g1.setLayout(g1layout);
791
792 fUseCurrentZoom = new Button(g1, SWT.RADIO);
793 fUseCurrentZoom.setText(Messages.SequenceDiagram_UseCurrentZoom);
794 fUseCurrentZoom.setLayoutData(newGridData(2));
795 fUseCurrentZoom.addSelectionListener(fSelectionListener);
796
797 fSetHPagesNumber = new Button(g1, SWT.RADIO);
798 fSetHPagesNumber.setText(Messages.SequenceDiagram_NumberOfHorizontalPages);
799 fSetHPagesNumber.setLayoutData(newGridData(1));
800 fSetHPagesNumber.addSelectionListener(fSelectionListener);
801
802 fHorPagesNum = new Text(g1, SWT.SINGLE | SWT.BORDER);
803 fHorPagesNum.addModifyListener(fModifyListener);
804
805 fSetVPagesNumber = new Button(g1, SWT.RADIO);
806 fSetVPagesNumber.setText(Messages.SequenceDiagram_NumberOfVerticalPages);
807 fSetVPagesNumber.setLayoutData(newGridData(1));
808 fSetVPagesNumber.addSelectionListener(fSelectionListener);
809
810 fVertPagesNum = new Text(g1, SWT.SINGLE | SWT.BORDER);
811 fVertPagesNum.addModifyListener(fModifyListener);
812
813 Label nbTotal = new Label(g1, SWT.SHADOW_NONE | SWT.RIGHT);
814 nbTotal.setText(Messages.TotalNumberOfPages);
815 // nbTotal.setLayoutData(newGridData(1));
816
817 fTotalPages = new Text(g1, SWT.SINGLE | SWT.BORDER | SWT.READ_ONLY);
818 // nbHV.addModifyListener(modifListener);
819
820 Group g2 = new Group(parent, SWT.SHADOW_NONE);
821 g2.setText(Messages.SequenceDiagram_Preview);
822 GridData data = new GridData(GridData.GRAB_VERTICAL | GridData.VERTICAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL);
823 data.horizontalSpan = 3;
824 data.verticalSpan = 2;
825 g2.setLayoutData(data);
826 GridLayout g2layout = new GridLayout();
827 // g2layout.
828 g2layout.numColumns = 1;
829 // SVLayout g2layout = new SVLayout();
830 g2.setLayout(g2layout);
831
832 GridData data2 = new GridData(GridData.GRAB_VERTICAL | GridData.VERTICAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL);
833 data2.horizontalSpan = 1;
834 data2.verticalSpan = 1;
835
836 fOverviewCanvas = new LocalSD(g2, SWT.NO_BACKGROUND);
837 GridData seqDiagLayoutData = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL);
838 fOverviewCanvas.setLayoutData(seqDiagLayoutData);
839 // overviewCanvas.resizeContents(100,100);
840 if (fSdView.getContentsWidth() < fSdView.getVisibleWidth() && fSdView.getContentsHeight() < fSdView.getVisibleHeight()) {
841 fTest = 3;
842 } else {
843 fTest = 10;
844 }
845 fOverviewCanvas.setFrame(fSdView.getFrame(), true);
846 fOverviewCanvas.setZoomValue((float) 1 / fTest);
847 fOverviewCanvas.setCornerControl(null);
848 seqDiagLayoutData.widthHint = fOverviewCanvas.getContentsWidth() / fTest;
849 seqDiagLayoutData.widthHint = fOverviewCanvas.getFrame().getWidth() / fTest + 15;
850
851 if (fSdView.getVisibleWidth() < fSdView.getContentsWidth()) {
852 seqDiagLayoutData.widthHint = fOverviewCanvas.getContentsWidth() / fTest;
853 if (seqDiagLayoutData.widthHint > Display.getDefault().getClientArea().width / 4) {
854 seqDiagLayoutData.widthHint = Display.getDefault().getClientArea().width / 4;
855 }
856 } else {
857 seqDiagLayoutData.widthHint = fOverviewCanvas.getFrame().getWidth() / fTest + 15;
858 }
859
860 if (fSdView.getVisibleHeight() < fSdView.getContentsHeight()) {
861 seqDiagLayoutData.heightHint = fOverviewCanvas.getContentsHeight() / fTest;
862 if (seqDiagLayoutData.heightHint > Display.getDefault().getClientArea().width / 4) {
863 seqDiagLayoutData.heightHint = Display.getDefault().getClientArea().width / 4;
864 }
865 } else {
866 seqDiagLayoutData.heightHint = fOverviewCanvas.getFrame().getHeight() / fTest;
867 }
868
869 fOverviewCanvas.setEnabled(false);
870
871 fCurrentSelection = new Label(g2, SWT.SHADOW_NONE | SWT.LEFT);
872 fCurrentSelection.setLayoutData(newGridData(1));
873
874 Group g3 = new Group(parent, SWT.SHADOW_NONE);
875 g3.setText(Messages.SequenceDiagram_PrintRange);
876 g3.setLayoutData(newGridData(3));
877 GridLayout g3layout = new GridLayout();
878 g3layout.numColumns = 4;
879 g3.setLayout(g3layout);
880
881 fAllPages = new Button(g3, SWT.RADIO);
882 fAllPages.setText(Messages.SequenceDiagram_AllPages);
883 fAllPages.setLayoutData(newGridData(4));
884 fAllPages.addSelectionListener(fSelectionListener);
885
886 fCurrentPage = new Button(g3, SWT.RADIO);
887 fCurrentPage.setText(Messages.SequenceDiagram_CurrentView);
888 fCurrentPage.setLayoutData(newGridData(4));
889 fCurrentPage.setEnabled(true);
890 fCurrentPage.setSelection(true);
891 fCurrentPage.addSelectionListener(fSelectionListener);
892
893 fPageList = new Button(g3, SWT.RADIO);
894 fPageList.setText(Messages.SequenceDiagram_SelectedPages);
895 fPageList.setLayoutData(newGridData(4));
896 fPageList.addSelectionListener(fSelectionListener);
897
898 fPageRange = new Button(g3, SWT.RADIO);
899 fPageRange.setText(Messages.SequenceDiagram_FromPage);
900 fPageRange.setLayoutData(newGridData(1));
901 fPageRange.addSelectionListener(fSelectionListener);
902
903 fFromPage = new Text(g3, SWT.SINGLE | SWT.BORDER);
904
905 Label labelTo = new Label(g3, SWT.CENTER);
906 labelTo.setText(Messages.SequenceDiagram_to);
907
908 fToPage = new Text(g3, SWT.SINGLE | SWT.BORDER);
909
910 fToolTip = new DiagramToolTip(fOverviewCanvas);
911
912 fOverviewCanvas.getViewControl().addMouseTrackListener(new MouseTrackListener() {
913 @Override
914 public void mouseEnter(MouseEvent e) {
915 fToolTip.hideToolTip();
916 }
917
918 @Override
919 public void mouseExit(MouseEvent e) {
920 fToolTip.hideToolTip();
921 }
922
923 @Override
924 public void mouseHover(MouseEvent e) {
925 int x1 = (int) (fOverviewCanvas.viewToContentsX(e.x) / fOverviewCanvas.getZoomValue() / fStepX);
926 int x2 = (int) (fOverviewCanvas.viewToContentsY(e.y) / fOverviewCanvas.getZoomValue() / fStepY);
927 int num = x1 + x2 * getNbRow() + 1;
928 if (num > maxNumOfPages()) {
929 return;
930 }
931 if (num > 0) {
932 fToolTip.showToolTip(String.valueOf(num));
933 displayPageNum();
934 } else {
935 fCurrentSelection.setText("");//$NON-NLS-1$
936 fToolTip.hideToolTip();
937 }
938 }
939
940 });
941
942 fOverviewCanvas.addTraverseListener(new LocalTraverseListener());
943
944 fOverviewCanvas.addFocusListener(new FocusListener() {
945 @Override
946 public void focusGained(FocusEvent e) {
947 fOverviewCanvas.redraw();
948 }
949
950 @Override
951 public void focusLost(FocusEvent e) {
952 fOverviewCanvas.redraw();
953 }
954 });
955
956 if (fShowPrintButton) {
957 Composite printerDlg = new Composite(parent, SWT.NONE);
958 data = new GridData(SWT.FILL, SWT.DEFAULT, true, false);
959 data.horizontalSpan = 6;
960 parentLayout = new GridLayout();
961 parentLayout.numColumns = 2;
962 printerDlg.setLayout(parentLayout);
963 printerDlg.setLayoutData(data);
964
965 Label label = new Label(printerDlg, SWT.NONE);
966 label.setLayoutData(new GridData(SWT.FILL, SWT.DEFAULT, true, false));
967 fPrinterDialog = new Button(printerDlg, SWT.PUSH);
968 fPrinterDialog.setText(Messages.SequenceDiagram_Printer);
969
970 fPrinterDialog.addSelectionListener(new SelectionListener() {
971 @Override
972 public void widgetSelected(SelectionEvent e) {
973 printButtonSelected();
974 }
975
976 @Override
977 public void widgetDefaultSelected(SelectionEvent e) {
978 }
979
980 });
981 }
982
983 updatePrinterStatus();
984
985 return parent;
986 }
987
988 /**
989 * Get number of pages for selection.
990 *
991 * @return number of pages for selection.
992 */
993 public int getPagesForSelection() {
994 return fNbPages;
995 }
996
997 /**
998 * Handler for when the OK button is pressed
999 *
1000 * @return True if the operation was successful, false if there was an error
1001 */
1002 public boolean okPressed() {
1003 fPrintAll = fAllPages.getSelection();
1004 fPrintCurrent = fCurrentPage.getSelection();
1005 fPrintSelection = fPageList.getSelection();
1006 fPrintRange = fPageRange.getSelection();
1007 try {
1008 if (fPrintRange) {
1009 fFrom = Integer.valueOf(fFromPage.getText()).intValue();
1010 fTo = Integer.valueOf(fToPage.getText()).intValue();
1011 if (fFrom > maxNumOfPages() || fTo > maxNumOfPages() || fFrom <= 0 || fTo <= 0) {
1012 MessageDialog.openError(getShell(), Messages.SequenceDiagram_Error, Messages.SequenceDiagram_InvalidRange);
1013 return false;
1014 }
1015 } else if (fSetHPagesNumber.getSelection() && fNbPages <= 0) {
1016 MessageDialog.openError(getShell(), Messages.SequenceDiagram_Error, Messages.SequenceDiagram_InvalidNbHorizontal);
1017 return false;
1018 } else if (fSetVPagesNumber.getSelection() && fNbPages <= 0) {
1019 MessageDialog.openError(getShell(), Messages.SequenceDiagram_Error, Messages.SequenceDiagram_InvalidNbVertical);
1020 return false;
1021 } else if (fPrintSelection && getPageList().length <= 0) {
1022 MessageDialog.openError(getShell(), Messages.SequenceDiagram_Error, Messages.SequenceDiagram_NoPageSelected);
1023 return false;
1024 }
1025
1026 } catch (Exception e) {
1027 MessageDialog.openError(getShell(), Messages.SequenceDiagram_Error, Messages.SequenceDiagram_InvalidRange);
1028 fFrom = 0;
1029 fTo = 0;
1030 return false;
1031 }
1032
1033 return true;
1034 }
1035
1036 /**
1037 * Draws region that was selected
1038 *
1039 * @param img
1040 * The corresponding image
1041 * @param r
1042 * The selected rectangle.
1043 * @param color
1044 * The color to use for selection
1045 * @return image data reference
1046 */
1047 public ImageData drawRegionSelected(Image img, Rectangle r, RGB color) {
1048 ImageData id = img.getImageData();
1049 for (int a = 0; a < r.width && r.x + a < id.width; a++) {
1050 for (int b = 0; b < r.height && r.y + b < id.height; b++) {
1051 int index = id.getPixel(r.x + a, r.y + b);
1052 RGB rgb = id.palette.getRGB(index);
1053 rgb = combine(color, rgb);
1054 id.setPixel(r.x + a, r.y + b, id.palette.getPixel(rgb));
1055 }
1056 }
1057 return id;
1058 }
1059
1060 /**
1061 * Combines two RGB colors.
1062 *
1063 * @param front
1064 * The front color
1065 * @param back
1066 * The back color
1067 * @return new RGB color
1068 */
1069 public static RGB combine(RGB front, RGB back) {
1070 int _af = 128;
1071 int _ab = 200;
1072
1073 double af = (_af) / 255.0;
1074 double rf = front.red;
1075 double gf = front.green;
1076 double bf = front.blue;
1077
1078 double ab = (_ab) / 255.0;
1079 double rb = back.red;
1080 double gb = back.green;
1081 double bb = back.blue;
1082
1083 double k = (1.0 - af) * ab;
1084 int r = (int) ((af * rf + k * rb));
1085 int g = (int) ((af * gf + k * gb));
1086 int b = (int) ((af * bf + k * bb));
1087
1088 return new RGB(r, g, b);
1089 }
1090
1091 /**
1092 * Computes value for X coordinates step and Y coordinates step.
1093 */
1094 protected void computeStepXY() {
1095 float cw = fOverviewCanvas.getContentsWidth() / fOverviewCanvas.getZoomValue();
1096 float ch = fOverviewCanvas.getContentsHeight() / fOverviewCanvas.getZoomValue();
1097 try {
1098 if (fPrinterData == null) {
1099 fStepX = 0;
1100 fStepY = 0;
1101 fNbPages = 0;
1102 fZoomFactor = 0;
1103 } else {
1104 Printer printer = new Printer(fPrinterData);
1105 if (fSetHPagesNumber.getSelection()) {
1106 fNbPages = Integer.valueOf(fHorPagesNum.getText()).intValue();
1107 float z1 = fSdView.getContentsWidth() / cw;
1108 float z2 = printer.getClientArea().width / ((float) fSdView.getContentsWidth() / fNbPages);
1109
1110 fStepY = printer.getClientArea().height / z1 / z2;
1111 fStepX = cw / fNbPages;
1112 } else if (fSetVPagesNumber.getSelection()) {
1113 fNbPages = Integer.valueOf(fVertPagesNum.getText()).intValue();
1114 float z1 = fSdView.getContentsHeight() / ch;
1115 float z2 = printer.getClientArea().height / ((float) fSdView.getContentsHeight() / fNbPages);
1116 fStepX = printer.getClientArea().width / z1 / z2;
1117 fStepY = ch / fNbPages;
1118 } else {
1119 float z1 = fSdView.getContentsWidth() / (cw);
1120 fStepX = fSdView.getVisibleWidth() / z1;
1121 fNbPages = Math.round(cw / fStepX);
1122 if (fNbPages == 0) {
1123 fNbPages = 1;
1124 }
1125 int pw = printer.getClientArea().width;
1126 int ph = printer.getClientArea().height;
1127 float z2 = pw / ((float) fSdView.getContentsWidth() / fNbPages);
1128 fStepY = ph / z1 / z2;
1129 }
1130 }
1131 } catch (NumberFormatException e) {
1132 fStepX = fStepY = fNbPages = 0;
1133 fZoomFactor = 0;
1134 }
1135 sTX = fStepX * (fSdView.getContentsWidth() / cw);
1136 sTY = fStepY * (fSdView.getContentsHeight() / ch);
1137 float rat = 1;
1138 if ((fSdView.getVisibleWidth() > fSdView.getContentsWidth()) && (fSetVPagesNumber.getSelection() || fSetHPagesNumber.getSelection())) {
1139 rat = (float) fSdView.getVisibleWidth() / (float) fSdView.getContentsWidth();
1140 }
1141 fZoomFactor = (fOverviewCanvas.getContentsWidth() / cw) / fOverviewCanvas.getZoomFactor() * rat;
1142 }
1143
1144 /**
1145 * Returns the pages list.
1146 *
1147 * @return the pages list.
1148 */
1149 public int[] getPageList() {
1150 return Arrays.copyOf(fPagesList, fPagesList.length);
1151 }
1152
1153 /**
1154 * Adds a page to pages list.
1155 *
1156 * @param num
1157 * The number of the the new page
1158 */
1159 public void addToPagesList(int num) {
1160 int temp[] = new int[fPagesList.length + 1];
1161 System.arraycopy(fPagesList, 0, temp, 0, fPagesList.length);
1162 temp[temp.length - 1] = num;
1163 fPagesList = new int[temp.length];
1164 System.arraycopy(temp, 0, fPagesList, 0, temp.length);
1165 }
1166
1167 /**
1168 * Removes a page from the pages list.
1169 *
1170 * @param num
1171 * The number of the page to remove
1172 */
1173 public void removeFromPagesList(int num) {
1174 int pos = Arrays.binarySearch(fPagesList, num);
1175 int temp[] = new int[fPagesList.length - 1];
1176 System.arraycopy(fPagesList, 0, temp, 0, pos);
1177 System.arraycopy(fPagesList, pos + 1, temp, pos, fPagesList.length - pos - 1);
1178 fPagesList = new int[temp.length];
1179 System.arraycopy(temp, 0, fPagesList, 0, temp.length);
1180 }
1181
1182 /**
1183 * Returns the maximum number of pages.
1184 *
1185 * @return maximum number of pages.
1186 */
1187 public int maxNumOfPages() {
1188 return (getNbRow() * getNbLines());
1189 }
1190
1191 /**
1192 * Returns the number of rows.
1193 *
1194 * @return number of rows.
1195 */
1196 public int getNbRow() {
1197 if (!fSetHPagesNumber.isDisposed()) {
1198 int cw = (int) (fOverviewCanvas.getContentsWidth() / fOverviewCanvas.getZoomValue());
1199 int row = 1;
1200 if (fStepX != 0) {
1201 row = (int) (cw / fStepX);
1202 if (fSetHPagesNumber.getSelection()) {
1203 row = Math.round(cw / fStepX);
1204 } else if ((cw % fStepX != 0)) {
1205 row++;
1206 }
1207 }
1208 fNbRows = row;
1209 }
1210 return fNbRows;
1211 }
1212
1213 /**
1214 * Returns the number of lines.
1215 *
1216 * @return number of lines
1217 */
1218 public int getNbLines() {
1219 if (!fSetVPagesNumber.isDisposed()) {
1220 int ch = (int) (fOverviewCanvas.getContentsHeight() / fOverviewCanvas.getZoomValue());
1221 int line = 1;
1222 if (fStepY != 0) {
1223 line = (int) (ch / fStepY);
1224 if (fSetVPagesNumber.getSelection()) {
1225 line = Math.round(ch / fStepY);
1226 } else if (ch % fStepY != 0) {
1227 line++;
1228 }
1229 }
1230 fNbLines = line;
1231 }
1232 return fNbLines;
1233 }
1234
1235 /**
1236 * Returns whether to print all pages or not.
1237 *
1238 * @return <code>true</code> for all pages else <code>false</code>.
1239 */
1240 public boolean printAll() {
1241 return fPrintAll;
1242 }
1243
1244 /**
1245 * Returns whether to print only current page
1246 *
1247 * @return <code>true</code> for current page only else <code>false</code>..
1248 */
1249 public boolean printCurrent() {
1250 return fPrintCurrent;
1251 }
1252
1253 /**
1254 * Returns whether to print selected pages.
1255 *
1256 * @return <code>true</code> for selected pages only else <code>false</code>
1257 * .
1258 */
1259 public boolean printSelection() {
1260 return fPrintSelection;
1261 }
1262
1263 /**
1264 * Returns whether to print range of pages.
1265 *
1266 * @return <code>true</code> for range of pages only else <code>false</code>
1267 * .
1268 */
1269 public boolean printRange() {
1270 return fPrintRange;
1271 }
1272
1273 /**
1274 * Returns the step in X direction.
1275 *
1276 * @return step in X direction
1277 */
1278 public float getStepX() {
1279 return sTX;
1280 }
1281
1282 /**
1283 * Returns the step in Y direction.
1284 *
1285 * @return step in Y direction
1286 */
1287 public float getStepY() {
1288 return sTY;
1289 }
1290
1291 /**
1292 * Returns the zoom factor
1293 *
1294 * @return zoom factor
1295 */
1296 public float getZoomFactor() {
1297 return fZoomFactor;
1298 }
1299
1300 /**
1301 * Returns the printer data reference.
1302 *
1303 * @return printer data reference
1304 */
1305 public PrinterData getPrinterData() {
1306 return fPrinterData;
1307 }
1308
1309 /**
1310 * Returns the page number to start printing from.
1311 *
1312 * @return page number to start printing from
1313 */
1314 public int getFrom() {
1315 return fFrom;
1316 }
1317
1318 /**
1319 * Returns the page number to print to.
1320 *
1321 * @return page number to print to
1322 */
1323 public int getTo() {
1324 return fTo;
1325 }
1326
1327 /**
1328 * Displays current number of pages
1329 */
1330 protected void displayPageNum() {
1331 if (fPageNum > 0) {
1332 String message = MessageFormat.format(Messages.SequenceDiagram_Page, new Object[] { Integer.valueOf(fPageNum) });
1333 fCurrentSelection.setText(message);
1334 fCurrentSelection.getParent().layout();
1335 }
1336 }
1337
1338 /**
1339 * Returns the shell reference.
1340 *
1341 * @return the shell reference.
1342 */
1343 public Shell getShell() {
1344 return fShell;
1345 }
1346
1347 /**
1348 * Sets the shell.
1349 *
1350 * @param shell
1351 * The shell reference.
1352 */
1353 public void setShell(Shell shell) {
1354 fShell = shell;
1355 }
1356
1357 /**
1358 * Handle selection of print button.
1359 */
1360 public void printButtonSelected() {
1361 PrintDialog printer = new PrintDialog(getShell());
1362 if (fAllPages.getSelection()) {
1363 printer.setScope(PrinterData.ALL_PAGES);
1364 }
1365 if (fCurrentPage.getSelection()) {
1366 printer.setScope(PrinterData.SELECTION);
1367 }
1368 if (fPageList.getSelection()) {
1369 printer.setScope(PrinterData.SELECTION);
1370 }
1371 if (fPageRange.getSelection()) {
1372 printer.setScope(PrinterData.PAGE_RANGE);
1373 fFrom = Integer.valueOf(fFromPage.getText()).intValue();
1374 fTo = Integer.valueOf(fToPage.getText()).intValue();
1375 printer.setStartPage(fFrom);
1376 printer.setEndPage(fTo);
1377 }
1378
1379 PrinterData newPrinterData = printer.open();
1380 if (newPrinterData != null) {
1381 fPrinterData = newPrinterData;
1382 }
1383 updatePrinterStatus();
1384
1385 if (printer.getScope() == PrinterData.ALL_PAGES) {
1386 fAllPages.setSelection(true);
1387 fCurrentPage.setSelection(false);
1388 fPageList.setSelection(false);
1389 fPageRange.setSelection(false);
1390 fHorPagesNum.setEnabled(false);
1391 fVertPagesNum.setEnabled(false);
1392 }
1393 if (printer.getScope() == PrinterData.PAGE_RANGE) {
1394 fAllPages.setSelection(false);
1395 fCurrentPage.setSelection(false);
1396 fPageList.setSelection(false);
1397 fPageRange.setSelection(true);
1398 fFromPage.setEnabled(true);
1399 fToPage.setEnabled(true);
1400 fFromPage.setText((Integer.valueOf(printer.getStartPage())).toString());
1401 fToPage.setText((Integer.valueOf(printer.getEndPage())).toString());
1402 }
1403 computeStepXY();
1404 fOverviewCanvas.redraw();
1405 }
1406
1407 /**
1408 * Sets parent wizard page
1409 *
1410 * @param parent
1411 * The parent wizard page
1412 */
1413 public void setParentWizardPage(WizardPage parent) {
1414 fParentWizardPage = parent;
1415 }
1416
1417 /**
1418 * Sets the parent dialog box.
1419 *
1420 * @param parent
1421 * The parent dialog box.
1422 */
1423 public void setParentDialog(SDPrintDialog parent) {
1424 fParentDialog = parent;
1425 }
1426
1427 /**
1428 * Updates the printer status
1429 */
1430 protected void updatePrinterStatus() {
1431 if (fParentWizardPage != null) {
1432 // used in the wizard dialog
1433 if (fPrinterData == null) {
1434 // show error message and disable Finish button
1435 fParentWizardPage.setErrorMessage(Messages.SequenceDiagram_NoPrinterSelected);
1436 fParentWizardPage.setPageComplete(false);
1437 } else {
1438 // clear error message and enable Finish button
1439 fParentWizardPage.setErrorMessage(null);
1440 fParentWizardPage.setPageComplete(true);
1441 }
1442 } else if (fParentDialog != null) {
1443 // used in the print dialog
1444 if (fPrinterData == null) {
1445 // show error message and disable OK button
1446 fParentDialog.setErrorMessage(Messages.SequenceDiagram_NoPrinterSelected);
1447 fParentDialog.setPageComplete(false);
1448 } else {
1449 // clear error message and enable OK button
1450 fParentDialog.setErrorMessage(null);
1451 fParentDialog.setPageComplete(true);
1452 }
1453 }
1454 }
1455
1456 }
This page took 0.069754 seconds and 4 git commands to generate.