Commit | Line | Data |
---|---|---|
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 | 13 | package org.eclipse.linuxtools.tmf.ui.views.uml2sd.dialogs; |
73005152 BH |
14 | |
15 | import java.text.MessageFormat; | |
16 | import java.util.Arrays; | |
17 | ||
18 | import org.eclipse.jface.dialogs.MessageDialog; | |
19 | import org.eclipse.jface.wizard.WizardPage; | |
73005152 BH |
20 | import org.eclipse.linuxtools.tmf.ui.views.uml2sd.DiagramToolTip; |
21 | import org.eclipse.linuxtools.tmf.ui.views.uml2sd.NGC; | |
22 | import org.eclipse.linuxtools.tmf.ui.views.uml2sd.SDWidget; | |
92330441 | 23 | import org.eclipse.linuxtools.tmf.ui.views.uml2sd.util.Messages; |
73005152 BH |
24 | import org.eclipse.swt.SWT; |
25 | import org.eclipse.swt.events.FocusEvent; | |
26 | import org.eclipse.swt.events.FocusListener; | |
27 | import org.eclipse.swt.events.KeyEvent; | |
28 | import org.eclipse.swt.events.ModifyEvent; | |
29 | import org.eclipse.swt.events.ModifyListener; | |
30 | import org.eclipse.swt.events.MouseEvent; | |
31 | import org.eclipse.swt.events.MouseTrackListener; | |
32 | import org.eclipse.swt.events.SelectionEvent; | |
33 | import org.eclipse.swt.events.SelectionListener; | |
34 | import org.eclipse.swt.events.TraverseEvent; | |
35 | import org.eclipse.swt.events.TraverseListener; | |
36 | import org.eclipse.swt.graphics.GC; | |
37 | import org.eclipse.swt.graphics.Image; | |
38 | import org.eclipse.swt.graphics.ImageData; | |
39 | import org.eclipse.swt.graphics.RGB; | |
40 | import org.eclipse.swt.graphics.Rectangle; | |
41 | import org.eclipse.swt.layout.GridData; | |
42 | import org.eclipse.swt.layout.GridLayout; | |
43 | import org.eclipse.swt.printing.PrintDialog; | |
44 | import org.eclipse.swt.printing.Printer; | |
45 | import org.eclipse.swt.printing.PrinterData; | |
46 | import org.eclipse.swt.widgets.Button; | |
47 | import org.eclipse.swt.widgets.Composite; | |
48 | import org.eclipse.swt.widgets.Control; | |
49 | import org.eclipse.swt.widgets.Display; | |
50 | import org.eclipse.swt.widgets.Group; | |
51 | import org.eclipse.swt.widgets.Label; | |
52 | import org.eclipse.swt.widgets.Shell; | |
53 | import org.eclipse.swt.widgets.Text; | |
54 | ||
55 | /** | |
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 | */ | |
61 | public 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 | } |