comparison dwtx/jface/text/hyperlink/HyperlinkManager.d @ 140:26688fec6d23

Following dsss compile errors
author Frank Benoit <benoit@tionex.de>
date Sun, 24 Aug 2008 03:23:46 +0200
parents b6bad70d540a
children 75302ef3f92f
comparison
equal deleted inserted replaced
139:93a6ec48fd28 140:26688fec6d23
178 text.addMouseMoveListener(this); 178 text.addMouseMoveListener(this);
179 text.addFocusListener(this); 179 text.addFocusListener(this);
180 text.addMouseTrackListener(this); 180 text.addMouseTrackListener(this);
181 181
182 fTextViewer.addTextListener(this); 182 fTextViewer.addTextListener(this);
183 183
184 fHyperlinkPresenter.install(fTextViewer); 184 fHyperlinkPresenter.install(fTextViewer);
185 } 185 }
186 186
187 /** 187 /**
188 * Sets the hyperlink detectors for this hyperlink manager. 188 * Sets the hyperlink detectors for this hyperlink manager.
232 text.removeMouseMoveListener(this); 232 text.removeMouseMoveListener(this);
233 text.removeFocusListener(this); 233 text.removeFocusListener(this);
234 text.removeMouseTrackListener(this); 234 text.removeMouseTrackListener(this);
235 } 235 }
236 fTextViewer.removeTextListener(this); 236 fTextViewer.removeTextListener(this);
237 237
238 fHyperlinkPresenter.uninstall(); 238 fHyperlinkPresenter.uninstall();
239 239
240 fHyperlinkPresenter= null; 240 fHyperlinkPresenter= null;
241 fTextViewer= null; 241 fTextViewer= null;
242 fHyperlinkDetectors= null; 242 fHyperlinkDetectors= null;
250 fActive= false; 250 fActive= false;
251 } 251 }
252 252
253 /** 253 /**
254 * Finds hyperlinks at the current offset. 254 * Finds hyperlinks at the current offset.
255 * 255 *
256 * @return the hyperlinks or <code>null</code> if none. 256 * @return the hyperlinks or <code>null</code> if none.
257 */ 257 */
258 protected IHyperlink[] findHyperlinks() { 258 protected IHyperlink[] findHyperlinks() {
259 int offset= getCurrentTextOffset(); 259 int offset= getCurrentTextOffset();
260 if (offset is -1) 260 if (offset is -1)
266 synchronized (fHyperlinkDetectors) { 266 synchronized (fHyperlinkDetectors) {
267 for (int i= 0, length= fHyperlinkDetectors.length; i < length; i++) { 267 for (int i= 0, length= fHyperlinkDetectors.length; i < length; i++) {
268 IHyperlinkDetector detector= fHyperlinkDetectors[i]; 268 IHyperlinkDetector detector= fHyperlinkDetectors[i];
269 if (detector is null) 269 if (detector is null)
270 continue; 270 continue;
271 271
272 if ( cast(IHyperlinkDetectorExtension2)detector ) { 272 if ( cast(IHyperlinkDetectorExtension2)detector ) {
273 int stateMask= (cast(IHyperlinkDetectorExtension2)detector).getStateMask(); 273 int stateMask= (cast(IHyperlinkDetectorExtension2)detector).getStateMask();
274 if (stateMask !is -1 && stateMask !is fActiveHyperlinkStateMask) 274 if (stateMask !is -1 && stateMask !is fActiveHyperlinkStateMask)
275 continue; 275 continue;
276 else if (stateMask is -1 && fActiveHyperlinkStateMask !is fHyperlinkStateMask) 276 else if (stateMask is -1 && fActiveHyperlinkStateMask !is fHyperlinkStateMask)
285 Assert.isLegal(hyperlinks.length > 0); 285 Assert.isLegal(hyperlinks.length > 0);
286 286
287 if (fDetectionStrategy is FIRST) { 287 if (fDetectionStrategy is FIRST) {
288 if (hyperlinks.length is 1) 288 if (hyperlinks.length is 1)
289 return hyperlinks; 289 return hyperlinks;
290 return new IHyperlink[] {hyperlinks[0]}; 290 return [hyperlinks[0]];
291 } 291 }
292 allHyperlinks.addAll(Arrays.asList(hyperlinks)); 292 allHyperlinks.addAll(Arrays.asList(hyperlinks));
293 } 293 }
294 } 294 }
295 295
296 if (allHyperlinks.isEmpty()) 296 if (allHyperlinks.isEmpty())
297 return null; 297 return null;
298 298
299 if (fDetectionStrategy !is ALL) { 299 if (fDetectionStrategy !is ALL) {
300 int maxLength= computeLongestHyperlinkLength(allHyperlinks); 300 int maxLength= computeLongestHyperlinkLength(allHyperlinks);
301 Iterator iter= new ArrayList(allHyperlinks).iterator(); 301 Iterator iter= (new ArrayList(allHyperlinks)).iterator();
302 while (iter.hasNext()) { 302 while (iter.hasNext()) {
303 IHyperlink hyperlink= cast(IHyperlink)iter.next(); 303 IHyperlink hyperlink= cast(IHyperlink)iter.next();
304 if (hyperlink.getHyperlinkRegion().getLength() < maxLength) 304 if (hyperlink.getHyperlinkRegion().getLength() < maxLength)
305 allHyperlinks.remove(hyperlink); 305 allHyperlinks.remove(hyperlink);
306 } 306 }
307 } 307 }
308 308
309 if (fDetectionStrategy is LONGEST_REGION_FIRST) 309 if (fDetectionStrategy is LONGEST_REGION_FIRST)
310 return new IHyperlink[] {cast(IHyperlink)allHyperlinks.get(0)}; 310 return [cast(IHyperlink)allHyperlinks.get(0)];
311 311
312 return (IHyperlink[])allHyperlinks.toArray(new IHyperlink[allHyperlinks.size()]); 312 return arraycast!(IHyperlink)(allHyperlinks.toArray());
313 313
314 } 314 }
315 315
316 /** 316 /**
317 * Computes the length of the longest detected 317 * Computes the length of the longest detected
318 * hyperlink. 318 * hyperlink.
319 * 319 *
320 * @param hyperlinks 320 * @param hyperlinks
321 * @return the length of the longest detected 321 * @return the length of the longest detected
322 */ 322 */
323 protected int computeLongestHyperlinkLength(List hyperlinks) { 323 protected int computeLongestHyperlinkLength(List hyperlinks) {
324 Assert.isLegal(hyperlinks !is null && !hyperlinks.isEmpty()); 324 Assert.isLegal(hyperlinks !is null && !hyperlinks.isEmpty());
333 return length; 333 return length;
334 } 334 }
335 335
336 /** 336 /**
337 * Returns the current text offset. 337 * Returns the current text offset.
338 * 338 *
339 * @return the current text offset 339 * @return the current text offset
340 */ 340 */
341 protected int getCurrentTextOffset() { 341 protected int getCurrentTextOffset() {
342 342
343 try { 343 try {
351 351
352 int widgetOffset= text.getOffsetAtLocation(relativePosition); 352 int widgetOffset= text.getOffsetAtLocation(relativePosition);
353 Point p= text.getLocationAtOffset(widgetOffset); 353 Point p= text.getLocationAtOffset(widgetOffset);
354 if (p.x > relativePosition.x) 354 if (p.x > relativePosition.x)
355 widgetOffset--; 355 widgetOffset--;
356 356
357 if ( cast(ITextViewerExtension5)fTextViewer ) { 357 if ( cast(ITextViewerExtension5)fTextViewer ) {
358 ITextViewerExtension5 extension= cast(ITextViewerExtension5)fTextViewer; 358 ITextViewerExtension5 extension= cast(ITextViewerExtension5)fTextViewer;
359 return extension.widgetOffset2ModelOffset(widgetOffset); 359 return extension.widgetOffset2ModelOffset(widgetOffset);
360 } 360 }
361 361
455 public void mouseMove(MouseEvent event) { 455 public void mouseMove(MouseEvent event) {
456 if ( cast(IHyperlinkPresenterExtension)fHyperlinkPresenter ) { 456 if ( cast(IHyperlinkPresenterExtension)fHyperlinkPresenter ) {
457 if (!(cast(IHyperlinkPresenterExtension)fHyperlinkPresenter).canHideHyperlinks()) 457 if (!(cast(IHyperlinkPresenterExtension)fHyperlinkPresenter).canHideHyperlinks())
458 return; 458 return;
459 } 459 }
460 460
461 if (!isRegisteredStateMask(event.stateMask)) { 461 if (!isRegisteredStateMask(event.stateMask)) {
462 if (fActive) 462 if (fActive)
463 deactivate(); 463 deactivate();
464 464
465 return; 465 return;
466 } 466 }
467 467
468 fActive= true; 468 fActive= true;
469 fActiveHyperlinkStateMask= event.stateMask; 469 fActiveHyperlinkStateMask= event.stateMask;
470 470
471 StyledText text= fTextViewer.getTextWidget(); 471 StyledText text= fTextViewer.getTextWidget();
472 if (text is null || text.isDisposed()) { 472 if (text is null || text.isDisposed()) {
486 } 486 }
487 487
488 fHyperlinkPresenter.showHyperlinks(fActiveHyperlinks); 488 fHyperlinkPresenter.showHyperlinks(fActiveHyperlinks);
489 489
490 } 490 }
491 491
492 /** 492 /**
493 * Checks whether the given state mask is registered. 493 * Checks whether the given state mask is registered.
494 * 494 *
495 * @param stateMask 495 * @param stateMask
496 * @return <code>true</code> if a detector is registered for the given state mask 496 * @return <code>true</code> if a detector is registered for the given state mask
497 * @since 3.3 497 * @since 3.3
498 */ 498 */
499 private bool isRegisteredStateMask(int stateMask) { 499 private bool isRegisteredStateMask(int stateMask) {
500 if (stateMask is fHyperlinkStateMask) 500 if (stateMask is fHyperlinkStateMask)
501 return true; 501 return true;
502 502
503 synchronized (fHyperlinkDetectors) { 503 synchronized (fHyperlinkDetectors) {
504 for (int i= 0; i < fHyperlinkDetectors.length; i++) { 504 for (int i= 0; i < fHyperlinkDetectors.length; i++) {
505 if (fHyperlinkDetectors[i] instanceof IHyperlinkDetectorExtension2) { 505 if (cast(IHyperlinkDetectorExtension2)fHyperlinkDetectors[i] ) {
506 if (stateMask is (cast(IHyperlinkDetectorExtension2)fHyperlinkDetectors[i]).getStateMask()) 506 if (stateMask is (cast(IHyperlinkDetectorExtension2)fHyperlinkDetectors[i]).getStateMask())
507 return true; 507 return true;
508 } 508 }
509 } 509 }
510 } 510 }
511 return false; 511 return false;
512 } 512 }
513 513
514 /* 514 /*
515 * @see dwt.events.FocusListener#focusGained(dwt.events.FocusEvent) 515 * @see dwt.events.FocusListener#focusGained(dwt.events.FocusEvent)
516 */ 516 */
517 public void focusGained(FocusEvent e) {} 517 public void focusGained(FocusEvent e) {}
518 518
529 */ 529 */
530 public void handleEvent(Event event) { 530 public void handleEvent(Event event) {
531 //key up 531 //key up
532 deactivate(); 532 deactivate();
533 } 533 }
534 534
535 /* 535 /*
536 * @see dwtx.jface.text.ITextListener#textChanged(TextEvent) 536 * @see dwtx.jface.text.ITextListener#textChanged(TextEvent)
537 * @since 3.2 537 * @since 3.2
538 */ 538 */
539 public void textChanged(TextEvent event) { 539 public void textChanged(TextEvent event) {
541 deactivate(); 541 deactivate();
542 } 542 }
543 543
544 /** 544 /**
545 * {@inheritDoc} 545 * {@inheritDoc}
546 * 546 *
547 * @since 3.4 547 * @since 3.4
548 */ 548 */
549 public void mouseExit(MouseEvent e) { 549 public void mouseExit(MouseEvent e) {
550 if ( cast(IHyperlinkPresenterExtension)fHyperlinkPresenter ) { 550 if ( cast(IHyperlinkPresenterExtension)fHyperlinkPresenter ) {
551 if (!(cast(IHyperlinkPresenterExtension)fHyperlinkPresenter).canHideHyperlinks()) 551 if (!(cast(IHyperlinkPresenterExtension)fHyperlinkPresenter).canHideHyperlinks())
554 deactivate(); 554 deactivate();
555 } 555 }
556 556
557 /** 557 /**
558 * {@inheritDoc} 558 * {@inheritDoc}
559 * 559 *
560 * @since 3.4 560 * @since 3.4
561 */ 561 */
562 public void mouseEnter(MouseEvent e) { 562 public void mouseEnter(MouseEvent e) {
563 } 563 }
564 564
565 /** 565 /**
566 * {@inheritDoc} 566 * {@inheritDoc}
567 * 567 *
568 * @since 3.4 568 * @since 3.4
569 */ 569 */
570 public void mouseHover(MouseEvent e) { 570 public void mouseHover(MouseEvent e) {
571 } 571 }
572 572