1 /**********************************************************************
2 * Copyright (c) 2005, 2008, 2011 IBM Corporation and others.
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 * $Id: SDPrintDialogUI.java,v 1.3 2008/01/24 02:28:52 apnan Exp $
10 * IBM - Initial API and implementation
11 * Bernd Hufmann - Updated for TMF
12 **********************************************************************/
13 package org
.eclipse
.linuxtools
.tmf
.ui
.views
.uml2sd
.util
;
15 import java
.text
.MessageFormat
;
16 import java
.util
.Arrays
;
18 import org
.eclipse
.jface
.dialogs
.MessageDialog
;
19 import org
.eclipse
.jface
.wizard
.WizardPage
;
20 import org
.eclipse
.linuxtools
.tmf
.ui
.viewers
.timeAnalysis
.GridUtil
;
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
.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
;
58 public class SDPrintDialogUI
{
60 protected Button setHPagesNumber
;
62 protected Button setVPagesNumber
;
64 protected Button useCurrentZoom
;
66 protected Button allPages
;
68 protected Button currentPage
;
70 protected Button pageList
;
72 protected Button pageRange
;
74 protected Text fromPage
;
76 protected Text toPage
;
78 protected SDWidget view
;
80 protected Text hPagesNum
;
82 protected Text vPagesNum
;
84 protected Text totalPages
;
86 protected ModifyListener modifyListener
;
88 protected SelectionListener selectionListener
;
90 protected LocalSD overviewCanvas
;
92 protected int nbPages
= 0;
94 protected int pageNum
= -1;
96 protected int firstPage
= -1;
98 protected int pagesList
[];
100 protected float stepX
, stepY
, sTX
, sTY
;
102 protected int from
, to
;
104 protected boolean multiSelection
= false;
106 protected boolean areaSelection
= false;
108 protected boolean printAll
;
109 protected boolean printCurrent
;
110 protected boolean printSelection
;
111 protected boolean printRange
;
113 protected int nbRows
, nbLines
;
115 protected float zoomFactor
;
117 protected PrinterData printerData
;
119 protected DiagramToolTip toolTip
= null;
121 protected Label currentSelection
;
123 protected Shell shell
;
125 protected Button printerDialog
;
127 protected boolean showPrintButton
;
131 public static int r
= 0;
134 protected WizardPage parentWizardPage
= null;
135 protected SDPrintDialog parentDialog
= null;
137 protected class LocalSD
extends SDWidget
{
140 public int getContentsHeight() {
141 if (view
.getContentsHeight() > view
.getContentsHeight())
142 return (int) (view
.getVisibleHeight() / (float) test
/ view
.zoomValue
);
144 return (int) (super.getContentsHeight());
148 public int getContentsWidth() {
149 if (view
.getVisibleWidth() > view
.getContentsWidth())
150 return (int) (view
.getVisibleWidth() / (float) test
/ view
.zoomValue
);
152 return (int) (super.getContentsWidth());
155 public LocalSD(Composite c
, int s
) {
160 protected void contentsMouseHover(MouseEvent event
) {
163 protected Image
createPagesSelectionImages(Image img
, int width
, float stepX
, int height
, float stepY
) {
165 Image over
= new Image(super.getShell().getDisplay(), img
.getImageData());
167 for (int pageIndex
= 0; pageIndex
< pagesList
.length
; pageIndex
++) {
169 * int line=pageNum/getPagesForSelection(); int row=pageNum%getPagesForSelection(); if (row!=0) line++;
170 * else row=getPagesForSelection(); line--; row--; over=new
171 * Image(super.getShell().getDisplay(),drawRegionSelected(img,new Rectangle(row*stepX,
172 * line*stepY,stepX,stepY),new RGB(0,155,0)));
175 int pageNum
= pagesList
[pageIndex
];
176 if (getPagesForSelection() > 0 && pageNum
> 0) {
177 int line
= pageNum
/ getNbRow();
178 int row
= pageNum
% getNbRow();
188 if (overviewCanvas
.isFocusControl())
189 over
= new Image(super.getShell().getDisplay(), drawRegionSelected(toDel
, new Rectangle(contentsToViewX((int) (row
* stepX
* overviewCanvas
.zoomValue
)), contentsToViewY((int) (line
* stepY
* overviewCanvas
.zoomValue
)),
190 ((int) (stepX
* overviewCanvas
.zoomValue
)), ((int) (stepY
* overviewCanvas
.zoomValue
))), new RGB(0, 0, 128)));
192 over
= new Image(super.getShell().getDisplay(), drawRegionSelected(toDel
, new Rectangle(contentsToViewX((int) (row
* stepX
* overviewCanvas
.zoomValue
)), contentsToViewY((int) (line
* stepY
* overviewCanvas
.zoomValue
)),
193 ((int) (stepX
* overviewCanvas
.zoomValue
)), ((int) (stepY
* overviewCanvas
.zoomValue
))), new RGB(221, 208, 200)));
198 Arrays
.sort(pagesList
);
199 int pos
= Arrays
.binarySearch(pagesList
, pageNum
);
201 if (getPagesForSelection() > 0 && pageNum
> 0) {
202 int line
= pageNum
/ getNbRow();
203 int row
= pageNum
% getNbRow();
213 over
= new Image(super.getShell().getDisplay(), drawRegionSelected(toDel
, new Rectangle(contentsToViewX((int) (row
* stepX
* overviewCanvas
.zoomValue
)), contentsToViewY((int) (line
* stepY
* overviewCanvas
.zoomValue
)),
214 ((int) (stepX
* overviewCanvas
.zoomValue
)), ((int) (stepY
* overviewCanvas
.zoomValue
))), new RGB(221, 208, 200)));
218 GC imGC2
= new GC(over
);
219 imGC2
.setBackground(Display
.getDefault().getSystemColor(SWT
.COLOR_BLACK
));
220 NGC imGC
= new NGC(overviewCanvas
, imGC2
);
221 for (int i
= 0, x
= 0; x
<= width
&& stepX
> 0; i
++, x
= (int) (i
* stepX
))
222 imGC
.drawLine(x
, 0, x
, height
);
224 for (int j
= 0, y
= 0; y
<= height
&& stepY
> 0; j
++, y
= (int) (j
* stepY
))
225 imGC
.drawLine(0, y
, width
, y
);
227 // imGC2.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_BLUE));
228 // // //imGC.drawLine(0, height, width, (int)(getVisibleHeight()/zoomValue));
229 // imGC.fillRectangle(0,height,(int)(getVisibleWidth()/zoomValue),
230 // (int)(getVisibleHeight()/zoomValue)-height);
238 protected void drawContents(GC gc
, int clipx
, int clipy
, int clipw
, int cliph
) {
240 Image dbuffer
= getDrawBuffer(gc
);
244 int lw
= (int) (getContentsWidth() / zoomValue
);
245 if (getContentsWidth() < getVisibleWidth())
246 lw
= (int) (getVisibleWidth() / zoomValue
);
248 int lh
= (int) (getContentsHeight() / zoomValue
);
249 if (getContentsHeight() < getVisibleHeight())
250 lh
= (int) (getVisibleHeight() / zoomValue
);
251 d
= createPagesSelectionImages(dbuffer
, lw
, stepX
, lh
, stepY
);
255 d
= new Image(super.getShell().getDisplay(), drawRegionSelected(d
, new Rectangle(0, 0, lw
, lh
), new RGB(221, 208, 200)));
256 // d, new Rectangle(0,0,((int)(stepX*overviewCanvas.zoomValue)),((int)(
257 // stepY*overviewCanvas.zoomValue))),new RGB(221,208,200)));
261 Rectangle area
= getClientArea();
262 int w
= d
.getBounds().width
;
263 int h
= d
.getBounds().height
;
264 gc
.drawImage(d
, 0, 0, w
, h
, 0, 0, area
.width
, area
.height
);
266 totalPages
.setText(Integer
.valueOf(maxNumOfPages()).toString());
275 protected void keyPressedEvent(KeyEvent e
) {
276 if (e
.keyCode
== SWT
.CTRL
)
277 multiSelection
= true;
278 if (e
.keyCode
== SWT
.SHIFT
)
279 areaSelection
= true;
280 if (e
.keyCode
== SWT
.ARROW_DOWN
) {
281 if (pageNum
+ getNbRow() <= maxNumOfPages())
282 pageNum
+= getNbRow();
283 int line
= pageNum
/ getNbRow();
284 int row
= pageNum
% getNbRow();
287 if ((line
+ 1) * stepY
> (overviewCanvas
.getContentsY() + overviewCanvas
.getVisibleHeight()) / overviewCanvas
.zoomValue
)
288 overviewCanvas
.scrollBy(0, (int) (stepY
* overviewCanvas
.zoomValue
));
290 if (e
.keyCode
== SWT
.ARROW_UP
) {
291 if (pageNum
- getNbRow() > 0)
292 pageNum
-= getNbRow();
293 int line
= pageNum
/ getNbRow();
294 int row
= pageNum
% getNbRow();
297 if ((line
) * stepY
<= overviewCanvas
.getContentsY() / overviewCanvas
.zoomValue
)
298 overviewCanvas
.scrollBy(0, -(int) (stepY
* overviewCanvas
.zoomValue
));
300 if (e
.keyCode
== SWT
.ARROW_LEFT
) {
301 if ((pageNum
- 2) / getNbRow() == (pageNum
- 1) / getNbRow() && pageNum
> 1)
303 int row
= pageNum
% getNbRow();
304 if ((row
- 1) * stepX
< (overviewCanvas
.getContentsX()) / overviewCanvas
.zoomValue
)
305 overviewCanvas
.scrollBy(-(int) (stepX
* overviewCanvas
.zoomValue
), 0);
307 if (e
.keyCode
== SWT
.ARROW_RIGHT
) {
308 if ((pageNum
- 1) / getNbRow() == pageNum
/ getNbRow())
310 int row
= pageNum
% getNbRow();
313 if ((row
) * stepX
> (overviewCanvas
.getContentsX() + overviewCanvas
.getVisibleWidth()) / overviewCanvas
.zoomValue
)
314 overviewCanvas
.scrollBy((int) (stepX
* overviewCanvas
.zoomValue
), 0);
317 if (e
.keyCode
== 32 && pageNum
> -1) {
318 Arrays
.sort(pagesList
);
319 int pos
= Arrays
.binarySearch(pagesList
, pageNum
);
321 addToPagesList(pageNum
);
323 removeFromPagesList(pageNum
);
326 if (!areaSelection
&& !multiSelection
) {
328 pagesList
= new int[1];
329 pagesList
[0] = pageNum
;
330 } else if ((pageNum
!= -1) && (areaSelection
) && (firstPage
!= -1)) {
331 pagesList
= new int[0];
332 int line1
= firstPage
/ getNbRow();
333 int row1
= firstPage
% getNbRow();
339 int line2
= pageNum
/ getNbRow();
340 int row2
= pageNum
% getNbRow();
359 for (int i
= row1
- 1; i
< row2
; i
++)
360 for (int j
= line1
- 1; j
< line2
; j
++)
361 addToPagesList(i
+ j
* getNbRow() + 1);
365 overviewCanvas
.redraw();
369 protected void keyReleasedEvent(KeyEvent e
) {
370 if (e
.keyCode
== SWT
.CTRL
)
371 multiSelection
= false;
372 if (e
.keyCode
== SWT
.SHIFT
)
373 areaSelection
= false;
377 protected void contentsMouseDownEvent(MouseEvent event
) {
380 int x1
= (int) ((event
.x
/ overviewCanvas
.zoomValue
) / stepX
);
381 int x2
= (int) ((event
.y
/ overviewCanvas
.zoomValue
) / stepY
);
383 int oldPage
= pageNum
;
385 pageNum
= x1
+ x2
* getNbRow() + 1;
387 if (pageNum
> maxNumOfPages()) {
395 if ((pageNum
!= -1) && (multiSelection
)) {
396 Arrays
.sort(pagesList
);
397 int pos
= Arrays
.binarySearch(pagesList
, pageNum
);
399 addToPagesList(pageNum
);
401 removeFromPagesList(pageNum
);
402 } else if ((pageNum
!= -1) && (areaSelection
) && (firstPage
!= -1)) {
404 pagesList
= new int[0];
406 int line1
= firstPage
/ getNbRow();
407 int row1
= firstPage
% getNbRow();
413 int line2
= pageNum
/ getNbRow();
414 int row2
= pageNum
% getNbRow();
433 for (int i
= row1
- 1; i
< row2
; i
++)
434 for (int j
= line1
- 1; j
< line2
; j
++)
435 addToPagesList(i
+ j
* getNbRow() + 1);
437 pagesList
= new int[1];
438 pagesList
[0] = pageNum
;
440 if ((event
.stateMask
& SWT
.CTRL
) != 0)
441 multiSelection
= true;
447 protected void contentsMouseMoveEvent(MouseEvent e
) {
448 toolTip
.hideToolTip();
452 public void resizeContents(int _w
, int _h
) {
454 super.resizeContents(_w
, _h
);
460 public SDPrintDialogUI(Shell s
, SDWidget v
) {
466 public SDPrintDialogUI(Shell s
, SDWidget v
, boolean showPrintBtn
) {
470 showPrintButton
= showPrintBtn
;
472 printerData
= Printer
.getDefaultPrinterData();
473 if (printerData
!= null) {
474 printerData
.scope
= PrinterData
.SELECTION
;
477 pagesList
= new int[0];
479 selectionListener
= new SelectionListener() {
482 public void widgetSelected(SelectionEvent e
) {
483 if (useCurrentZoom
.getSelection()) {
484 hPagesNum
.setEnabled(false);
485 vPagesNum
.setEnabled(false);
487 if (setHPagesNumber
.getSelection()) {
488 hPagesNum
.setEnabled(true);
489 vPagesNum
.setEnabled(false);
490 if (currentPage
.getSelection()) {
491 currentPage
.setSelection(false);
492 allPages
.setSelection(true);
494 if (hPagesNum
.getText() == "") //$NON-NLS-1$
495 hPagesNum
.setText("1"); //$NON-NLS-1$
497 if (setVPagesNumber
.getSelection()) {
498 hPagesNum
.setEnabled(false);
499 vPagesNum
.setEnabled(true);
500 if (currentPage
.getSelection()) {
501 currentPage
.setSelection(false);
502 allPages
.setSelection(true);
504 if (vPagesNum
.getText() == "") //$NON-NLS-1$
505 vPagesNum
.setText("1"); //$NON-NLS-1$
507 if (currentPage
.getSelection() || allPages
.getSelection() || pageList
.getSelection()) {
508 fromPage
.setEnabled(false);
509 toPage
.setEnabled(false);
511 fromPage
.setEnabled(true);
512 toPage
.setEnabled(true);
515 currentPage
.setEnabled(useCurrentZoom
.getSelection());
516 overviewCanvas
.setEnabled(pageList
.getSelection());
517 if (overviewCanvas
.isEnabled() && (e
.widget
== useCurrentZoom
|| e
.widget
== setHPagesNumber
|| e
.widget
== setVPagesNumber
)) {
518 pagesList
= new int[1];
522 } else if (overviewCanvas
.isEnabled() && (e
.widget
== pageList
)) {
523 if (pagesList
== null || pagesList
.length
<= 0) {
524 pagesList
= new int[1];
531 totalPages
.setText(Integer
.valueOf(maxNumOfPages()).toString());
532 overviewCanvas
.redraw();
533 overviewCanvas
.update();
537 public void widgetDefaultSelected(SelectionEvent e
) {
538 pagesList
= new int[0];
540 overviewCanvas
.redraw();
545 modifyListener
= new ModifyListener() {
548 public void modifyText(ModifyEvent e
) {
549 pagesList
= new int[0];
551 totalPages
.setText(Integer
.valueOf(maxNumOfPages()).toString());
552 overviewCanvas
.redraw();
558 protected GridData
newGridData(int span
) {
559 GridData data
= new GridData(GridData
.GRAB_VERTICAL
| GridData
.VERTICAL_ALIGN_FILL
| GridData
.GRAB_HORIZONTAL
| GridData
.HORIZONTAL_ALIGN_FILL
);
560 data
.horizontalSpan
= span
;
564 public Control
createDialogArea(Composite parent
) {
566 GridLayout parentLayout
= new GridLayout();
567 parentLayout
.numColumns
= 6;
568 parent
.setLayout(parentLayout
);
570 Group g1
= new Group(parent
, SWT
.SHADOW_NONE
);
571 g1
.setText(SDMessages
._113
);
572 g1
.setLayoutData(newGridData(3));
573 GridLayout g1layout
= new GridLayout();
574 g1layout
.numColumns
= 2;
575 g1
.setLayout(g1layout
);
577 useCurrentZoom
= new Button(g1
, SWT
.RADIO
);
578 useCurrentZoom
.setText(SDMessages
._112
);
579 useCurrentZoom
.setLayoutData(newGridData(2));
580 useCurrentZoom
.addSelectionListener(selectionListener
);
582 setHPagesNumber
= new Button(g1
, SWT
.RADIO
);
583 setHPagesNumber
.setText(SDMessages
._110
);
584 setHPagesNumber
.setLayoutData(newGridData(1));
585 setHPagesNumber
.addSelectionListener(selectionListener
);
587 hPagesNum
= new Text(g1
, SWT
.SINGLE
| SWT
.BORDER
);
588 hPagesNum
.addModifyListener(modifyListener
);
590 setVPagesNumber
= new Button(g1
, SWT
.RADIO
);
591 setVPagesNumber
.setText(SDMessages
._111
);
592 setVPagesNumber
.setLayoutData(newGridData(1));
593 setVPagesNumber
.addSelectionListener(selectionListener
);
595 vPagesNum
= new Text(g1
, SWT
.SINGLE
| SWT
.BORDER
);
596 vPagesNum
.addModifyListener(modifyListener
);
598 Label nbTotal
= new Label(g1
, SWT
.SHADOW_NONE
| SWT
.RIGHT
);
599 nbTotal
.setText(SDMessages
._109
);
600 // nbTotal.setLayoutData(newGridData(1));
602 totalPages
= new Text(g1
, SWT
.SINGLE
| SWT
.BORDER
| SWT
.READ_ONLY
);
603 // nbHV.addModifyListener(modifListener);
605 Group g2
= new Group(parent
, SWT
.SHADOW_NONE
);
606 g2
.setText(SDMessages
._119
);
607 GridData data
= new GridData(GridData
.GRAB_VERTICAL
| GridData
.VERTICAL_ALIGN_FILL
| GridData
.GRAB_HORIZONTAL
| GridData
.HORIZONTAL_ALIGN_FILL
);
608 data
.horizontalSpan
= 3;
609 data
.verticalSpan
= 2;
610 g2
.setLayoutData(data
);
611 GridLayout g2layout
= new GridLayout();
613 g2layout
.numColumns
= 1;
614 // SVLayout g2layout = new SVLayout();
615 g2
.setLayout(g2layout
);
617 GridData data2
= new GridData(GridData
.GRAB_VERTICAL
| GridData
.VERTICAL_ALIGN_FILL
| GridData
.GRAB_HORIZONTAL
| GridData
.HORIZONTAL_ALIGN_FILL
);
618 data2
.horizontalSpan
= 1;
619 data2
.verticalSpan
= 1;
621 overviewCanvas
= new LocalSD(g2
, SWT
.NO_BACKGROUND
);
622 GridData seqDiagLayoutData
= new GridData(GridData
.HORIZONTAL_ALIGN_FILL
// |GridData.GRAB_HORIZONTAL|
623 /* GridData.GRAB_VERTICAL| */| GridData
.VERTICAL_ALIGN_FILL
);
624 // seqDiagLayoutData.widthHint=400;
625 // seqDiagLayoutData.horizontalAlignment=GridData.HORIZONTAL_ALIGN_FILL;
626 overviewCanvas
.setLayoutData(seqDiagLayoutData
);
627 // overviewCanvas.resizeContents(100,100);
628 if (view
.getContentsWidth() < view
.getVisibleWidth() && view
.getContentsHeight() < view
.getVisibleHeight())
632 overviewCanvas
.setFrame(view
.getFrame(), true);
633 overviewCanvas
.zoomValue
= (float) 1 / test
;
634 overviewCanvas
.setCornerControl(null);
635 seqDiagLayoutData
.widthHint
= overviewCanvas
.getContentsWidth() / test
;
636 seqDiagLayoutData
.widthHint
= overviewCanvas
.getFrame().getWidth() / test
+ 15;
638 if (view
.getVisibleWidth() < view
.getContentsWidth()) {
639 seqDiagLayoutData
.widthHint
= overviewCanvas
.getContentsWidth() / test
;
640 if (seqDiagLayoutData
.widthHint
> Display
.getDefault().getClientArea().width
/ 4)
641 seqDiagLayoutData
.widthHint
= Display
.getDefault().getClientArea().width
/ 4;
643 seqDiagLayoutData
.widthHint
= overviewCanvas
.getFrame().getWidth() / test
+ 15;
645 if (view
.getVisibleHeight() < view
.getContentsHeight()) {
646 seqDiagLayoutData
.heightHint
= overviewCanvas
.getContentsHeight() / test
;
647 if (seqDiagLayoutData
.heightHint
> Display
.getDefault().getClientArea().width
/ 4)
648 seqDiagLayoutData
.heightHint
= Display
.getDefault().getClientArea().width
/ 4;
650 seqDiagLayoutData
.heightHint
= overviewCanvas
.getFrame().getHeight() / test
;
652 overviewCanvas
.setEnabled(false);
654 currentSelection
= new Label(g2
, SWT
.SHADOW_NONE
| SWT
.LEFT
);
655 currentSelection
.setLayoutData(newGridData(1));
657 Group g3
= new Group(parent
, SWT
.SHADOW_NONE
);
658 g3
.setText(SDMessages
._118
);
659 g3
.setLayoutData(newGridData(3));
660 GridLayout g3layout
= new GridLayout();
661 g3layout
.numColumns
= 4;
662 g3
.setLayout(g3layout
);
664 allPages
= new Button(g3
, SWT
.RADIO
);
665 allPages
.setText(SDMessages
._108
);
666 allPages
.setLayoutData(newGridData(4));
667 allPages
.addSelectionListener(selectionListener
);
669 currentPage
= new Button(g3
, SWT
.RADIO
);
670 currentPage
.setText(SDMessages
._107
);
671 currentPage
.setLayoutData(newGridData(4));
672 currentPage
.setEnabled(true);
673 currentPage
.setSelection(true);
674 currentPage
.addSelectionListener(selectionListener
);
676 pageList
= new Button(g3
, SWT
.RADIO
);
677 pageList
.setText(SDMessages
._106
);
678 pageList
.setLayoutData(newGridData(4));
679 pageList
.addSelectionListener(selectionListener
);
681 pageRange
= new Button(g3
, SWT
.RADIO
);
682 pageRange
.setText(SDMessages
._103
);
683 pageRange
.setLayoutData(newGridData(1));
684 pageRange
.addSelectionListener(selectionListener
);
686 fromPage
= new Text(g3
, SWT
.SINGLE
| SWT
.BORDER
);
688 Label labelTo
= new Label(g3
, SWT
.CENTER
);
689 labelTo
.setText(SDMessages
._105
);
691 toPage
= new Text(g3
, SWT
.SINGLE
| SWT
.BORDER
);
693 toolTip
= new DiagramToolTip(overviewCanvas
);
695 overviewCanvas
.getViewControl().addMouseTrackListener(new MouseTrackListener() {
698 public void mouseEnter(MouseEvent e
) {
699 toolTip
.hideToolTip();
703 public void mouseExit(MouseEvent e
) {
704 toolTip
.hideToolTip();
708 public void mouseHover(MouseEvent e
) {
709 int x1
= (int) (overviewCanvas
.viewToContentsX(e
.x
) / overviewCanvas
.zoomValue
/ stepX
);
710 int x2
= (int) (overviewCanvas
.viewToContentsY(e
.y
) / overviewCanvas
.zoomValue
/ stepY
);
711 int num
= x1
+ x2
* getNbRow() + 1;
712 if (num
> maxNumOfPages())
715 toolTip
.showToolTip(String
.valueOf(num
));
718 currentSelection
.setText("");//$NON-NLS-1$
719 toolTip
.hideToolTip();
725 overviewCanvas
.addTraverseListener(new TraverseListener() {
728 public void keyTraversed(TraverseEvent e
) {
729 if ((e
.detail
== SWT
.TRAVERSE_TAB_NEXT
) || (e
.detail
== SWT
.TRAVERSE_TAB_PREVIOUS
))
735 overviewCanvas
.addFocusListener(new FocusListener() {
738 public void focusGained(FocusEvent e
) {
739 overviewCanvas
.redraw();
743 public void focusLost(FocusEvent e
) {
744 overviewCanvas
.redraw();
748 if (showPrintButton
) {
749 Composite printerDlg
= new Composite(parent
, SWT
.NONE
);
750 data
= GridUtil
.createHorizontalFill();
751 data
.horizontalSpan
= 6;
752 parentLayout
= new GridLayout();
753 parentLayout
.numColumns
= 2;
754 printerDlg
.setLayout(parentLayout
);
755 printerDlg
.setLayoutData(data
);
757 Label label
= new Label(printerDlg
, SWT
.NONE
);
758 label
.setLayoutData(GridUtil
.createHorizontalFill());
759 printerDialog
= new Button(printerDlg
, SWT
.PUSH
);
760 printerDialog
.setText(SDMessages
._115
);
762 printerDialog
.addSelectionListener(new SelectionListener() {
765 public void widgetSelected(SelectionEvent e
) {
767 printButtonSelected();
771 public void widgetDefaultSelected(SelectionEvent e
) {
777 updatePrinterStatus();
782 public int getPagesForSelection() {
786 public boolean okPressed() {
787 printAll
= allPages
.getSelection();
788 printCurrent
= currentPage
.getSelection();
789 printSelection
= pageList
.getSelection();
790 printRange
= pageRange
.getSelection();
793 from
= Integer
.valueOf(fromPage
.getText()).intValue();
794 to
= Integer
.valueOf(toPage
.getText()).intValue();
795 if (from
> maxNumOfPages() || to
> maxNumOfPages() || from
<= 0 || to
<= 0) {
796 MessageDialog
.openError(getShell(), SDMessages
._98
, SDMessages
._99
);
799 } else if (setHPagesNumber
.getSelection() && nbPages
<= 0) {
800 MessageDialog
.openError(getShell(), SDMessages
._98
, SDMessages
._101
);
802 } else if (setVPagesNumber
.getSelection() && nbPages
<= 0) {
803 MessageDialog
.openError(getShell(), SDMessages
._98
, SDMessages
._100
);
805 } else if (printSelection
&& getPageList().length
<= 0) {
806 MessageDialog
.openError(getShell(), SDMessages
._98
, SDMessages
._102
);
810 } catch (Exception e
) {
811 MessageDialog
.openError(getShell(), SDMessages
._98
, SDMessages
._99
);
820 public ImageData
drawRegionSelected(Image img
, Rectangle r
, RGB color
) {
821 ImageData id
= img
.getImageData();
822 for (int a
= 0; a
< r
.width
&& r
.x
+ a
< id
.width
; a
++) {
823 for (int b
= 0; b
< r
.height
&& r
.y
+ b
< id
.height
; b
++) {
824 int index
= id
.getPixel(r
.x
+ a
, r
.y
+ b
);
825 RGB rgb
= id
.palette
.getRGB(index
);
826 rgb
= combine(color
, rgb
);
827 id
.setPixel(r
.x
+ a
, r
.y
+ b
, id
.palette
.getPixel(rgb
));
833 public static RGB
combine(RGB front
, RGB back
) {
843 double af
= (_af
) / 255.0;
844 double rf
= front
.red
;
845 double gf
= front
.green
;
846 double bf
= front
.blue
;
848 double ab
= (_ab
) / 255.0;
849 double rb
= back
.red
;
850 double gb
= back
.green
;
851 double bb
= back
.blue
;
853 double k
= (1.0 - af
) * ab
;
854 int r
= (int) ((af
* rf
+ k
* rb
));
855 int g
= (int) ((af
* gf
+ k
* gb
));
856 int b
= (int) ((af
* bf
+ k
* bb
));
858 return new RGB(r
, g
, b
);
861 protected void computeStepXY() {
862 float cw
= overviewCanvas
.getContentsWidth() / overviewCanvas
.zoomValue
;
863 float ch
= overviewCanvas
.getContentsHeight() / overviewCanvas
.zoomValue
;
865 if (printerData
== null) {
871 Printer printer
= new Printer(printerData
);
872 if (setHPagesNumber
.getSelection()) {
873 nbPages
= Integer
.valueOf(hPagesNum
.getText()).intValue();
874 float z1
= (float) view
.getContentsWidth() / (cw
);
875 float z2
= printer
.getClientArea().width
/ ((float) view
.getContentsWidth() / nbPages
);
877 stepY
= printer
.getClientArea().height
/ z1
/ z2
;
878 stepX
= cw
/ nbPages
;
879 } else if (setVPagesNumber
.getSelection()) {
880 nbPages
= Integer
.valueOf(vPagesNum
.getText()).intValue();
881 float z1
= (float) view
.getContentsHeight() / (ch
);
882 float z2
= printer
.getClientArea().height
/ ((float) view
.getContentsHeight() / nbPages
);
883 stepX
= printer
.getClientArea().width
/ z1
/ z2
;
884 stepY
= ch
/ nbPages
;
886 float z1
= view
.getContentsWidth() / (cw
);
887 stepX
= ((float) view
.getVisibleWidth() / z1
);
888 nbPages
= Math
.round(cw
/ stepX
);
891 int pw
= printer
.getClientArea().width
;
892 int ph
= printer
.getClientArea().height
;
893 float z2
= pw
/ ((float) view
.getContentsWidth() / nbPages
);
894 stepY
= ((float) ph
/ z1
/ z2
);
898 stepX
= stepY
= nbPages
= 0;
901 sTX
= stepX
* (view
.getContentsWidth() / cw
);
902 sTY
= stepY
* (view
.getContentsHeight() / ch
);
904 if ((view
.getVisibleWidth() > view
.getContentsWidth()) && (setVPagesNumber
.getSelection() || setHPagesNumber
.getSelection()))
905 rat
= (float) view
.getVisibleWidth() / (float) view
.getContentsWidth();
906 zoomFactor
= (overviewCanvas
.getContentsWidth() / cw
) / overviewCanvas
.getZoomFactor() * rat
;// /view.getZoomFactor();
909 public int[] getPageList() {
913 public void addToPagesList(int num
) {
914 int temp
[] = new int[pagesList
.length
+ 1];
915 System
.arraycopy(pagesList
, 0, temp
, 0, pagesList
.length
);
916 temp
[temp
.length
- 1] = num
;
917 pagesList
= new int[temp
.length
];
918 System
.arraycopy(temp
, 0, pagesList
, 0, temp
.length
);
921 public void removeFromPagesList(int num
) {
922 int pos
= Arrays
.binarySearch(pagesList
, num
);
923 int temp
[] = new int[pagesList
.length
- 1];
924 System
.arraycopy(pagesList
, 0, temp
, 0, pos
);
925 System
.arraycopy(pagesList
, pos
+ 1, temp
, pos
, pagesList
.length
- pos
- 1);
926 pagesList
= new int[temp
.length
];
927 System
.arraycopy(temp
, 0, pagesList
, 0, temp
.length
);
930 public int maxNumOfPages() {
931 int max
= getNbRow() * getNbLines();
935 public int getNbRow() {
936 if (!setHPagesNumber
.isDisposed()) {
937 int cw
= (int) (overviewCanvas
.getContentsWidth() / overviewCanvas
.zoomValue
);
940 int row
= (int) (cw
/ stepX
);
941 if (setHPagesNumber
.getSelection())
942 row
= Math
.round((float) cw
/ stepX
);
943 else if ((cw
% stepX
!= 0))
951 public int getNbLines() {
952 if (!setVPagesNumber
.isDisposed()) {
953 int ch
= (int) (overviewCanvas
.getContentsHeight() / overviewCanvas
.zoomValue
);
956 int line
= (int) (ch
/ stepY
);
957 if (setVPagesNumber
.getSelection())
958 line
= Math
.round((float) ch
/ stepY
);
959 else if (ch
% stepY
!= 0)
966 public boolean printAll() {
970 public boolean printCurrent() {
974 public boolean printSelection() {
975 return printSelection
;
978 public boolean printRange() {
982 public float getStepX() {
986 public float getStepY() {
990 public float getZoomFactor() {
994 // public abstract void createButtonsForButtonBar(Composite parent);
996 public PrinterData
getPrinterData() {
1000 public int getFrom() {
1004 public int getTo() {
1008 protected void displayPageNum() {
1010 String message
= MessageFormat
.format(SDMessages
._117
, new Object
[] { Integer
.valueOf(pageNum
) });
1011 currentSelection
.setText(message
);
1012 currentSelection
.getParent().layout();
1016 public Shell
getShell() {
1020 public void setShell(Shell shell
) {
1024 public void printButtonSelected() {
1025 PrintDialog printer
= new PrintDialog(getShell());
1026 if (allPages
.getSelection())
1027 printer
.setScope(PrinterData
.ALL_PAGES
);
1028 if (currentPage
.getSelection())
1029 printer
.setScope(PrinterData
.SELECTION
);
1030 if (pageList
.getSelection())
1031 printer
.setScope(PrinterData
.SELECTION
);
1032 if (pageRange
.getSelection()) {
1033 printer
.setScope(PrinterData
.PAGE_RANGE
);
1034 from
= Integer
.valueOf(fromPage
.getText()).intValue();
1035 to
= Integer
.valueOf(toPage
.getText()).intValue();
1036 printer
.setStartPage(from
);
1037 printer
.setEndPage(to
);
1040 PrinterData newPrinterData
= printer
.open();
1041 if (newPrinterData
!= null) {
1042 printerData
= newPrinterData
;
1044 updatePrinterStatus();
1046 if (printer
.getScope() == PrinterData
.ALL_PAGES
) {
1047 allPages
.setSelection(true);
1048 currentPage
.setSelection(false);
1049 pageList
.setSelection(false);
1050 pageRange
.setSelection(false);
1051 hPagesNum
.setEnabled(false);
1052 vPagesNum
.setEnabled(false);
1054 if (printer
.getScope() == PrinterData
.PAGE_RANGE
) {
1055 allPages
.setSelection(false);
1056 currentPage
.setSelection(false);
1057 pageList
.setSelection(false);
1058 pageRange
.setSelection(true);
1059 fromPage
.setEnabled(true);
1060 toPage
.setEnabled(true);
1061 fromPage
.setText((Integer
.valueOf(printer
.getStartPage())).toString());
1062 toPage
.setText((Integer
.valueOf(printer
.getEndPage())).toString());
1065 overviewCanvas
.redraw();
1068 public void setParentWizardPage(WizardPage parent
) {
1069 parentWizardPage
= parent
;
1072 public void setParentDialog(SDPrintDialog parent
) {
1073 parentDialog
= parent
;
1076 protected void updatePrinterStatus() {
1077 if (parentWizardPage
!= null) {
1078 // used in the wizard dialog
1079 if (printerData
== null) {
1080 // show error message and disable Finish button
1081 parentWizardPage
.setErrorMessage(SDMessages
._135
);
1082 parentWizardPage
.setPageComplete(false);
1084 // clear error message and enable Finish button
1085 parentWizardPage
.setErrorMessage(null);
1086 parentWizardPage
.setPageComplete(true);
1088 } else if (parentDialog
!= null) {
1089 // used in the print dialog
1090 if (printerData
== null) {
1091 // show error message and disable OK button
1092 parentDialog
.setErrorMessage(SDMessages
._135
);
1093 parentDialog
.setPageComplete(false);
1095 // clear error message and enable OK button
1096 parentDialog
.setErrorMessage(null);
1097 parentDialog
.setPageComplete(true);