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