Mercurial > projects > dwt-addons
diff dwtx/jface/text/hyperlink/MultipleHyperlinkPresenter.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 |
line wrap: on
line diff
--- a/dwtx/jface/text/hyperlink/MultipleHyperlinkPresenter.d Sun Aug 24 02:31:41 2008 +0200 +++ b/dwtx/jface/text/hyperlink/MultipleHyperlinkPresenter.d Sun Aug 24 03:23:46 2008 +0200 @@ -79,38 +79,38 @@ /** * A hyperlink presenter capable of showing multiple hyperlinks in a hover. - * + * * @since 3.4 */ public class MultipleHyperlinkPresenter : DefaultHyperlinkPresenter { - + /** * An information control capable of showing a list of hyperlinks. The hyperlinks can be opened. */ private static class LinkListInformationControl : AbstractInformationControl , IInformationControlExtension2 { - + private static final class LinkContentProvider : IStructuredContentProvider { - + /* * @see dwtx.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object) */ public Object[] getElements(Object inputElement) { return (Object[]) inputElement; } - + /* * @see dwtx.jface.viewers.IContentProvider#dispose() */ public void dispose() { } - + /* * @see dwtx.jface.viewers.IContentProvider#inputChanged(dwtx.jface.viewers.Viewer, java.lang.Object, java.lang.Object) */ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } } - + private static final class LinkLabelProvider : ColumnLabelProvider { /* * @see dwtx.jface.viewers.ColumnLabelProvider#getText(java.lang.Object) @@ -123,17 +123,17 @@ return HyperlinkMessages.getString("LinkListInformationControl.unknownLink"); //$NON-NLS-1$ } } - + private final MultipleHyperlinkHoverManager fManager; - + private IHyperlink[] fInput; private Composite fParent; private Table fTable; private Color fForegroundColor; private Color fBackgroundColor; - - + + /** * Creates a link list information control with the given shell as parent. * @@ -149,14 +149,14 @@ fBackgroundColor= backgroundColor; create(); } - + /* * @see dwtx.jface.text.IInformationControl#setInformation(java.lang.String) */ public void setInformation(String information) { //replaced by IInformationControlExtension2#setInput(java.lang.Object) } - + /* * @see dwtx.jface.text.IInformationControlExtension2#setInput(java.lang.Object) */ @@ -164,7 +164,7 @@ fInput= (IHyperlink[]) input; deferredCreateContent(fParent); } - + /* * @see dwtx.jface.text.AbstractInformationControl#createContent(dwt.widgets.Composite) */ @@ -179,23 +179,23 @@ fParent.setForeground(fForegroundColor); fParent.setBackground(fBackgroundColor); } - + /* * @see dwtx.jface.text.AbstractInformationControl#computeSizeHint() */ public Point computeSizeHint() { Point preferedSize= getShell().computeSize(DWT.DEFAULT, DWT.DEFAULT, true); - + Point constraints= getSizeConstraints(); if (constraints is null) return preferedSize; - + if (fTable.getVerticalBar() is null || fTable.getHorizontalBar() is null) return Geometry.min(constraints, preferedSize); - + int scrollBarWidth= fTable.getVerticalBar().getSize().x; int scrollBarHeight= fTable.getHorizontalBar().getSize().y; - + int width; if (preferedSize.y - scrollBarHeight <= constraints.y) { width= preferedSize.x - scrollBarWidth; @@ -203,7 +203,7 @@ } else { width= Math.min(preferedSize.x, constraints.x); } - + int height; if (preferedSize.x - scrollBarWidth <= constraints.x) { height= preferedSize.y - scrollBarHeight; @@ -211,27 +211,27 @@ } else { height= Math.min(preferedSize.y, constraints.y); } - + return new Point(width, height); } - + private void deferredCreateContent(Composite parent) { fTable= new Table(parent, DWT.SINGLE | DWT.FULL_SELECTION); fTable.setLinesVisible(false); fTable.setHeaderVisible(false); fTable.setForeground(fForegroundColor); fTable.setBackground(fBackgroundColor); - + final TableViewer viewer= new TableViewer(fTable); viewer.setContentProvider(new LinkContentProvider()); viewer.setLabelProvider(new LinkLabelProvider()); viewer.setInput(fInput); fTable.setSelection(0); - + registerTableListeners(); - + getShell().addShellListener(new class() ShellAdapter { - + /* * @see dwt.events.ShellAdapter#shellActivated(dwt.events.ShellEvent) */ @@ -239,17 +239,17 @@ if (viewer.getTable().getSelectionCount() is 0) { viewer.getTable().setSelection(0); } - + viewer.getTable().setFocus(); } }); } - + private void registerTableListeners() { - + fTable.addMouseMoveListener(new class() MouseMoveListener { TableItem fLastItem= null; - + public void mouseMove(MouseEvent e) { if (fTable.equals(e.getSource())) { Object o= fTable.getItem(new Point(e.x, e.y)); @@ -257,41 +257,41 @@ TableItem item= cast(TableItem) o; if (!o.equals(fLastItem)) { fLastItem= cast(TableItem) o; - fTable.setSelection(new TableItem[] { fLastItem }); + fTable.setSelection([ fLastItem ]); } else if (e.y < fTable.getItemHeight() / 4) { // Scroll up int index= fTable.indexOf(item); if (index > 0) { fLastItem= fTable.getItem(index - 1); - fTable.setSelection(new TableItem[] { fLastItem }); + fTable.setSelection([ fLastItem ]); } } else if (e.y > fTable.getBounds().height - fTable.getItemHeight() / 4) { // Scroll down int index= fTable.indexOf(item); if (index < fTable.getItemCount() - 1) { fLastItem= fTable.getItem(index + 1); - fTable.setSelection(new TableItem[] { fLastItem }); + fTable.setSelection([ fLastItem ]); } } } } } }); - + fTable.addSelectionListener(new class() SelectionAdapter { public void widgetSelected(SelectionEvent e) { openSelectedLink(); } }); - + fTable.addMouseListener(new class() MouseAdapter { public void mouseUp(MouseEvent e) { if (fTable.getSelectionCount() < 1) return; - + if (e.button !is 1) return; - + if (fTable.equals(e.getSource())) { Object o= fTable.getItem(new Point(e.x, e.y)); TableItem selection= fTable.getSelection()[0]; @@ -300,7 +300,7 @@ } } }); - + fTable.addKeyListener(new class() KeyAdapter { public void keyPressed(KeyEvent e) { if (e.keyCode is 0x0D) // return @@ -308,7 +308,7 @@ } }); } - + /* * @see dwtx.jface.text.IInformationControlExtension#hasContents() */ @@ -326,9 +326,9 @@ link.open(); } } - + private class MultipleHyperlinkHover : ITextHover, ITextHoverExtension { - + /** * @see dwtx.jface.text.ITextHover#getHoverInfo(dwtx.jface.text.ITextViewer, dwtx.jface.text.IRegion) * @deprecated @@ -336,21 +336,21 @@ public String getHoverInfo(ITextViewer textViewer, IRegion hoverRegion) { return null; } - + /* * @see dwtx.jface.text.ITextHover#getHoverRegion(dwtx.jface.text.ITextViewer, int) */ public IRegion getHoverRegion(ITextViewer textViewer, int offset) { return fSubjectRegion; } - + /* * @see dwtx.jface.text.ITextHoverExtension2#getHoverInfo2(dwtx.jface.text.ITextViewer, dwtx.jface.text.IRegion) */ public Object getHoverInfo2(ITextViewer textViewer, IRegion hoverRegion) { return fHyperlinks; } - + /* * @see dwtx.jface.text.ITextHoverExtension#getHoverControlCreator() */ @@ -364,36 +364,36 @@ }; } } - + private static class MultipleHyperlinkHoverManager : AbstractInformationControlManager , IWidgetTokenKeeper, IWidgetTokenKeeperExtension { - + private class Closer : IInformationControlCloser, Listener, KeyListener { - + private Control fSubjectControl; private Display fDisplay; private IInformationControl fControl; private Rectangle fSubjectArea; - + /* * @see dwtx.jface.text.AbstractInformationControlManager.IInformationControlCloser#setInformationControl(dwtx.jface.text.IInformationControl) */ public void setInformationControl(IInformationControl control) { fControl= control; } - + /* * @see dwtx.jface.text.AbstractInformationControlManager.IInformationControlCloser#setSubjectControl(dwt.widgets.Control) */ public void setSubjectControl(Control subject) { fSubjectControl= subject; } - + /* * @see dwtx.jface.text.AbstractInformationControlManager.IInformationControlCloser#start(dwt.graphics.Rectangle) */ public void start(Rectangle subjectArea) { fSubjectArea= subjectArea; - + fDisplay= fSubjectControl.getDisplay(); if (!fDisplay.isDisposed()) { fDisplay.addFilter(DWT.FocusOut, this); @@ -401,7 +401,7 @@ fTextViewer.getTextWidget().addKeyListener(this); } } - + /* * @see dwtx.jface.text.AbstractInformationControlManager.IInformationControlCloser#stop() */ @@ -411,10 +411,10 @@ fDisplay.removeFilter(DWT.MouseMove, this); fTextViewer.getTextWidget().removeKeyListener(this); } - + fSubjectArea= null; } - + /* * @see dwt.widgets.Listener#handleEvent(dwt.widgets.Event) */ @@ -429,41 +429,41 @@ break; } } - + /** * Handle mouse movement events. - * + * * @param event the event */ private void handleMouseMove(Event event) { - if (!(event.widget instanceof Control)) + if (!(cast(Control)event.widget )) return; - + if (fControl.isFocusControl()) return; - + Control eventControl= cast(Control) event.widget; - + //transform coordinates to subject control: Point mouseLoc= event.display.map(eventControl, fSubjectControl, event.x, event.y); - + if (fSubjectArea.contains(mouseLoc)) return; - + if (inKeepUpZone(mouseLoc.x, mouseLoc.y, (cast(IInformationControlExtension3) fControl).getBounds())) return; - + hideInformationControl(); } - + /** * Tests whether a given mouse location is within the keep-up zone. * The hover should not be hidden as long as the mouse stays inside this zone. - * + * * @param x the x coordinate, relative to the <em>subject control</em> * @param y the y coordinate, relative to the <em>subject control</em> * @param controlBounds the bounds of the current control - * + * * @return <code>true</code> iff the mouse event occurred in the keep-up zone */ private bool inKeepUpZone(int x, int y, Rectangle controlBounds) { @@ -476,23 +476,23 @@ // +--------------------+ if (fSubjectArea.contains(x, y)) return true; - + Rectangle iControlBounds= fSubjectControl.getDisplay().map(null, fSubjectControl, controlBounds); Rectangle totalBounds= Geometry.copy(iControlBounds); if (totalBounds.contains(x, y)) return true; - + int keepUpY= fSubjectArea.y + fSubjectArea.height; Rectangle alsoKeepUp= new Rectangle(fSubjectArea.x, keepUpY, fSubjectArea.width, totalBounds.y - keepUpY); return alsoKeepUp.contains(x, y); } - + /* * @see dwt.events.KeyListener#keyPressed(dwt.events.KeyEvent) */ public void keyPressed(KeyEvent e) { } - + /* * @see dwt.events.KeyListener#keyReleased(dwt.events.KeyEvent) */ @@ -501,41 +501,41 @@ } } - + /** * Priority of the hover managed by this manager. * Default value: One higher then for the hovers * managed by TextViewerHoverManager. */ private static final int WIDGET_TOKEN_PRIORITY= 1; - + private final MultipleHyperlinkHover fHover; private final ITextViewer fTextViewer; private final MultipleHyperlinkPresenter fHyperlinkPresenter; private Closer fCloser; private bool fIsControlVisible; - + /** * Create a new MultipleHyperlinkHoverManager. The MHHM can show and hide * the given MultipleHyperlinkHover inside the given ITextViewer. - * + * * @param hover the hover to manage * @param viewer the viewer to show the hover in * @param hyperlinkPresenter the hyperlink presenter using this manager to present hyperlinks */ public this(MultipleHyperlinkHover hover, ITextViewer viewer, MultipleHyperlinkPresenter hyperlinkPresenter) { super(hover.getHoverControlCreator()); - + fHover= hover; fTextViewer= viewer; fHyperlinkPresenter= hyperlinkPresenter; - + fCloser= new Closer(); setCloser(fCloser); fIsControlVisible= false; } - + /* * @see dwtx.jface.text.AbstractInformationControlManager#computeInformation() */ @@ -545,32 +545,32 @@ setInformation(null, null); return; } - + Rectangle area= JFaceTextUtil.computeArea(region, fTextViewer); if (area is null || area.isEmpty()) { setInformation(null, null); return; } - + Object information= fHover.getHoverInfo2(fTextViewer, region); setCustomInformationControlCreator(fHover.getHoverControlCreator()); setInformation(information, area); } - - /* + + /* * @see dwtx.jface.text.AbstractInformationControlManager#computeInformationControlLocation(dwt.graphics.Rectangle, dwt.graphics.Point) */ protected Point computeInformationControlLocation(Rectangle subjectArea, Point controlSize) { Point result= super.computeInformationControlLocation(subjectArea, controlSize); - + Point cursorLocation= fTextViewer.getTextWidget().getDisplay().getCursorLocation(); if (cursorLocation.x <= result.x + controlSize.x) return result; - + result.x= cursorLocation.x + 20 - controlSize.x; return result; } - + /* * @see dwtx.jface.text.AbstractInformationControlManager#showInformationControl(dwt.graphics.Rectangle) */ @@ -584,38 +584,38 @@ } else { super.showInformationControl(subjectArea); } - + fIsControlVisible= true; } - + /* * @see dwtx.jface.text.AbstractInformationControlManager#hideInformationControl() */ protected void hideInformationControl() { super.hideInformationControl(); - + if ( cast(IWidgetTokenOwner)fTextViewer ) { (cast(IWidgetTokenOwner) fTextViewer).releaseWidgetToken(this); } - + fIsControlVisible= false; fHyperlinkPresenter.hideHyperlinks(); } - + /* * @see dwtx.jface.text.AbstractInformationControlManager#disposeInformationControl() */ public void disposeInformationControl() { super.disposeInformationControl(); - + if ( cast(IWidgetTokenOwner)fTextViewer ) { (cast(IWidgetTokenOwner) fTextViewer).releaseWidgetToken(this); } - + fIsControlVisible= false; fHyperlinkPresenter.hideHyperlinks(); } - + /* * @see dwtx.jface.text.IWidgetTokenKeeper#requestWidgetToken(dwtx.jface.text.IWidgetTokenOwner) */ @@ -623,42 +623,42 @@ hideInformationControl(); return true; } - + /* * @see dwtx.jface.text.IWidgetTokenKeeperExtension#requestWidgetToken(dwtx.jface.text.IWidgetTokenOwner, int) */ public bool requestWidgetToken(IWidgetTokenOwner owner, int priority) { if (priority < WIDGET_TOKEN_PRIORITY) return false; - + hideInformationControl(); return true; } - + /* * @see dwtx.jface.text.IWidgetTokenKeeperExtension#setFocus(dwtx.jface.text.IWidgetTokenOwner) */ public bool setFocus(IWidgetTokenOwner owner) { return false; } - + /** * Returns <code>true</code> if the information control managed by * this manager is visible, <code>false</code> otherwise. - * + * * @return <code>true</code> if information control is visible */ public bool isInformationControlVisible() { return fIsControlVisible; } } - + private ITextViewer fTextViewer; - + private IHyperlink[] fHyperlinks; private Region fSubjectRegion; private MultipleHyperlinkHoverManager fManager; - + /** * Creates a new multiple hyperlink presenter which uses * {@link #HYPERLINK_COLOR} to read the color from the given preference store. @@ -668,7 +668,7 @@ public this(IPreferenceStore store) { super(store); } - + /** * Creates a new multiple hyperlink presenter. * @@ -677,80 +677,80 @@ public this(RGB color) { super(color); } - + /* * @see dwtx.jface.text.hyperlink.DefaultHyperlinkPresenter#install(dwtx.jface.text.ITextViewer) */ public void install(ITextViewer viewer) { super.install(viewer); fTextViewer= viewer; - + fManager= new MultipleHyperlinkHoverManager(new MultipleHyperlinkHover(), fTextViewer, this); fManager.install(viewer.getTextWidget()); fManager.setSizeConstraints(100, 12, false, true); } - + /* * @see dwtx.jface.text.hyperlink.DefaultHyperlinkPresenter#uninstall() */ public void uninstall() { super.uninstall(); - + if (fTextViewer !is null) { fManager.dispose(); - + fTextViewer= null; } } - + /* * @see dwtx.jface.text.hyperlink.DefaultHyperlinkPresenter#canShowMultipleHyperlinks() */ public bool canShowMultipleHyperlinks() { return true; } - + /* * @see dwtx.jface.text.hyperlink.DefaultHyperlinkPresenter#canHideHyperlinks() */ public bool canHideHyperlinks() { return !fManager.isInformationControlVisible(); } - + /* * @see dwtx.jface.text.hyperlink.DefaultHyperlinkPresenter#hideHyperlinks() */ public void hideHyperlinks() { super.hideHyperlinks(); - + fHyperlinks= null; } - + /* * @see dwtx.jface.text.hyperlink.DefaultHyperlinkPresenter#showHyperlinks(dwtx.jface.text.hyperlink.IHyperlink[]) */ public void showHyperlinks(IHyperlink[] hyperlinks) { - super.showHyperlinks(new IHyperlink[] { hyperlinks[0] }); + super.showHyperlinks([ hyperlinks[0] ]); fSubjectRegion= null; fHyperlinks= hyperlinks; - + if (hyperlinks.length is 1) return; - + int start= hyperlinks[0].getHyperlinkRegion().getOffset(); int end= start + hyperlinks[0].getHyperlinkRegion().getLength(); - + for (int i= 1; i < hyperlinks.length; i++) { int hstart= hyperlinks[i].getHyperlinkRegion().getOffset(); int hend= hstart + hyperlinks[i].getHyperlinkRegion().getLength(); - + start= Math.min(start, hstart); end= Math.max(end, hend); } - + fSubjectRegion= new Region(start, end - start); - + fManager.showInformation(); } }