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