Improve test cases, speed and accuracy.
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf.ui / src / org / eclipse / linuxtools / tmf / ui / views / uml2sd / util / SDPrintDialogUI.java
CommitLineData
73005152
BH
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 $
8 *
9 * Contributors:
10 * IBM - Initial API and implementation
11 * Bernd Hufmann - Updated for TMF
12 **********************************************************************/
13package org.eclipse.linuxtools.tmf.ui.views.uml2sd.util;
14
15import java.text.MessageFormat;
16import java.util.Arrays;
17
18import org.eclipse.jface.dialogs.MessageDialog;
19import org.eclipse.jface.wizard.WizardPage;
20import org.eclipse.linuxtools.tmf.ui.viewers.timeAnalysis.GridUtil;
21import org.eclipse.linuxtools.tmf.ui.views.uml2sd.DiagramToolTip;
22import org.eclipse.linuxtools.tmf.ui.views.uml2sd.NGC;
23import org.eclipse.linuxtools.tmf.ui.views.uml2sd.SDWidget;
24import org.eclipse.swt.SWT;
25import org.eclipse.swt.events.FocusEvent;
26import org.eclipse.swt.events.FocusListener;
27import org.eclipse.swt.events.KeyEvent;
28import org.eclipse.swt.events.ModifyEvent;
29import org.eclipse.swt.events.ModifyListener;
30import org.eclipse.swt.events.MouseEvent;
31import org.eclipse.swt.events.MouseTrackListener;
32import org.eclipse.swt.events.SelectionEvent;
33import org.eclipse.swt.events.SelectionListener;
34import org.eclipse.swt.events.TraverseEvent;
35import org.eclipse.swt.events.TraverseListener;
36import org.eclipse.swt.graphics.GC;
37import org.eclipse.swt.graphics.Image;
38import org.eclipse.swt.graphics.ImageData;
39import org.eclipse.swt.graphics.RGB;
40import org.eclipse.swt.graphics.Rectangle;
41import org.eclipse.swt.layout.GridData;
42import org.eclipse.swt.layout.GridLayout;
43import org.eclipse.swt.printing.PrintDialog;
44import org.eclipse.swt.printing.Printer;
45import org.eclipse.swt.printing.PrinterData;
46import org.eclipse.swt.widgets.Button;
47import org.eclipse.swt.widgets.Composite;
48import org.eclipse.swt.widgets.Control;
49import org.eclipse.swt.widgets.Display;
50import org.eclipse.swt.widgets.Group;
51import org.eclipse.swt.widgets.Label;
52import org.eclipse.swt.widgets.Shell;
53import org.eclipse.swt.widgets.Text;
54
55/**
56 * @author sveyrier
57 */
58public class SDPrintDialogUI {
59
60 protected Button setHPagesNumber;
61
62 protected Button setVPagesNumber;
63
64 protected Button useCurrentZoom;
65
66 protected Button allPages;
67
68 protected Button currentPage;
69
70 protected Button pageList;
71
72 protected Button pageRange;
73
74 protected Text fromPage;
75
76 protected Text toPage;
77
78 protected SDWidget view;
79
80 protected Text hPagesNum;
81
82 protected Text vPagesNum;
83
84 protected Text totalPages;
85
86 protected ModifyListener modifyListener;
87
88 protected SelectionListener selectionListener;
89
90 protected LocalSD overviewCanvas;
91
92 protected int nbPages = 0;
93
94 protected int pageNum = -1;
95
96 protected int firstPage = -1;
97
98 protected int pagesList[];
99
100 protected float stepX, stepY, sTX, sTY;
101
102 protected int from, to;
103
104 protected boolean multiSelection = false;
105
106 protected boolean areaSelection = false;
107
108 protected boolean printAll;
109 protected boolean printCurrent;
110 protected boolean printSelection;
111 protected boolean printRange;
112
113 protected int nbRows, nbLines;
114
115 protected float zoomFactor;
116
117 protected PrinterData printerData;
118
119 protected DiagramToolTip toolTip = null;
120
121 protected Label currentSelection;
122
123 protected Shell shell;
124
125 protected Button printerDialog;
126
127 protected boolean showPrintButton;
128
129 int test = 3;
130
73005152
BH
131 // bug 195026
132 protected WizardPage parentWizardPage = null;
133 protected SDPrintDialog parentDialog = null;
134
135 protected class LocalSD extends SDWidget {
136
137 @Override
138 public int getContentsHeight() {
139 if (view.getContentsHeight() > view.getContentsHeight())
140 return (int) (view.getVisibleHeight() / (float) test / view.zoomValue);
141 else
142 return (int) (super.getContentsHeight());
143 }
144
145 @Override
146 public int getContentsWidth() {
147 if (view.getVisibleWidth() > view.getContentsWidth())
148 return (int) (view.getVisibleWidth() / (float) test / view.zoomValue);
149 else
150 return (int) (super.getContentsWidth());
151 }
152
153 public LocalSD(Composite c, int s) {
154 super(c, s);
155 }
156
157 @Override
158 protected void contentsMouseHover(MouseEvent event) {
159 }
160
161 protected Image createPagesSelectionImages(Image img, int width, float stepX, int height, float stepY) {
162
163 Image over = new Image(super.getShell().getDisplay(), img.getImageData());
164
165 for (int pageIndex = 0; pageIndex < pagesList.length; pageIndex++) {
166 /*
167 * int line=pageNum/getPagesForSelection(); int row=pageNum%getPagesForSelection(); if (row!=0) line++;
168 * else row=getPagesForSelection(); line--; row--; over=new
169 * Image(super.getShell().getDisplay(),drawRegionSelected(img,new Rectangle(row*stepX,
170 * line*stepY,stepX,stepY),new RGB(0,155,0)));
171 */
172
173 int pageNum = pagesList[pageIndex];
174 if (getPagesForSelection() > 0 && pageNum > 0) {
175 int line = pageNum / getNbRow();
176 int row = pageNum % getNbRow();
177 if (row != 0)
178 line++;
179 else
180 row = getNbRow();
181
182 line--;
183 row--;
184
185 Image toDel = over;
186 if (overviewCanvas.isFocusControl())
187 over = new Image(super.getShell().getDisplay(), drawRegionSelected(toDel, new Rectangle(contentsToViewX((int) (row * stepX * overviewCanvas.zoomValue)), contentsToViewY((int) (line * stepY * overviewCanvas.zoomValue)),
188 ((int) (stepX * overviewCanvas.zoomValue)), ((int) (stepY * overviewCanvas.zoomValue))), new RGB(0, 0, 128)));
189 else
190 over = new Image(super.getShell().getDisplay(), drawRegionSelected(toDel, new Rectangle(contentsToViewX((int) (row * stepX * overviewCanvas.zoomValue)), contentsToViewY((int) (line * stepY * overviewCanvas.zoomValue)),
191 ((int) (stepX * overviewCanvas.zoomValue)), ((int) (stepY * overviewCanvas.zoomValue))), new RGB(221, 208, 200)));
192 toDel.dispose();
193 }
194 }
195
196 Arrays.sort(pagesList);
197 int pos = Arrays.binarySearch(pagesList, pageNum);
198 if (pos < 0)
199 if (getPagesForSelection() > 0 && pageNum > 0) {
200 int line = pageNum / getNbRow();
201 int row = pageNum % getNbRow();
202 if (row != 0)
203 line++;
204 else
205 row = getNbRow();
206
207 line--;
208 row--;
209
210 Image toDel = over;
211 over = new Image(super.getShell().getDisplay(), drawRegionSelected(toDel, new Rectangle(contentsToViewX((int) (row * stepX * overviewCanvas.zoomValue)), contentsToViewY((int) (line * stepY * overviewCanvas.zoomValue)),
212 ((int) (stepX * overviewCanvas.zoomValue)), ((int) (stepY * overviewCanvas.zoomValue))), new RGB(221, 208, 200)));
213 toDel.dispose();
214 }
215
216 GC imGC2 = new GC(over);
217 imGC2.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_BLACK));
218 NGC imGC = new NGC(overviewCanvas, imGC2);
219 for (int i = 0, x = 0; x <= width && stepX > 0; i++, x = (int) (i * stepX))
220 imGC.drawLine(x, 0, x, height);
221
222 for (int j = 0, y = 0; y <= height && stepY > 0; j++, y = (int) (j * stepY))
223 imGC.drawLine(0, y, width, y);
224
225 // imGC2.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_BLUE));
226 // // //imGC.drawLine(0, height, width, (int)(getVisibleHeight()/zoomValue));
227 // imGC.fillRectangle(0,height,(int)(getVisibleWidth()/zoomValue),
228 // (int)(getVisibleHeight()/zoomValue)-height);
229
230 imGC2.dispose();
231 imGC.dispose();
232 return over;
233 }
234
235 @Override
236 protected void drawContents(GC gc, int clipx, int clipy, int clipw, int cliph) {
237
238 Image dbuffer = getDrawBuffer(gc);
239 computeStepXY();
240 Image d;
241
242 int lw = (int) (getContentsWidth() / zoomValue);
243 if (getContentsWidth() < getVisibleWidth())
244 lw = (int) (getVisibleWidth() / zoomValue);
245
246 int lh = (int) (getContentsHeight() / zoomValue);
247 if (getContentsHeight() < getVisibleHeight())
248 lh = (int) (getVisibleHeight() / zoomValue);
249 d = createPagesSelectionImages(dbuffer, lw, stepX, lh, stepY);
250
251 if (!isEnabled()) {
252 Image toDel = d;
253 d = new Image(super.getShell().getDisplay(), drawRegionSelected(d, new Rectangle(0, 0, lw, lh), new RGB(221, 208, 200)));
254 // d, new Rectangle(0,0,((int)(stepX*overviewCanvas.zoomValue)),((int)(
255 // stepY*overviewCanvas.zoomValue))),new RGB(221,208,200)));
256 toDel.dispose();
257 }
258
259 Rectangle area = getClientArea();
260 int w = d.getBounds().width;
261 int h = d.getBounds().height;
262 gc.drawImage(d, 0, 0, w, h, 0, 0, area.width, area.height);
263
264 totalPages.setText(Integer.valueOf(maxNumOfPages()).toString());
265 displayPageNum();
266 dbuffer.dispose();
267 d.dispose();
268 gc.dispose();
269
270 }
271
272 @Override
273 protected void keyPressedEvent(KeyEvent e) {
274 if (e.keyCode == SWT.CTRL)
275 multiSelection = true;
276 if (e.keyCode == SWT.SHIFT)
277 areaSelection = true;
278 if (e.keyCode == SWT.ARROW_DOWN) {
279 if (pageNum + getNbRow() <= maxNumOfPages())
280 pageNum += getNbRow();
281 int line = pageNum / getNbRow();
282 int row = pageNum % getNbRow();
283 if (row == 0)
284 line--;
285 if ((line + 1) * stepY > (overviewCanvas.getContentsY() + overviewCanvas.getVisibleHeight()) / overviewCanvas.zoomValue)
286 overviewCanvas.scrollBy(0, (int) (stepY * overviewCanvas.zoomValue));
287 }
288 if (e.keyCode == SWT.ARROW_UP) {
289 if (pageNum - getNbRow() > 0)
290 pageNum -= getNbRow();
291 int line = pageNum / getNbRow();
292 int row = pageNum % getNbRow();
293 if (row == 0)
294 line--;
295 if ((line) * stepY <= overviewCanvas.getContentsY() / overviewCanvas.zoomValue)
296 overviewCanvas.scrollBy(0, -(int) (stepY * overviewCanvas.zoomValue));
297 }
298 if (e.keyCode == SWT.ARROW_LEFT) {
299 if ((pageNum - 2) / getNbRow() == (pageNum - 1) / getNbRow() && pageNum > 1)
300 pageNum--;
301 int row = pageNum % getNbRow();
302 if ((row - 1) * stepX < (overviewCanvas.getContentsX()) / overviewCanvas.zoomValue)
303 overviewCanvas.scrollBy(-(int) (stepX * overviewCanvas.zoomValue), 0);
304 }
305 if (e.keyCode == SWT.ARROW_RIGHT) {
306 if ((pageNum - 1) / getNbRow() == pageNum / getNbRow())
307 pageNum++;
308 int row = pageNum % getNbRow();
309 if (row == 0)
310 row = getNbRow();
311 if ((row) * stepX > (overviewCanvas.getContentsX() + overviewCanvas.getVisibleWidth()) / overviewCanvas.zoomValue)
312 overviewCanvas.scrollBy((int) (stepX * overviewCanvas.zoomValue), 0);
313 }
314
315 if (e.keyCode == 32 && pageNum > -1) {
316 Arrays.sort(pagesList);
317 int pos = Arrays.binarySearch(pagesList, pageNum);
318 if (pos < 0)
319 addToPagesList(pageNum);
320 else
321 removeFromPagesList(pageNum);
322 }
323
324 if (!areaSelection && !multiSelection) {
325 firstPage = pageNum;
326 pagesList = new int[1];
327 pagesList[0] = pageNum;
328 } else if ((pageNum != -1) && (areaSelection) && (firstPage != -1)) {
329 pagesList = new int[0];
330 int line1 = firstPage / getNbRow();
331 int row1 = firstPage % getNbRow();
332 if (row1 != 0)
333 line1++;
334 else
335 row1 = getNbRow();
336
337 int line2 = pageNum / getNbRow();
338 int row2 = pageNum % getNbRow();
339 if (row2 != 0)
340 line2++;
341 else
342 row2 = getNbRow();
343
344 int temp;
345 if (line1 > line2) {
346 temp = line2;
347 line2 = line1;
348 line1 = temp;
349 }
350
351 if (row1 > row2) {
352 temp = row2;
353 row2 = row1;
354 row1 = temp;
355 }
356
357 for (int i = row1 - 1; i < row2; i++)
358 for (int j = line1 - 1; j < line2; j++)
359 addToPagesList(i + j * getNbRow() + 1);
360
361 }
362 displayPageNum();
363 overviewCanvas.redraw();
364 }
365
366 @Override
367 protected void keyReleasedEvent(KeyEvent e) {
368 if (e.keyCode == SWT.CTRL)
369 multiSelection = false;
370 if (e.keyCode == SWT.SHIFT)
371 areaSelection = false;
372 }
373
374 @Override
375 protected void contentsMouseDownEvent(MouseEvent event) {
376
377 computeStepXY();
378 int x1 = (int) ((event.x / overviewCanvas.zoomValue) / stepX);
379 int x2 = (int) ((event.y / overviewCanvas.zoomValue) / stepY);
380
381 int oldPage = pageNum;
382
383 pageNum = x1 + x2 * getNbRow() + 1;
384
385 if (pageNum > maxNumOfPages()) {
386 pageNum = oldPage;
387 return;
388 }
389
390 if (!areaSelection)
391 firstPage = pageNum;
392
393 if ((pageNum != -1) && (multiSelection)) {
394 Arrays.sort(pagesList);
395 int pos = Arrays.binarySearch(pagesList, pageNum);
396 if (pos < 0)
397 addToPagesList(pageNum);
398 else
399 removeFromPagesList(pageNum);
400 } else if ((pageNum != -1) && (areaSelection) && (firstPage != -1)) {
401
402 pagesList = new int[0];
403
404 int line1 = firstPage / getNbRow();
405 int row1 = firstPage % getNbRow();
406 if (row1 != 0)
407 line1++;
408 else
409 row1 = getNbRow();
410
411 int line2 = pageNum / getNbRow();
412 int row2 = pageNum % getNbRow();
413 if (row2 != 0)
414 line2++;
415 else
416 row2 = getNbRow();
417
418 int temp;
419 if (line1 > line2) {
420 temp = line2;
421 line2 = line1;
422 line1 = temp;
423 }
424
425 if (row1 > row2) {
426 temp = row2;
427 row2 = row1;
428 row1 = temp;
429 }
430
431 for (int i = row1 - 1; i < row2; i++)
432 for (int j = line1 - 1; j < line2; j++)
433 addToPagesList(i + j * getNbRow() + 1);
434 } else {
435 pagesList = new int[1];
436 pagesList[0] = pageNum;
437 }
438 if ((event.stateMask & SWT.CTRL) != 0)
439 multiSelection = true;
440 displayPageNum();
441 redraw();
442 }
443
444 @Override
445 protected void contentsMouseMoveEvent(MouseEvent e) {
446 toolTip.hideToolTip();
447 }
448
449 @Override
450 public void resizeContents(int _w, int _h) {
73005152 451 super.resizeContents(_w, _h);
73005152
BH
452 }
453
454 }
455
456 public SDPrintDialogUI(Shell s, SDWidget v) {
457
458 this(s, v, false);
459
460 }
461
462 public SDPrintDialogUI(Shell s, SDWidget v, boolean showPrintBtn) {
463
464 setShell(s);
465 view = v;
466 showPrintButton = showPrintBtn;
467
468 printerData = Printer.getDefaultPrinterData();
469 if (printerData != null) {
470 printerData.scope = PrinterData.SELECTION;
471 }
472
473 pagesList = new int[0];
474
475 selectionListener = new SelectionListener() {
476
477 @Override
478 public void widgetSelected(SelectionEvent e) {
479 if (useCurrentZoom.getSelection()) {
480 hPagesNum.setEnabled(false);
481 vPagesNum.setEnabled(false);
482 }
483 if (setHPagesNumber.getSelection()) {
484 hPagesNum.setEnabled(true);
485 vPagesNum.setEnabled(false);
486 if (currentPage.getSelection()) {
487 currentPage.setSelection(false);
488 allPages.setSelection(true);
489 }
490 if (hPagesNum.getText() == "") //$NON-NLS-1$
491 hPagesNum.setText("1"); //$NON-NLS-1$
492 }
493 if (setVPagesNumber.getSelection()) {
494 hPagesNum.setEnabled(false);
495 vPagesNum.setEnabled(true);
496 if (currentPage.getSelection()) {
497 currentPage.setSelection(false);
498 allPages.setSelection(true);
499 }
500 if (vPagesNum.getText() == "") //$NON-NLS-1$
501 vPagesNum.setText("1"); //$NON-NLS-1$
502 }
503 if (currentPage.getSelection() || allPages.getSelection() || pageList.getSelection()) {
504 fromPage.setEnabled(false);
505 toPage.setEnabled(false);
506 } else {
507 fromPage.setEnabled(true);
508 toPage.setEnabled(true);
509 }
510
511 currentPage.setEnabled(useCurrentZoom.getSelection());
512 overviewCanvas.setEnabled(pageList.getSelection());
513 if (overviewCanvas.isEnabled() && (e.widget == useCurrentZoom || e.widget == setHPagesNumber || e.widget == setVPagesNumber)) {
514 pagesList = new int[1];
515 pagesList[0] = 1;
516 pageNum = 1;
517 firstPage = 1;
518 } else if (overviewCanvas.isEnabled() && (e.widget == pageList)) {
519 if (pagesList == null || pagesList.length <= 0) {
520 pagesList = new int[1];
521 pagesList[0] = 1;
522 pageNum = 1;
523 firstPage = 1;
524 }
525 }
526 computeStepXY();
527 totalPages.setText(Integer.valueOf(maxNumOfPages()).toString());
528 overviewCanvas.redraw();
529 overviewCanvas.update();
530 }
531
532 @Override
533 public void widgetDefaultSelected(SelectionEvent e) {
534 pagesList = new int[0];
535 computeStepXY();
536 overviewCanvas.redraw();
537 }
538
539 };
540
541 modifyListener = new ModifyListener() {
542
543 @Override
544 public void modifyText(ModifyEvent e) {
545 pagesList = new int[0];
546 computeStepXY();
547 totalPages.setText(Integer.valueOf(maxNumOfPages()).toString());
548 overviewCanvas.redraw();
549 }
550
551 };
552 }
553
554 protected GridData newGridData(int span) {
555 GridData data = new GridData(GridData.GRAB_VERTICAL | GridData.VERTICAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL);
556 data.horizontalSpan = span;
557 return data;
558 }
559
560 public Control createDialogArea(Composite parent) {
561
562 GridLayout parentLayout = new GridLayout();
563 parentLayout.numColumns = 6;
564 parent.setLayout(parentLayout);
565
566 Group g1 = new Group(parent, SWT.SHADOW_NONE);
567 g1.setText(SDMessages._113);
568 g1.setLayoutData(newGridData(3));
569 GridLayout g1layout = new GridLayout();
570 g1layout.numColumns = 2;
571 g1.setLayout(g1layout);
572
573 useCurrentZoom = new Button(g1, SWT.RADIO);
574 useCurrentZoom.setText(SDMessages._112);
575 useCurrentZoom.setLayoutData(newGridData(2));
576 useCurrentZoom.addSelectionListener(selectionListener);
577
578 setHPagesNumber = new Button(g1, SWT.RADIO);
579 setHPagesNumber.setText(SDMessages._110);
580 setHPagesNumber.setLayoutData(newGridData(1));
581 setHPagesNumber.addSelectionListener(selectionListener);
582
583 hPagesNum = new Text(g1, SWT.SINGLE | SWT.BORDER);
584 hPagesNum.addModifyListener(modifyListener);
585
586 setVPagesNumber = new Button(g1, SWT.RADIO);
587 setVPagesNumber.setText(SDMessages._111);
588 setVPagesNumber.setLayoutData(newGridData(1));
589 setVPagesNumber.addSelectionListener(selectionListener);
590
591 vPagesNum = new Text(g1, SWT.SINGLE | SWT.BORDER);
592 vPagesNum.addModifyListener(modifyListener);
593
594 Label nbTotal = new Label(g1, SWT.SHADOW_NONE | SWT.RIGHT);
595 nbTotal.setText(SDMessages._109);
596 // nbTotal.setLayoutData(newGridData(1));
597
598 totalPages = new Text(g1, SWT.SINGLE | SWT.BORDER | SWT.READ_ONLY);
599 // nbHV.addModifyListener(modifListener);
600
601 Group g2 = new Group(parent, SWT.SHADOW_NONE);
602 g2.setText(SDMessages._119);
603 GridData data = new GridData(GridData.GRAB_VERTICAL | GridData.VERTICAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL);
604 data.horizontalSpan = 3;
605 data.verticalSpan = 2;
606 g2.setLayoutData(data);
607 GridLayout g2layout = new GridLayout();
608 // g2layout.
609 g2layout.numColumns = 1;
610 // SVLayout g2layout = new SVLayout();
611 g2.setLayout(g2layout);
612
613 GridData data2 = new GridData(GridData.GRAB_VERTICAL | GridData.VERTICAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL);
614 data2.horizontalSpan = 1;
615 data2.verticalSpan = 1;
616
617 overviewCanvas = new LocalSD(g2, SWT.NO_BACKGROUND);
618 GridData seqDiagLayoutData = new GridData(GridData.HORIZONTAL_ALIGN_FILL// |GridData.GRAB_HORIZONTAL|
619 /* GridData.GRAB_VERTICAL| */| GridData.VERTICAL_ALIGN_FILL);
620 // seqDiagLayoutData.widthHint=400;
621 // seqDiagLayoutData.horizontalAlignment=GridData.HORIZONTAL_ALIGN_FILL;
622 overviewCanvas.setLayoutData(seqDiagLayoutData);
623 // overviewCanvas.resizeContents(100,100);
624 if (view.getContentsWidth() < view.getVisibleWidth() && view.getContentsHeight() < view.getVisibleHeight())
625 test = 3;
626 else
627 test = 10;
628 overviewCanvas.setFrame(view.getFrame(), true);
629 overviewCanvas.zoomValue = (float) 1 / test;
630 overviewCanvas.setCornerControl(null);
631 seqDiagLayoutData.widthHint = overviewCanvas.getContentsWidth() / test;
632 seqDiagLayoutData.widthHint = overviewCanvas.getFrame().getWidth() / test + 15;
633
634 if (view.getVisibleWidth() < view.getContentsWidth()) {
635 seqDiagLayoutData.widthHint = overviewCanvas.getContentsWidth() / test;
636 if (seqDiagLayoutData.widthHint > Display.getDefault().getClientArea().width / 4)
637 seqDiagLayoutData.widthHint = Display.getDefault().getClientArea().width / 4;
638 } else
639 seqDiagLayoutData.widthHint = overviewCanvas.getFrame().getWidth() / test + 15;
640
641 if (view.getVisibleHeight() < view.getContentsHeight()) {
642 seqDiagLayoutData.heightHint = overviewCanvas.getContentsHeight() / test;
643 if (seqDiagLayoutData.heightHint > Display.getDefault().getClientArea().width / 4)
644 seqDiagLayoutData.heightHint = Display.getDefault().getClientArea().width / 4;
645 } else
646 seqDiagLayoutData.heightHint = overviewCanvas.getFrame().getHeight() / test;
647
648 overviewCanvas.setEnabled(false);
649
650 currentSelection = new Label(g2, SWT.SHADOW_NONE | SWT.LEFT);
651 currentSelection.setLayoutData(newGridData(1));
652
653 Group g3 = new Group(parent, SWT.SHADOW_NONE);
654 g3.setText(SDMessages._118);
655 g3.setLayoutData(newGridData(3));
656 GridLayout g3layout = new GridLayout();
657 g3layout.numColumns = 4;
658 g3.setLayout(g3layout);
659
660 allPages = new Button(g3, SWT.RADIO);
661 allPages.setText(SDMessages._108);
662 allPages.setLayoutData(newGridData(4));
663 allPages.addSelectionListener(selectionListener);
664
665 currentPage = new Button(g3, SWT.RADIO);
666 currentPage.setText(SDMessages._107);
667 currentPage.setLayoutData(newGridData(4));
668 currentPage.setEnabled(true);
669 currentPage.setSelection(true);
670 currentPage.addSelectionListener(selectionListener);
671
672 pageList = new Button(g3, SWT.RADIO);
673 pageList.setText(SDMessages._106);
674 pageList.setLayoutData(newGridData(4));
675 pageList.addSelectionListener(selectionListener);
676
677 pageRange = new Button(g3, SWT.RADIO);
678 pageRange.setText(SDMessages._103);
679 pageRange.setLayoutData(newGridData(1));
680 pageRange.addSelectionListener(selectionListener);
681
682 fromPage = new Text(g3, SWT.SINGLE | SWT.BORDER);
683
684 Label labelTo = new Label(g3, SWT.CENTER);
685 labelTo.setText(SDMessages._105);
686
687 toPage = new Text(g3, SWT.SINGLE | SWT.BORDER);
688
689 toolTip = new DiagramToolTip(overviewCanvas);
690
691 overviewCanvas.getViewControl().addMouseTrackListener(new MouseTrackListener() {
692
693 @Override
694 public void mouseEnter(MouseEvent e) {
695 toolTip.hideToolTip();
696 }
697
698 @Override
699 public void mouseExit(MouseEvent e) {
700 toolTip.hideToolTip();
701 }
702
703 @Override
704 public void mouseHover(MouseEvent e) {
705 int x1 = (int) (overviewCanvas.viewToContentsX(e.x) / overviewCanvas.zoomValue / stepX);
706 int x2 = (int) (overviewCanvas.viewToContentsY(e.y) / overviewCanvas.zoomValue / stepY);
707 int num = x1 + x2 * getNbRow() + 1;
708 if (num > maxNumOfPages())
709 return;
710 if (num > 0) {
711 toolTip.showToolTip(String.valueOf(num));
712 displayPageNum();
713 } else {
714 currentSelection.setText("");//$NON-NLS-1$
715 toolTip.hideToolTip();
716 }
717 }
718
719 });
720
721 overviewCanvas.addTraverseListener(new TraverseListener() {
722
723 @Override
724 public void keyTraversed(TraverseEvent e) {
725 if ((e.detail == SWT.TRAVERSE_TAB_NEXT) || (e.detail == SWT.TRAVERSE_TAB_PREVIOUS))
726 e.doit = true;
727 }
728
729 });
730
731 overviewCanvas.addFocusListener(new FocusListener() {
732
733 @Override
734 public void focusGained(FocusEvent e) {
735 overviewCanvas.redraw();
736 }
737
738 @Override
739 public void focusLost(FocusEvent e) {
740 overviewCanvas.redraw();
741 }
742 });
743
744 if (showPrintButton) {
745 Composite printerDlg = new Composite(parent, SWT.NONE);
746 data = GridUtil.createHorizontalFill();
747 data.horizontalSpan = 6;
748 parentLayout = new GridLayout();
749 parentLayout.numColumns = 2;
750 printerDlg.setLayout(parentLayout);
751 printerDlg.setLayoutData(data);
752
753 Label label = new Label(printerDlg, SWT.NONE);
754 label.setLayoutData(GridUtil.createHorizontalFill());
755 printerDialog = new Button(printerDlg, SWT.PUSH);
756 printerDialog.setText(SDMessages._115);
757
758 printerDialog.addSelectionListener(new SelectionListener() {
759
760 @Override
761 public void widgetSelected(SelectionEvent e) {
762
763 printButtonSelected();
764 }
765
766 @Override
767 public void widgetDefaultSelected(SelectionEvent e) {
768 }
769
770 });
771 }
772
773 updatePrinterStatus();
774
775 return parent;
776 }
777
778 public int getPagesForSelection() {
779 return nbPages;
780 }
781
782 public boolean okPressed() {
783 printAll = allPages.getSelection();
784 printCurrent = currentPage.getSelection();
785 printSelection = pageList.getSelection();
786 printRange = pageRange.getSelection();
787 try {
788 if (printRange) {
789 from = Integer.valueOf(fromPage.getText()).intValue();
790 to = Integer.valueOf(toPage.getText()).intValue();
791 if (from > maxNumOfPages() || to > maxNumOfPages() || from <= 0 || to <= 0) {
792 MessageDialog.openError(getShell(), SDMessages._98, SDMessages._99);
793 return false;
794 }
795 } else if (setHPagesNumber.getSelection() && nbPages <= 0) {
796 MessageDialog.openError(getShell(), SDMessages._98, SDMessages._101);
797 return false;
798 } else if (setVPagesNumber.getSelection() && nbPages <= 0) {
799 MessageDialog.openError(getShell(), SDMessages._98, SDMessages._100);
800 return false;
801 } else if (printSelection && getPageList().length <= 0) {
802 MessageDialog.openError(getShell(), SDMessages._98, SDMessages._102);
803 return false;
804 }
805
806 } catch (Exception e) {
807 MessageDialog.openError(getShell(), SDMessages._98, SDMessages._99);
808 from = 0;
809 to = 0;
810 return false;
811 }
812
813 return true;
814 }
815
816 public ImageData drawRegionSelected(Image img, Rectangle r, RGB color) {
817 ImageData id = img.getImageData();
818 for (int a = 0; a < r.width && r.x + a < id.width; a++) {
819 for (int b = 0; b < r.height && r.y + b < id.height; b++) {
820 int index = id.getPixel(r.x + a, r.y + b);
821 RGB rgb = id.palette.getRGB(index);
822 rgb = combine(color, rgb);
823 id.setPixel(r.x + a, r.y + b, id.palette.getPixel(rgb));
824 }
825 }
826 return id;
827 }
828
829 public static RGB combine(RGB front, RGB back) {
830 int _af = 128;
831 if (_af == 1)
832 return front;
833 if (_af == 0)
834 return back;
835 int _ab = 200;
836 if (_ab == 0)
837 return front;
838
839 double af = (_af) / 255.0;
840 double rf = front.red;
841 double gf = front.green;
842 double bf = front.blue;
843
844 double ab = (_ab) / 255.0;
845 double rb = back.red;
846 double gb = back.green;
847 double bb = back.blue;
848
849 double k = (1.0 - af) * ab;
850 int r = (int) ((af * rf + k * rb));
851 int g = (int) ((af * gf + k * gb));
852 int b = (int) ((af * bf + k * bb));
853
854 return new RGB(r, g, b);
855 }
856
857 protected void computeStepXY() {
858 float cw = overviewCanvas.getContentsWidth() / overviewCanvas.zoomValue;
859 float ch = overviewCanvas.getContentsHeight() / overviewCanvas.zoomValue;
860 try {
861 if (printerData == null) {
862 stepX = 0;
863 stepY = 0;
864 nbPages = 0;
865 zoomFactor = 0;
866 } else {
867 Printer printer = new Printer(printerData);
868 if (setHPagesNumber.getSelection()) {
869 nbPages = Integer.valueOf(hPagesNum.getText()).intValue();
870 float z1 = (float) view.getContentsWidth() / (cw);
871 float z2 = printer.getClientArea().width / ((float) view.getContentsWidth() / nbPages);
872
873 stepY = printer.getClientArea().height / z1 / z2;
874 stepX = cw / nbPages;
875 } else if (setVPagesNumber.getSelection()) {
876 nbPages = Integer.valueOf(vPagesNum.getText()).intValue();
877 float z1 = (float) view.getContentsHeight() / (ch);
878 float z2 = printer.getClientArea().height / ((float) view.getContentsHeight() / nbPages);
879 stepX = printer.getClientArea().width / z1 / z2;
880 stepY = ch / nbPages;
881 } else {
882 float z1 = view.getContentsWidth() / (cw);
883 stepX = ((float) view.getVisibleWidth() / z1);
884 nbPages = Math.round(cw / stepX);
885 if (nbPages == 0)
886 nbPages = 1;
887 int pw = printer.getClientArea().width;
888 int ph = printer.getClientArea().height;
889 float z2 = pw / ((float) view.getContentsWidth() / nbPages);
890 stepY = ((float) ph / z1 / z2);
891 }
892 }
e6ace8bb 893 } catch (NumberFormatException e) {
73005152
BH
894 stepX = stepY = nbPages = 0;
895 zoomFactor = 0;
896 }
897 sTX = stepX * (view.getContentsWidth() / cw);
898 sTY = stepY * (view.getContentsHeight() / ch);
899 float rat = 1;
900 if ((view.getVisibleWidth() > view.getContentsWidth()) && (setVPagesNumber.getSelection() || setHPagesNumber.getSelection()))
901 rat = (float) view.getVisibleWidth() / (float) view.getContentsWidth();
902 zoomFactor = (overviewCanvas.getContentsWidth() / cw) / overviewCanvas.getZoomFactor() * rat;// /view.getZoomFactor();
903 }
904
905 public int[] getPageList() {
e6ace8bb 906 return Arrays.copyOf(pagesList, pagesList.length);
73005152
BH
907 }
908
909 public void addToPagesList(int num) {
910 int temp[] = new int[pagesList.length + 1];
911 System.arraycopy(pagesList, 0, temp, 0, pagesList.length);
912 temp[temp.length - 1] = num;
913 pagesList = new int[temp.length];
914 System.arraycopy(temp, 0, pagesList, 0, temp.length);
915 }
916
917 public void removeFromPagesList(int num) {
918 int pos = Arrays.binarySearch(pagesList, num);
919 int temp[] = new int[pagesList.length - 1];
920 System.arraycopy(pagesList, 0, temp, 0, pos);
921 System.arraycopy(pagesList, pos + 1, temp, pos, pagesList.length - pos - 1);
922 pagesList = new int[temp.length];
923 System.arraycopy(temp, 0, pagesList, 0, temp.length);
924 }
925
926 public int maxNumOfPages() {
927 int max = getNbRow() * getNbLines();
928 return max;
929 }
930
931 public int getNbRow() {
932 if (!setHPagesNumber.isDisposed()) {
933 int cw = (int) (overviewCanvas.getContentsWidth() / overviewCanvas.zoomValue);
e6ace8bb
BH
934 int row = 1;
935 if (stepX != 0) {
936 row = (int) (cw / stepX);
937 if (setHPagesNumber.getSelection())
938 row = Math.round((float) cw / stepX);
939 else if ((cw % stepX != 0))
940 row++;
941 }
73005152
BH
942 nbRows = row;
943 }
944 return nbRows;
945 }
946
947 public int getNbLines() {
948 if (!setVPagesNumber.isDisposed()) {
949 int ch = (int) (overviewCanvas.getContentsHeight() / overviewCanvas.zoomValue);
e6ace8bb
BH
950 int line = 1;
951 if (stepY != 0) {
952 line = (int) (ch / stepY);
953 if (setVPagesNumber.getSelection())
954 line = Math.round((float) ch / stepY);
955 else if (ch % stepY != 0)
956 line++;
957 }
73005152
BH
958 nbLines = line;
959 }
960 return nbLines;
961 }
962
963 public boolean printAll() {
964 return printAll;
965 }
966
967 public boolean printCurrent() {
968 return printCurrent;
969 }
970
971 public boolean printSelection() {
972 return printSelection;
973 }
974
975 public boolean printRange() {
976 return printRange;
977 }
978
979 public float getStepX() {
980 return sTX;
981 }
982
983 public float getStepY() {
984 return sTY;
985 }
986
987 public float getZoomFactor() {
988 return zoomFactor;
989 }
990
991 // public abstract void createButtonsForButtonBar(Composite parent);
992
993 public PrinterData getPrinterData() {
994 return printerData;
995 }
996
997 public int getFrom() {
998 return from;
999 }
1000
1001 public int getTo() {
1002 return to;
1003 }
1004
1005 protected void displayPageNum() {
1006 if (pageNum > 0) {
1007 String message = MessageFormat.format(SDMessages._117, new Object[] { Integer.valueOf(pageNum) });
1008 currentSelection.setText(message);
1009 currentSelection.getParent().layout();
1010 }
1011 }
1012
1013 public Shell getShell() {
1014 return shell;
1015 }
1016
1017 public void setShell(Shell shell) {
1018 this.shell = shell;
1019 }
1020
1021 public void printButtonSelected() {
1022 PrintDialog printer = new PrintDialog(getShell());
1023 if (allPages.getSelection())
1024 printer.setScope(PrinterData.ALL_PAGES);
1025 if (currentPage.getSelection())
1026 printer.setScope(PrinterData.SELECTION);
1027 if (pageList.getSelection())
1028 printer.setScope(PrinterData.SELECTION);
1029 if (pageRange.getSelection()) {
1030 printer.setScope(PrinterData.PAGE_RANGE);
1031 from = Integer.valueOf(fromPage.getText()).intValue();
1032 to = Integer.valueOf(toPage.getText()).intValue();
1033 printer.setStartPage(from);
1034 printer.setEndPage(to);
1035 }
1036
1037 PrinterData newPrinterData = printer.open();
1038 if (newPrinterData != null) {
1039 printerData = newPrinterData;
1040 }
1041 updatePrinterStatus();
1042
1043 if (printer.getScope() == PrinterData.ALL_PAGES) {
1044 allPages.setSelection(true);
1045 currentPage.setSelection(false);
1046 pageList.setSelection(false);
1047 pageRange.setSelection(false);
1048 hPagesNum.setEnabled(false);
1049 vPagesNum.setEnabled(false);
1050 }
1051 if (printer.getScope() == PrinterData.PAGE_RANGE) {
1052 allPages.setSelection(false);
1053 currentPage.setSelection(false);
1054 pageList.setSelection(false);
1055 pageRange.setSelection(true);
1056 fromPage.setEnabled(true);
1057 toPage.setEnabled(true);
1058 fromPage.setText((Integer.valueOf(printer.getStartPage())).toString());
1059 toPage.setText((Integer.valueOf(printer.getEndPage())).toString());
1060 }
1061 computeStepXY();
1062 overviewCanvas.redraw();
1063 }
1064
1065 public void setParentWizardPage(WizardPage parent) {
1066 parentWizardPage = parent;
1067 }
1068
1069 public void setParentDialog(SDPrintDialog parent) {
1070 parentDialog = parent;
1071 }
1072
1073 protected void updatePrinterStatus() {
1074 if (parentWizardPage != null) {
1075 // used in the wizard dialog
1076 if (printerData == null) {
1077 // show error message and disable Finish button
1078 parentWizardPage.setErrorMessage(SDMessages._135);
1079 parentWizardPage.setPageComplete(false);
1080 } else {
1081 // clear error message and enable Finish button
1082 parentWizardPage.setErrorMessage(null);
1083 parentWizardPage.setPageComplete(true);
1084 }
1085 } else if (parentDialog != null) {
1086 // used in the print dialog
1087 if (printerData == null) {
1088 // show error message and disable OK button
1089 parentDialog.setErrorMessage(SDMessages._135);
1090 parentDialog.setPageComplete(false);
1091 } else {
1092 // clear error message and enable OK button
1093 parentDialog.setErrorMessage(null);
1094 parentDialog.setPageComplete(true);
1095 }
1096 }
1097 }
1098
1099}
This page took 0.067079 seconds and 5 git commands to generate.