Mercurial > projects > dwt-addons
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 |