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