Index: src/org/eclipse/tm/internal/terminal/control/impl/TerminalControl.java =================================================================== RCS file: /cvsroot/dsdp/org.eclipse.tm.core/terminal/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/control/impl/TerminalControl.java,v retrieving revision 1.12 diff -u -r1.12 TerminalControl.java --- src/org/eclipse/tm/internal/terminal/control/impl/TerminalControl.java 20 Jun 2007 13:39:56 -0000 1.12 +++ src/org/eclipse/tm/internal/terminal/control/impl/TerminalControl.java 31 Aug 2007 07:48:35 -0000 @@ -23,6 +23,9 @@ import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.resource.JFaceResources; +import org.eclipse.jface.text.ConfigurableLineTracker; +import org.eclipse.jface.text.Document; +import org.eclipse.jface.text.TextViewer; import org.eclipse.osgi.util.NLS; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.StyledText; @@ -52,6 +55,7 @@ import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnectorInfo; import org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl; import org.eclipse.tm.internal.terminal.provisional.api.Logger; +import org.eclipse.tm.internal.terminal.provisional.api.TerminalConnectorsManager; import org.eclipse.tm.internal.terminal.provisional.api.TerminalState; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.contexts.IContextActivation; @@ -80,7 +84,7 @@ private TerminalText fTerminalText; private Display fDisplay; - private StyledText fCtlText; + private TextViewer fTextViewer; private Composite fWndParent; private Clipboard fClipboard; private TerminalModifyListener fModifyListener; @@ -192,7 +196,7 @@ * @return non null selection */ public String getSelection() { - String txt= fCtlText.getSelectionText(); + String txt= fTextViewer.getTextWidget().getSelectionText(); if(txt==null) txt=""; //$NON-NLS-1$ return txt; @@ -216,7 +220,9 @@ * @see org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl#isDisposed() */ public boolean isDisposed() { - return getCtlText().isDisposed(); + if (getCtlText() != null) + return getCtlText().isDisposed(); + return true; } /* (non-Javadoc) @@ -253,6 +259,8 @@ // clean the error message setMsg(""); //$NON-NLS-1$ waitForConnect(); + TerminalConnectorsManager.instance().registerViewer(fTextViewer, + fConnectorInfo); } private ITerminalConnector getTerminalConnector() { @@ -271,6 +279,7 @@ } if(getTerminalConnector()!=null) { getTerminalConnector().disconnect(); + TerminalConnectorsManager.instance().disposeViewer(fTextViewer); } } @@ -392,6 +401,12 @@ setupListeners(); setupHelp(fWndParent, TerminalPlugin.HELP_VIEW); } + + protected class TerminalDocument extends Document { + protected TerminalDocument() { + setLineTracker(new ConfigurableLineTracker(LINE_DELIMITERS)); + } + } /* (non-Javadoc) * @see org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl#onFontChanged() @@ -421,13 +436,16 @@ layout.marginHeight=0; fWndParent.setLayout(layout); - setCtlText(new StyledText(fWndParent, SWT.V_SCROLL)); - fCtlText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - + setTextViewer(new TextViewer(fWndParent, SWT.V_SCROLL)); + fTextViewer.getTextWidget().setLayoutData( + new GridData(SWT.FILL, SWT.FILL, true, true)); + fDisplay = getCtlText().getDisplay(); fClipboard = new Clipboard(fDisplay); -// fViewer.setDocument(new TerminalDocument()); + + fTextViewer.setDocument(new TerminalDocument()); + getCtlText().setFont(JFaceResources.getTextFont()); } @@ -507,16 +525,16 @@ return fMsg; } - void setCtlText(StyledText ctlText) { - fCtlText = ctlText; - fTerminalText.setStyledText(ctlText); + void setTextViewer(TextViewer viewer) { + fTextViewer = viewer; + fTerminalText.setStyledText(viewer.getTextWidget()); } /* (non-Javadoc) * @see org.eclipse.tm.internal.terminal.provisional.api.ITerminalControl#getCtlText() */ public StyledText getCtlText() { - return fCtlText; + return fTextViewer.getTextWidget(); } void setTerminalText(TerminalText terminalText) { @@ -856,4 +874,9 @@ getTerminalText().setBufferLineLimit(bufferLineLimit); } + + public TextViewer getTextViewer() { + return fTextViewer; + } + } Index: src/org/eclipse/tm/internal/terminal/control/TerminalViewControlFactory.java =================================================================== RCS file: /cvsroot/dsdp/org.eclipse.tm.core/terminal/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/control/TerminalViewControlFactory.java,v retrieving revision 1.4 diff -u -r1.4 TerminalViewControlFactory.java --- src/org/eclipse/tm/internal/terminal/control/TerminalViewControlFactory.java 26 May 2007 04:15:43 -0000 1.4 +++ src/org/eclipse/tm/internal/terminal/control/TerminalViewControlFactory.java 31 Aug 2007 07:48:35 -0000 @@ -11,12 +11,33 @@ *******************************************************************************/ package org.eclipse.tm.internal.terminal.control; +import org.eclipse.jface.text.hyperlink.DefaultHyperlinkPresenter; +import org.eclipse.jface.text.hyperlink.IHyperlinkDetector; +import org.eclipse.jface.text.presentation.PresentationReconciler; +import org.eclipse.swt.graphics.RGB; import org.eclipse.swt.widgets.Composite; import org.eclipse.tm.internal.terminal.control.impl.TerminalControl; import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnectorInfo; public class TerminalViewControlFactory { - public static ITerminalViewControl makeControl(ITerminalListener target, Composite wndParent, ITerminalConnectorInfo[] connectors) { - return new TerminalControl(target, wndParent, connectors); + public ITerminalViewControl makeControl(ITerminalListener target, + Composite wndParent, ITerminalConnectorInfo[] connectors) { + TerminalControl control = new TerminalControl(target, wndParent, + connectors); + + DefaultHyperlinkPresenter hyperlinkPresenter = new DefaultHyperlinkPresenter( + new RGB(255, 0, 0)); // TODO: add preference key for color + + control.getTextViewer().setHyperlinkPresenter(hyperlinkPresenter); + IHyperlinkDetector[] detectors = TerminalHyperlinkDetectorsExtension + .getDetectors(); + + control.getTextViewer().setHyperlinkDetectors(detectors, 0); + + PresentationReconciler reconciler = new PresentationReconciler(); + reconciler.install(control.getTextViewer()); + + return control; + } } Index: plugin.xml =================================================================== RCS file: /cvsroot/dsdp/org.eclipse.tm.core/terminal/org.eclipse.tm.terminal/plugin.xml,v retrieving revision 1.9 diff -u -r1.9 plugin.xml --- plugin.xml 5 Jun 2007 12:48:29 -0000 1.9 +++ plugin.xml 31 Aug 2007 07:48:35 -0000 @@ -13,6 +13,7 @@ --> + + + + + + + + + Hyperlink detectors for the terminal view. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [Enter the first release in which this extension point appears.] + + + + + + + + + [Enter extension point usage example here.] + + + + + + + + + [Enter API information here.] + + + + + + + + + [Enter information about supplied implementation of this extension point.] + + + + + + + + + + + + + Index: src/org/eclipse/tm/internal/terminal/provisional/api/TerminalConnectorsManager.java =================================================================== RCS file: src/org/eclipse/tm/internal/terminal/provisional/api/TerminalConnectorsManager.java diff -N src/org/eclipse/tm/internal/terminal/provisional/api/TerminalConnectorsManager.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/org/eclipse/tm/internal/terminal/provisional/api/TerminalConnectorsManager.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,32 @@ +package org.eclipse.tm.internal.terminal.provisional.api; + +import java.util.HashMap; + +import org.eclipse.jface.text.ITextViewer; + +public class TerminalConnectorsManager { + + private TerminalConnectorsManager() { + } + + private static TerminalConnectorsManager inst = new TerminalConnectorsManager(); + + public static TerminalConnectorsManager instance() { + return inst; + } + + private HashMap viewersToConnectors = new HashMap(); + + public void registerViewer(ITextViewer viewer, ITerminalConnectorInfo connector) { + viewersToConnectors.put(viewer, connector); + } + + public void disposeViewer(ITextViewer viewer) { + viewersToConnectors.remove(viewer); + } + + public ITerminalConnectorInfo findConnectorInfoForViewer(ITextViewer viewer) { + return (ITerminalConnectorInfo) viewersToConnectors.get(viewer); + } + +}