diff options
author | Kevin Barnes | 2004-10-27 20:31:58 +0000 |
---|---|---|
committer | Kevin Barnes | 2004-10-27 20:31:58 +0000 |
commit | 95e295a34b61c034d4d6b81d2651b21ebc133938 (patch) | |
tree | 6fea788e1d029db6f99ef69a8028f0b6c26939eb /org.eclipse.ui.console | |
parent | d8c9661c895535921c41e46d729a29fde4ec2d7e (diff) | |
download | eclipse.platform.debug-95e295a34b61c034d4d6b81d2651b21ebc133938.tar.gz eclipse.platform.debug-95e295a34b61c034d4d6b81d2651b21ebc133938.tar.xz eclipse.platform.debug-95e295a34b61c034d4d6b81d2651b21ebc133938.zip |
Bug 77065 - scroll lock not required in stack trace console
Diffstat (limited to 'org.eclipse.ui.console')
10 files changed, 605 insertions, 411 deletions
diff --git a/org.eclipse.ui.console/src/org/eclipse/ui/console/IOConsole.java b/org.eclipse.ui.console/src/org/eclipse/ui/console/IOConsole.java index 3a1435e08..610ffd149 100644 --- a/org.eclipse.ui.console/src/org/eclipse/ui/console/IOConsole.java +++ b/org.eclipse.ui.console/src/org/eclipse/ui/console/IOConsole.java @@ -17,7 +17,9 @@ import java.util.List; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.ui.WorkbenchEncoding; +import org.eclipse.ui.internal.console.IOConsolePage; import org.eclipse.ui.internal.console.IOConsolePartitioner; +import org.eclipse.ui.part.IPageBookViewPage; /** * A console that displays text, accepts keyboard input from users, @@ -110,6 +112,13 @@ public class IOConsole extends TextConsole { this(name, null, imageDescriptor); } + /* (non-Javadoc) + * @see org.eclipse.ui.console.IConsole#createPage(org.eclipse.ui.console.IConsoleView) + */ + public IPageBookViewPage createPage(IConsoleView view) { + return new IOConsolePage(this, view); + } + /** * Creates and returns a new output stream which may be used to write to this console. * A console may be connected to more than one output stream at once. Clients are diff --git a/org.eclipse.ui.console/src/org/eclipse/ui/console/MessageConsole.java b/org.eclipse.ui.console/src/org/eclipse/ui/console/MessageConsole.java index acbe6e553..f0f1c78a7 100644 --- a/org.eclipse.ui.console/src/org/eclipse/ui/console/MessageConsole.java +++ b/org.eclipse.ui.console/src/org/eclipse/ui/console/MessageConsole.java @@ -11,7 +11,7 @@ package org.eclipse.ui.console; import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.ui.internal.console.TextConsolePage; +import org.eclipse.ui.internal.console.IOConsolePage; import org.eclipse.ui.part.IPageBookViewPage; /** @@ -56,7 +56,7 @@ public class MessageConsole extends IOConsole { * @see org.eclipse.ui.console.IConsole#createPage(org.eclipse.ui.console.IConsoleView) */ public IPageBookViewPage createPage(IConsoleView view) { - TextConsolePage page = (TextConsolePage) super.createPage(view); + IOConsolePage page = (IOConsolePage) super.createPage(view); page.setReadOnly(); return page; } diff --git a/org.eclipse.ui.console/src/org/eclipse/ui/console/TextConsole.java b/org.eclipse.ui.console/src/org/eclipse/ui/console/TextConsole.java index fa1f8d76c..9abba5546 100644 --- a/org.eclipse.ui.console/src/org/eclipse/ui/console/TextConsole.java +++ b/org.eclipse.ui.console/src/org/eclipse/ui/console/TextConsole.java @@ -25,7 +25,6 @@ import org.eclipse.swt.graphics.Font; import org.eclipse.ui.internal.console.ConsoleDocument; import org.eclipse.ui.internal.console.ConsoleHyperlinkPosition; import org.eclipse.ui.internal.console.ConsolePatternMatcher; -import org.eclipse.ui.internal.console.TextConsolePage; import org.eclipse.ui.part.IPageBookViewPage; /** @@ -426,9 +425,10 @@ public abstract class TextConsole extends AbstractConsole { * @throws BadLocationException if the specified location is not valid. */ public void addHyperlink(IHyperlink hyperlink, int offset, int length) throws BadLocationException { + IDocument document = getDocument(); ConsoleHyperlinkPosition hyperlinkPosition = new ConsoleHyperlinkPosition(hyperlink, offset, length); try { - getDocument().addPosition(ConsoleHyperlinkPosition.HYPER_LINK_CATEGORY, hyperlinkPosition); + document.addPosition(ConsoleHyperlinkPosition.HYPER_LINK_CATEGORY, hyperlinkPosition); } catch (BadPositionCategoryException e) { ConsolePlugin.log(e); } diff --git a/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/TextConsolePage.java b/org.eclipse.ui.console/src/org/eclipse/ui/console/TextConsolePage.java index a51cccde3..5af7c43a9 100644 --- a/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/TextConsolePage.java +++ b/org.eclipse.ui.console/src/org/eclipse/ui/console/TextConsolePage.java @@ -8,7 +8,8 @@ * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ -package org.eclipse.ui.internal.console; + +package org.eclipse.ui.console; import java.util.ArrayList; import java.util.HashMap; @@ -44,36 +45,27 @@ import org.eclipse.ui.IWorkbenchActionConstants; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.actions.ActionFactory; -import org.eclipse.ui.console.ConsolePlugin; -import org.eclipse.ui.console.IConsole; -import org.eclipse.ui.console.IConsoleConstants; -import org.eclipse.ui.console.IConsoleView; -import org.eclipse.ui.console.TextConsole; import org.eclipse.ui.console.actions.ClearOutputAction; import org.eclipse.ui.console.actions.TextViewerAction; +import org.eclipse.ui.internal.console.ConsoleMessages; +import org.eclipse.ui.internal.console.ConsoleView; +import org.eclipse.ui.internal.console.FollowHyperlinkAction; import org.eclipse.ui.part.IPageBookViewPage; import org.eclipse.ui.part.IPageSite; import org.eclipse.ui.texteditor.FindReplaceAction; import org.eclipse.ui.texteditor.IUpdate; -/** - * A page for an IOConsole - * - * @since 3.1 - * - */ public class TextConsolePage implements IPageBookViewPage, IPropertyChangeListener, IAdaptable { - - private TextConsoleViewer viewer; - private TextConsole console; - private IPageSite site; - private IConsoleView consoleView; - private Map globalActions = new HashMap(); - private ArrayList selectionActions = new ArrayList(); - private ClearOutputAction clearOutputAction; - private ScrollLockAction scrollLockAction; - private Menu menu; - private boolean readOnly; + private IPageSite fSite; + private TextConsole fConsole; + private IConsoleView fConsoleView; + private TextConsoleViewer fViewer; + private Menu fMenu; + protected Map fGlobalActions = new HashMap(); + protected ArrayList fSelectionActions = new ArrayList(); + protected ClearOutputAction fClearOutputAction; + + // text selection listener, used to update selection dependant actions on selection changes private ISelectionChangedListener selectionChangedListener = new ISelectionChangedListener() { @@ -81,48 +73,57 @@ public class TextConsolePage implements IPageBookViewPage, IPropertyChangeListen updateSelectionDependentActions(); } }; - + // updates the find replace action if the document length is > 0 private ITextListener textListener = new ITextListener() { public void textChanged(TextEvent event) { - IUpdate findReplace = (IUpdate)globalActions.get(ActionFactory.FIND.getId()); + IUpdate findReplace = (IUpdate)fGlobalActions.get(ActionFactory.FIND.getId()); if (findReplace != null) { findReplace.update(); } } }; - - - public TextConsolePage(TextConsole console, IConsoleView view) { - this.console = console; - this.consoleView = view; - } - + + public TextConsolePage(TextConsole console, IConsoleView view) { + fConsole = console; + fConsoleView = view; + } + + protected TextConsoleViewer createViewer(Composite parent, TextConsole console) { + return new TextConsoleViewer(parent, console); + } /* * (non-Javadoc) * @see org.eclipse.ui.part.IPageBookViewPage#getSite() */ public IPageSite getSite() { - return site; + return fSite; } - + /* * (non-Javadoc) * @see org.eclipse.ui.part.IPageBookViewPage#init(org.eclipse.ui.part.IPageSite) */ public void init(IPageSite pageSite) throws PartInitException { - site = pageSite; + fSite = pageSite; } + protected void updateSelectionDependentActions() { + Iterator iterator= fSelectionActions.iterator(); + while (iterator.hasNext()) { + updateAction((String)iterator.next()); + } + } + /* * (non-Javadoc) * @see org.eclipse.ui.part.IPage#createControl(org.eclipse.swt.widgets.Composite) */ public void createControl(Composite parent) { - viewer = new TextConsoleViewer(parent, console); - viewer.setConsoleWidth(console.getConsoleWidth()); - viewer.setTabWidth(console.getTabWidth()); - console.addPropertyChangeListener(this); + fViewer = createViewer(parent, fConsole); + fViewer.setConsoleWidth(fConsole.getConsoleWidth()); + fViewer.setTabWidth(fConsole.getTabWidth()); + fConsole.addPropertyChangeListener(this); JFaceResources.getFontRegistry().addListener(this); MenuManager manager= new MenuManager("#TextConsole", "#TextConsole"); //$NON-NLS-1$//$NON-NLS-2$ @@ -132,50 +133,45 @@ public class TextConsolePage implements IPageBookViewPage, IPropertyChangeListen contextMenuAboutToShow(m); } }); - menu = manager.createContextMenu(getControl()); - getControl().setMenu(menu); + fMenu = manager.createContextMenu(getControl()); + getControl().setMenu(fMenu); createActions(); configureToolBar(getSite().getActionBars().getToolBarManager()); - getSite().registerContextMenu(ConsolePlugin.getUniqueIdentifier() + ".TextConsole", manager, viewer); //$NON-NLS-1$ - getSite().setSelectionProvider(viewer); + getSite().registerContextMenu(ConsolePlugin.getUniqueIdentifier() + ".TextConsole", manager, fViewer); //$NON-NLS-1$ + getSite().setSelectionProvider(fViewer); - viewer.getSelectionProvider().addSelectionChangedListener(selectionChangedListener); - viewer.addTextListener(textListener); - if (readOnly) { - viewer.setReadOnly(); - } + fViewer.getSelectionProvider().addSelectionChangedListener(selectionChangedListener); + fViewer.addTextListener(textListener); } - + /* * (non-Javadoc) * @see org.eclipse.ui.part.IPage#dispose() */ public void dispose() { - console.removePropertyChangeListener(this); + fConsole.removePropertyChangeListener(this); JFaceResources.getFontRegistry().removeListener(this); - if (menu != null && !menu.isDisposed()) { - menu.dispose(); - } - clearOutputAction = null; - if (scrollLockAction != null) { - scrollLockAction.dispose(); + if (fMenu != null && !fMenu.isDisposed()) { + fMenu.dispose(); } - selectionActions.clear(); - globalActions.clear(); + fClearOutputAction = null; + fSelectionActions.clear(); + fGlobalActions.clear(); - viewer.getSelectionProvider().removeSelectionChangedListener(selectionChangedListener); - viewer.removeTextListener(textListener); + fViewer.getSelectionProvider().removeSelectionChangedListener(selectionChangedListener); + fViewer.removeTextListener(textListener); } + /* * (non-Javadoc) * @see org.eclipse.ui.part.IPage#getControl() */ public Control getControl() { - return viewer != null ? viewer.getControl() : null; + return fViewer != null ? fViewer.getControl() : null; } /* (non-Javadoc) @@ -188,20 +184,11 @@ public class TextConsolePage implements IPageBookViewPage, IPropertyChangeListen * @see org.eclipse.ui.part.IPage#setFocus() */ public void setFocus() { - viewer.getTextWidget().setFocus(); + fViewer.getTextWidget().setFocus(); } protected void setFont(Font font) { - viewer.getTextWidget().setFont(font); - } - - public void setAutoScroll(boolean scroll) { - if (viewer != null) { - viewer.setAutoScroll(scroll); - } - if (scrollLockAction != null) { - scrollLockAction.setChecked(!scroll); - } + fViewer.getTextWidget().setFont(font); } /* @@ -212,77 +199,94 @@ public class TextConsolePage implements IPageBookViewPage, IPropertyChangeListen Object source = event.getSource(); String property = event.getProperty(); - if (source.equals(console) && IConsoleConstants.P_FONT.equals(property)) { - setFont(console.getFont()); + if (source.equals(fConsole) && IConsoleConstants.P_FONT.equals(property)) { + setFont(fConsole.getFont()); } else if (IConsoleConstants.P_FONT_STYLE.equals(property)) { - viewer.getTextWidget().redraw(); + fViewer.getTextWidget().redraw(); } else if (property.equals(IConsoleConstants.P_STREAM_COLOR)) { - viewer.getTextWidget().redraw(); - } else if (source.equals(console) && property.equals(IConsoleConstants.P_TAB_SIZE)) { + fViewer.getTextWidget().redraw(); + } else if (source.equals(fConsole) && property.equals(IConsoleConstants.P_TAB_SIZE)) { Integer tabSize = (Integer)event.getNewValue(); - viewer.setTabWidth(tabSize.intValue()); - } else if (source.equals(console) && property.equals(IConsoleConstants.P_CONSOLE_WIDTH)) { - viewer.setConsoleWidth(console.getConsoleWidth()); + fViewer.setTabWidth(tabSize.intValue()); + } else if (source.equals(fConsole) && property.equals(IConsoleConstants.P_CONSOLE_WIDTH)) { + fViewer.setConsoleWidth(fConsole.getConsoleWidth()); } else if (property.equals(IConsoleConstants.CONSOLE_FONT)) { - viewer.setFont(JFaceResources.getFont(IConsoleConstants.CONSOLE_FONT)); - } else if (property.equals(IConsoleConstants.P_CONSOLE_OUTPUT_COMPLETE)) { - viewer.setReadOnly(); - } else if (property.equals(IConsoleConstants.P_AUTO_SCROLL)) { - setAutoScroll(console.getAutoScroll()); - } + fViewer.setFont(JFaceResources.getFont(IConsoleConstants.CONSOLE_FONT)); + } } protected void createActions() { IActionBars actionBars= getSite().getActionBars(); - TextViewerAction action= new TextViewerAction(viewer, ITextOperationTarget.SELECT_ALL); + TextViewerAction action= new TextViewerAction(fViewer, ITextOperationTarget.SELECT_ALL); action.configureAction(ConsoleMessages.getString("IOConsolePage.0"), ConsoleMessages.getString("IOConsolePage.1"), ConsoleMessages.getString("IOConsolePage.2")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ setGlobalAction(actionBars, ActionFactory.SELECT_ALL.getId(), action); - action= new TextViewerAction(viewer, ITextOperationTarget.CUT); + action= new TextViewerAction(fViewer, ITextOperationTarget.CUT); action.configureAction(ConsoleMessages.getString("IOConsolePage.3"), ConsoleMessages.getString("IOConsolePage.4"), ConsoleMessages.getString("IOConsolePage.5")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ action.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_TOOL_CUT)); setGlobalAction(actionBars, ActionFactory.CUT.getId(), action); - action= new TextViewerAction(viewer, ITextOperationTarget.COPY); + action= new TextViewerAction(fViewer, ITextOperationTarget.COPY); action.configureAction(ConsoleMessages.getString("IOConsolePage.6"), ConsoleMessages.getString("IOConsolePage.7"), ConsoleMessages.getString("IOConsolePage.8")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ action.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_TOOL_COPY)); setGlobalAction(actionBars, ActionFactory.COPY.getId(), action); - action= new TextViewerAction(viewer, ITextOperationTarget.PASTE); + action= new TextViewerAction(fViewer, ITextOperationTarget.PASTE); action.configureAction(ConsoleMessages.getString("IOConsolePage.9"), ConsoleMessages.getString("IOConsolePage.10"), ConsoleMessages.getString("IOConsolePage.11")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ action.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_TOOL_PASTE)); setGlobalAction(actionBars, ActionFactory.PASTE.getId(), action); - clearOutputAction = new ClearOutputAction(console); - - scrollLockAction = new ScrollLockAction(console); - setAutoScroll(!scrollLockAction.isChecked()); + fClearOutputAction = new ClearOutputAction(fConsole); ResourceBundle bundle= ResourceBundle.getBundle("org.eclipse.ui.internal.console.ConsoleMessages"); //$NON-NLS-1$ - setGlobalAction(actionBars, ActionFactory.FIND.getId(), new FindReplaceAction(bundle, "find_replace_action.", consoleView)); //$NON-NLS-1$ + setGlobalAction(actionBars, ActionFactory.FIND.getId(), new FindReplaceAction(bundle, "find_replace_action.", fConsoleView)); //$NON-NLS-1$ - selectionActions.add(ActionFactory.CUT.getId()); - selectionActions.add(ActionFactory.COPY.getId()); - selectionActions.add(ActionFactory.PASTE.getId()); - selectionActions.add(ActionFactory.FIND.getId()); + fSelectionActions.add(ActionFactory.CUT.getId()); + fSelectionActions.add(ActionFactory.COPY.getId()); + fSelectionActions.add(ActionFactory.PASTE.getId()); + fSelectionActions.add(ActionFactory.FIND.getId()); actionBars.updateActionBars(); } protected void setGlobalAction(IActionBars actionBars, String actionID, IAction action) { - globalActions.put(actionID, action); + fGlobalActions.put(actionID, action); actionBars.setGlobalActionHandler(actionID, action); } - protected void updateSelectionDependentActions() { - Iterator iterator= selectionActions.iterator(); - while (iterator.hasNext()) { - updateAction((String)iterator.next()); + /* (non-Javadoc) + * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class) + */ + public Object getAdapter(Class required) { + if (IFindReplaceTarget.class.equals(required)) { + return fViewer.getFindReplaceTarget(); } - } + if (Widget.class.equals(required)) { + return fViewer.getTextWidget(); + } + return null; + } + + /** + * Returns the view this page is contained in + * + * @return the view this page is contained in + */ + protected IConsoleView getConsoleView() { + return fConsoleView; + } + + /** + * Returns the console this page is displaying + * + * @return the console this page is displaying + */ + protected IConsole getConsole() { + return fConsole; + } protected void updateAction(String actionId) { - IAction action= (IAction)globalActions.get(actionId); + IAction action= (IAction)fGlobalActions.get(actionId); if (action instanceof IUpdate) { ((IUpdate) action).update(); } @@ -295,25 +299,22 @@ public class TextConsolePage implements IPageBookViewPage, IPropertyChangeListen * @param menuManager menu */ protected void contextMenuAboutToShow(IMenuManager menuManager) { - IDocument doc= viewer.getDocument(); + IDocument doc= fViewer.getDocument(); if (doc == null) { return; } - if (!viewer.isReadOnly()) { - menuManager.add((IAction)globalActions.get(ActionFactory.CUT.getId())); - } - menuManager.add((IAction)globalActions.get(ActionFactory.COPY.getId())); - if (!viewer.isReadOnly()) { - menuManager.add((IAction)globalActions.get(ActionFactory.PASTE.getId())); - } - menuManager.add((IAction)globalActions.get(ActionFactory.SELECT_ALL.getId())); + menuManager.add((IAction)fGlobalActions.get(ActionFactory.CUT.getId())); + menuManager.add((IAction)fGlobalActions.get(ActionFactory.COPY.getId())); + menuManager.add((IAction)fGlobalActions.get(ActionFactory.PASTE.getId())); + menuManager.add((IAction)fGlobalActions.get(ActionFactory.SELECT_ALL.getId())); + menuManager.add(new Separator("FIND")); //$NON-NLS-1$ - menuManager.add((IAction)globalActions.get(ActionFactory.FIND.getId())); - menuManager.add(new FollowHyperlinkAction(viewer)); - menuManager.add(clearOutputAction); - menuManager.add(scrollLockAction); + menuManager.add((IAction)fGlobalActions.get(ActionFactory.FIND.getId())); + menuManager.add(new FollowHyperlinkAction(fViewer)); + menuManager.add(fClearOutputAction); + menuManager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); // TODO: hack to let participants contribute to context menu @@ -321,49 +322,20 @@ public class TextConsolePage implements IPageBookViewPage, IPropertyChangeListen } protected void configureToolBar(IToolBarManager mgr) { - mgr.appendToGroup(IConsoleConstants.OUTPUT_GROUP, clearOutputAction); - mgr.appendToGroup(IConsoleConstants.OUTPUT_GROUP, scrollLockAction); + mgr.appendToGroup(IConsoleConstants.OUTPUT_GROUP, fClearOutputAction); } - /* (non-Javadoc) - * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class) - */ - public Object getAdapter(Class required) { - if (IFindReplaceTarget.class.equals(required)) { - return viewer.getFindReplaceTarget(); - } - if (Widget.class.equals(required)) { - return viewer.getTextWidget(); - } - return null; - } /** - * inform the viewer that it's text widget should not be editable. + * @return Returns the viewer. */ - public void setReadOnly() { - readOnly = true; - if (viewer != null) { - viewer.setReadOnly(); - } + public TextConsoleViewer getViewer() { + return fViewer; } - /** - * Returns the view this page is contained in - * - * @return the view this page is contained in - */ - protected IConsoleView getConsoleView() { - return consoleView; - } - - /** - * Returns the console this page is displaying - * - * @return the console this page is displaying - */ - protected IConsole getConsole() { - return console; - } - + * @param viewer The viewer to set. + */ + public void setViewer(TextConsoleViewer viewer) { + this.fViewer = viewer; + } } diff --git a/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/TextConsoleViewer.java b/org.eclipse.ui.console/src/org/eclipse/ui/console/TextConsoleViewer.java index c1280da10..025576ba0 100644 --- a/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/TextConsoleViewer.java +++ b/org.eclipse.ui.console/src/org/eclipse/ui/console/TextConsoleViewer.java @@ -1,22 +1,18 @@ /******************************************************************************* - * Copyright (c) 2000, 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html + * Copyright (c) 2000, 2004 IBM Corporation and others. All rights reserved. + * This program and the accompanying materials are made available under the + * terms of the Common Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/cpl-v10.html * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.ui.internal.console; + * Contributors: IBM Corporation - initial API and implementation + ******************************************************************************/ + +package org.eclipse.ui.console; import org.eclipse.jface.resource.JFaceColors; import org.eclipse.jface.resource.JFaceResources; -import org.eclipse.jface.text.BadLocationException; -import org.eclipse.jface.text.DocumentEvent; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.IDocumentAdapter; -import org.eclipse.jface.text.IDocumentListener; import org.eclipse.jface.text.IRegion; import org.eclipse.jface.text.TextViewer; import org.eclipse.swt.SWT; @@ -32,7 +28,6 @@ import org.eclipse.swt.events.MouseMoveListener; import org.eclipse.swt.events.MouseTrackListener; import org.eclipse.swt.events.PaintEvent; import org.eclipse.swt.events.PaintListener; -import org.eclipse.swt.events.VerifyEvent; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Cursor; import org.eclipse.swt.graphics.Font; @@ -41,38 +36,35 @@ import org.eclipse.swt.graphics.Point; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; -import org.eclipse.ui.console.ConsolePlugin; -import org.eclipse.ui.console.IConsoleConstants; -import org.eclipse.ui.console.IConsoleDocumentPartitioner; -import org.eclipse.ui.console.IHyperlink; -import org.eclipse.ui.console.TextConsole; +import org.eclipse.ui.internal.console.ConsoleDocumentAdapter; /** - * Viewer used to display an IOConsole + * Viewer used to display a TextConsole * * @since 3.1 */ public class TextConsoleViewer extends TextViewer implements LineStyleListener, LineBackgroundListener, MouseTrackListener, MouseMoveListener, MouseListener, PaintListener { /** - * will always scroll with output if value is true. - */ - private boolean autoScroll = true; - /** * Adapts document to the text widget. */ private ConsoleDocumentAdapter documentAdapter; + private IHyperlink hyperlink; + private Cursor handCursor; + private Cursor textCursor; + private int consoleWidth = -1; - private IDocumentListener documentListener; + + private TextConsole console; - + public TextConsoleViewer(Composite parent, TextConsole console) { super(parent, SWT.H_SCROLL | SWT.V_SCROLL); - this.console = console; + this.console = console; setDocument(console.getDocument()); - + StyledText styledText = getTextWidget(); styledText.setDoubleClickEnabled(true); styledText.addLineStyleListener(this); @@ -81,287 +73,254 @@ public class TextConsoleViewer extends TextViewer implements LineStyleListener, styledText.setFont(JFaceResources.getFont(IConsoleConstants.CONSOLE_FONT)); styledText.addMouseTrackListener(this); styledText.addPaintListener(this); - - documentListener = new IDocumentListener() { - public void documentAboutToBeChanged(DocumentEvent event) { - } - public void documentChanged(DocumentEvent event) { - revealEndOfDocument(); - } - }; - getDocument().addDocumentListener(documentListener); - } - - public boolean isAutoScroll() { - return autoScroll; - } - - public void setAutoScroll(boolean scroll) { - autoScroll = scroll; } - + public void setTabWidth(int tabWidth) { StyledText styledText = getTextWidget(); styledText.setTabs(tabWidth); styledText.redraw(); } - + public void setFont(Font font) { StyledText styledText = getTextWidget(); styledText.setFont(font); styledText.redraw(); } - - /* (non-Javadoc) - * @see org.eclipse.jface.text.TextViewer#handleVerifyEvent(org.eclipse.swt.events.VerifyEvent) - */ - protected void handleVerifyEvent(VerifyEvent e) { - IDocument doc = getDocument(); - String[] legalLineDelimiters = doc.getLegalLineDelimiters(); - String eventString = e.text; - - IConsoleDocumentPartitioner partitioner = (IConsoleDocumentPartitioner) doc.getDocumentPartitioner(); - if (!partitioner.isReadOnly(e.start)) { - boolean isCarriageReturn = false; - for (int i = 0; i < legalLineDelimiters.length; i++) { - if(e.text.equals(legalLineDelimiters[i])) { - isCarriageReturn = true; - break; - } - } - - if (!isCarriageReturn) { - super.handleVerifyEvent(e); - return; - } - } - - int length = doc.getLength(); - if (e.start == length) { - super.handleVerifyEvent(e); - } else { - try { - doc.replace(length, 0, eventString); - } catch (BadLocationException e1) { - } - e.doit = false; - } - } - + protected void revealEndOfDocument() { StyledText text = getTextWidget(); - if (text != null && autoScroll) { + if (text != null) { int charCount = text.getCharCount(); text.setCaretOffset(charCount); text.showSelection(); } } - - /* (non-Javadoc) + + /* + * (non-Javadoc) + * * @see org.eclipse.swt.custom.LineStyleListener#lineGetStyle(org.eclipse.swt.custom.LineStyleEvent) */ public void lineGetStyle(LineStyleEvent event) { IDocument document = getDocument(); - if (document != null && document.getLength() > 0){ - StyleRange[] styles = ((IConsoleDocumentPartitioner)document.getDocumentPartitioner()).getStyleRanges(event.lineOffset, event.lineText.length()); + if (document != null && document.getLength() > 0) { + StyleRange[] styles = ((IConsoleDocumentPartitioner) document.getDocumentPartitioner()).getStyleRanges(event.lineOffset, event.lineText.length()); event.styles = styles; } } - - /* (non-Javadoc) + + /* + * (non-Javadoc) + * * @see org.eclipse.swt.custom.LineBackgroundListener#lineGetBackground(org.eclipse.swt.custom.LineBackgroundEvent) */ public void lineGetBackground(LineBackgroundEvent event) { event.lineBackground = null; } - - /** - * @see org.eclipse.swt.events.PaintListener#paintControl(org.eclipse.swt.events.PaintEvent) - */ + + /** + * @see org.eclipse.swt.events.PaintListener#paintControl(org.eclipse.swt.events.PaintEvent) + */ public void paintControl(PaintEvent e) { if (hyperlink != null) { IDocument doc = getDocument(); StyledText text = getTextWidget(); - + if (doc == null || text == null) { return; } - - IConsoleDocumentPartitioner partitioner = (IConsoleDocumentPartitioner)doc.getDocumentPartitioner(); + + IConsoleDocumentPartitioner partitioner = (IConsoleDocumentPartitioner) doc.getDocumentPartitioner(); if (partitioner == null) { return; } - + IRegion linkRegion = console.getRegion(hyperlink); if (linkRegion != null) { int start = linkRegion.getOffset(); int end = start + linkRegion.getLength(); - + Color fontColor = JFaceColors.getActiveHyperlinkText(Display.getCurrent()); Color color = e.gc.getForeground(); e.gc.setForeground(fontColor); FontMetrics metrics = e.gc.getFontMetrics(); int height = metrics.getHeight(); int width = metrics.getAverageCharWidth(); - + int startLine = text.getLineAtOffset(start); int endLine = text.getLineAtOffset(end); - + for (int i = startLine; i <= endLine; i++) { - int styleStart = i==startLine ? start : text.getOffsetAtLine(i); - int styleEnd = i==endLine ? end : text.getOffsetAtLine(i+1); + int styleStart = i == startLine ? start : text.getOffsetAtLine(i); + int styleEnd = i == endLine ? end : text.getOffsetAtLine(i + 1); Point p1 = text.getLocationAtOffset(styleStart); - Point p2 = text.getLocationAtOffset(styleEnd-1); - e.gc.drawLine(p1.x, p1.y + height, p2.x + width, p2.y + height); + Point p2 = text.getLocationAtOffset(styleEnd - 1); + e.gc.drawLine(p1.x, p1.y + height, p2.x + width, p2.y + height); } e.gc.setForeground(color); } } } - - protected Cursor getHandCursor() { - if (handCursor == null) { - handCursor = new Cursor(ConsolePlugin.getStandardDisplay(), SWT.CURSOR_HAND); - } - return handCursor; - } - - protected Cursor getTextCursor() { - if (textCursor == null) { - textCursor = new Cursor(ConsolePlugin.getStandardDisplay(), SWT.CURSOR_IBEAM); - } - return textCursor; - } - - protected void linkEntered(IHyperlink link) { - Control control = getTextWidget(); - control.setRedraw(false); - if (hyperlink != null) { - linkExited(hyperlink); - } - hyperlink = link; - hyperlink.linkEntered(); - control.setCursor(getHandCursor()); - control.setRedraw(true); - control.redraw(); - control.addMouseListener(this); - } - - protected void linkExited(IHyperlink link) { - link.linkExited(); - hyperlink = null; - Control control = getTextWidget(); - control.setCursor(getTextCursor()); - control.redraw(); - control.removeMouseListener(this); - } - - /* (non-Javadoc) + + protected Cursor getHandCursor() { + if (handCursor == null) { + handCursor = new Cursor(ConsolePlugin.getStandardDisplay(), SWT.CURSOR_HAND); + } + return handCursor; + } + + protected Cursor getTextCursor() { + if (textCursor == null) { + textCursor = new Cursor(ConsolePlugin.getStandardDisplay(), SWT.CURSOR_IBEAM); + } + return textCursor; + } + + protected void linkEntered(IHyperlink link) { + Control control = getTextWidget(); + control.setRedraw(false); + if (hyperlink != null) { + linkExited(hyperlink); + } + hyperlink = link; + hyperlink.linkEntered(); + control.setCursor(getHandCursor()); + control.setRedraw(true); + control.redraw(); + control.addMouseListener(this); + } + + protected void linkExited(IHyperlink link) { + link.linkExited(); + hyperlink = null; + Control control = getTextWidget(); + control.setCursor(getTextCursor()); + control.redraw(); + control.removeMouseListener(this); + } + + /* + * (non-Javadoc) + * * @see org.eclipse.swt.events.MouseTrackListener#mouseEnter(org.eclipse.swt.events.MouseEvent) */ public void mouseEnter(MouseEvent e) { getTextWidget().addMouseMoveListener(this); } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.swt.events.MouseTrackListener#mouseExit(org.eclipse.swt.events.MouseEvent) */ public void mouseExit(MouseEvent e) { getTextWidget().removeMouseMoveListener(this); - if (hyperlink != null) { - linkExited(hyperlink); - } + if (hyperlink != null) { + linkExited(hyperlink); + } } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.swt.events.MouseTrackListener#mouseHover(org.eclipse.swt.events.MouseEvent) */ public void mouseHover(MouseEvent e) { } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.swt.events.MouseMoveListener#mouseMove(org.eclipse.swt.events.MouseEvent) */ - public void mouseMove(MouseEvent e) { - int offset = -1; - try { - Point p = new Point(e.x, e.y); - offset = getTextWidget().getOffsetAtLocation(p); - } catch (IllegalArgumentException ex) { - // out of the document range - } - updateLinks(offset); - } - - - /** - * The cursor has just be moved to the given offset, the mouse has - * hovered over the given offset. Update link rendering. - * - * @param offset - */ - protected void updateLinks(int offset) { - if (offset >= 0) { - IHyperlink link = getHyperlink(offset); - if (link != null) { - if (link.equals(hyperlink)) { - return; - } - linkEntered(link); - return; - } - } - if (hyperlink != null) { - linkExited(hyperlink); - } - } - - /** - * Returns the current value of <code>hyperlink</code> field - * @return The current value of <code>hyperlink</code> field - */ - public IHyperlink getHyperlink() { - return hyperlink; - } - - public IHyperlink getHyperlink(int offset) { - if (offset >= 0 && console != null) { - return console.getHyperlink(offset); - } - return null; - } - - /* (non-Javadoc) + public void mouseMove(MouseEvent e) { + int offset = -1; + try { + Point p = new Point(e.x, e.y); + offset = getTextWidget().getOffsetAtLocation(p); + } catch (IllegalArgumentException ex) { + // out of the document range + } + updateLinks(offset); + } + + /** + * The cursor has just be moved to the given offset, the mouse has hovered + * over the given offset. Update link rendering. + * + * @param offset + */ + protected void updateLinks(int offset) { + if (offset >= 0) { + IHyperlink link = getHyperlink(offset); + if (link != null) { + if (link.equals(hyperlink)) { + return; + } + linkEntered(link); + return; + } + } + if (hyperlink != null) { + linkExited(hyperlink); + } + } + + /** + * Returns the current value of <code>hyperlink</code> field + * + * @return The current value of <code>hyperlink</code> field + */ + public IHyperlink getHyperlink() { + return hyperlink; + } + + public IHyperlink getHyperlink(int offset) { + if (offset >= 0 && console != null) { + return console.getHyperlink(offset); + } + return null; + } + + /* + * (non-Javadoc) + * * @see org.eclipse.swt.events.MouseListener#mouseDoubleClick(org.eclipse.swt.events.MouseEvent) */ public void mouseDoubleClick(MouseEvent e) { } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.swt.events.MouseListener#mouseDown(org.eclipse.swt.events.MouseEvent) */ public void mouseDown(MouseEvent e) { } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.swt.events.MouseListener#mouseUp(org.eclipse.swt.events.MouseEvent) */ - public void mouseUp(MouseEvent e) { - if (hyperlink != null) { - String selection = getTextWidget().getSelectionText(); - if (selection.length() <= 0) { - if (e.button == 1) { - hyperlink.linkActivated(); - } - } - } - } - - /* (non-Javadoc) + public void mouseUp(MouseEvent e) { + if (hyperlink != null) { + String selection = getTextWidget().getSelectionText(); + if (selection.length() <= 0) { + if (e.button == 1) { + hyperlink.linkActivated(); + } + } + } + } + + /* + * (non-Javadoc) + * * @see org.eclipse.jface.text.TextViewer#createDocumentAdapter() */ protected IDocumentAdapter createDocumentAdapter() { - if(documentAdapter == null) { + if (documentAdapter == null) { documentAdapter = new ConsoleDocumentAdapter(getDocument(), consoleWidth = -1); } return documentAdapter; @@ -374,51 +333,29 @@ public class TextConsoleViewer extends TextViewer implements LineStyleListener, consoleWidth = width; if (documentAdapter != null) { documentAdapter.setWidth(consoleWidth); - + } } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.jface.text.TextViewer#handleDispose() */ protected void handleDispose() { super.handleDispose(); - + StyledText styledText = getTextWidget(); styledText.removeLineStyleListener(this); styledText.removeLineBackgroundListener(this); styledText.removeMouseTrackListener(this); styledText.removePaintListener(this); - + documentAdapter.dispose(); - IDocument document = getDocument(); - if (document != null) { - document.removeDocumentListener(documentListener); - } - handCursor=null; - textCursor=null; + + handCursor = null; + textCursor = null; hyperlink = null; - console=null; - } - - /** - * makes the associated text widget uneditable. - */ - public void setReadOnly() { - ConsolePlugin.getStandardDisplay().asyncExec(new Runnable() { - public void run() { - StyledText text = getTextWidget(); - if (text != null) { - text.setEditable(false); - } - } - }); - } - - /** - * @return false if text is editable - */ - public boolean isReadOnly() { - return !getTextWidget().getEditable(); + console = null; } } diff --git a/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/ConsolePatternMatcher.java b/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/ConsolePatternMatcher.java index e309db100..8145beef0 100644 --- a/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/ConsolePatternMatcher.java +++ b/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/ConsolePatternMatcher.java @@ -117,6 +117,9 @@ public class ConsolePatternMatcher implements IDocumentListener { startOfNextSearch = lengthToSearch; } } + if (startOfNextSearch < 0) { + startOfNextSearch = 0; + } if (startOfNextSearch < lengthToSearch) { if (reg.find(startOfNextSearch)) { endOfLastMatch = reg.end(); diff --git a/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/FollowHyperlinkAction.java b/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/FollowHyperlinkAction.java index 5b5345fcb..1c89b005e 100644 --- a/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/FollowHyperlinkAction.java +++ b/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/FollowHyperlinkAction.java @@ -12,6 +12,7 @@ package org.eclipse.ui.internal.console; import org.eclipse.jface.action.Action; import org.eclipse.ui.console.IHyperlink; +import org.eclipse.ui.console.TextConsoleViewer; /** * Follows a hyperlink in the console diff --git a/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/IOConsolePage.java b/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/IOConsolePage.java new file mode 100644 index 000000000..61561eafe --- /dev/null +++ b/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/IOConsolePage.java @@ -0,0 +1,142 @@ +/******************************************************************************* + * Copyright (c) 2000, 2004 IBM Corporation and others. All rights reserved. + * This program and the accompanying materials are made available under the + * terms of the Common Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: IBM Corporation - initial API and implementation + ******************************************************************************/ +package org.eclipse.ui.internal.console; + +import org.eclipse.jface.action.IMenuManager; +import org.eclipse.jface.action.IToolBarManager; +import org.eclipse.jface.util.IPropertyChangeListener; +import org.eclipse.jface.util.PropertyChangeEvent; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.ui.actions.ActionFactory; +import org.eclipse.ui.console.IConsoleConstants; +import org.eclipse.ui.console.IConsoleView; +import org.eclipse.ui.console.IOConsole; +import org.eclipse.ui.console.TextConsole; +import org.eclipse.ui.console.TextConsolePage; +import org.eclipse.ui.console.TextConsoleViewer; + +/** + * A page for an IOConsole + * + * @since 3.1 + * + */ +public class IOConsolePage extends TextConsolePage { + + private ScrollLockAction fScrollLockAction; + + private boolean fReadOnly; + + private IPropertyChangeListener fPropertyChangeListener; + + public IOConsolePage(TextConsole console, IConsoleView view) { + super(console, view); + + fPropertyChangeListener = new IPropertyChangeListener() { + public void propertyChange(PropertyChangeEvent event) { + String property = event.getProperty(); + if (property.equals(IConsoleConstants.P_AUTO_SCROLL)) { + IOConsole console = (IOConsole) getConsole(); + setAutoScroll(console.getAutoScroll()); + } else if (property.equals(IConsoleConstants.P_CONSOLE_OUTPUT_COMPLETE)) { + setReadOnly(); + } + } + }; + console.addPropertyChangeListener(fPropertyChangeListener); + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.part.IPage#createControl(org.eclipse.swt.widgets.Composite) + */ + public void createControl(Composite parent) { + super.createControl(parent); + if (fReadOnly) { + IOConsoleViewer viewer = (IOConsoleViewer) getViewer(); + viewer.setReadOnly(); + } + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.console.TextConsolePage#createViewer(org.eclipse.swt.widgets.Composite, + * org.eclipse.ui.console.TextConsole) + */ + protected TextConsoleViewer createViewer(Composite parent, TextConsole console) { + return new IOConsoleViewer(parent, console); + } + + public void setAutoScroll(boolean scroll) { + IOConsoleViewer viewer = (IOConsoleViewer) getViewer(); + if (viewer != null) { + viewer.setAutoScroll(scroll); + } + } + + /** + * inform the viewer that it's text widget should not be editable. + */ + public void setReadOnly() { + fReadOnly = true; + IOConsoleViewer viewer = (IOConsoleViewer) getViewer(); + if (viewer != null) { + viewer.setReadOnly(); + } + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.console.AbstractConsolePage#createActions() + */ + protected void createActions() { + super.createActions(); + fScrollLockAction = new ScrollLockAction((IOConsole) getConsole()); + setAutoScroll(!fScrollLockAction.isChecked()); + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.console.AbstractConsolePage#contextMenuAboutToShow(org.eclipse.jface.action.IMenuManager) + */ + protected void contextMenuAboutToShow(IMenuManager menuManager) { + super.contextMenuAboutToShow(menuManager); + menuManager.add(fScrollLockAction); + IOConsoleViewer viewer = (IOConsoleViewer) getViewer(); + if (!viewer.isReadOnly()) { + menuManager.remove(ActionFactory.CUT.getId()); + menuManager.remove(ActionFactory.PASTE.getId()); + } + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.console.TextConsolePage#configureToolBar(org.eclipse.jface.action.IToolBarManager) + */ + protected void configureToolBar(IToolBarManager mgr) { + super.configureToolBar(mgr); + mgr.appendToGroup(IConsoleConstants.OUTPUT_GROUP, fScrollLockAction); + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.part.IPage#dispose() + */ + public void dispose() { + fScrollLockAction = null; + getConsole().removePropertyChangeListener(fPropertyChangeListener); + super.dispose(); + } +} diff --git a/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/IOConsoleViewer.java b/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/IOConsoleViewer.java new file mode 100644 index 000000000..d33de9391 --- /dev/null +++ b/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/IOConsoleViewer.java @@ -0,0 +1,130 @@ +/******************************************************************************* + * Copyright (c) 2000, 2004 IBM Corporation and others. All rights reserved. + * This program and the accompanying materials are made available under the + * terms of the Common Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: IBM Corporation - initial API and implementation + ******************************************************************************/ +package org.eclipse.ui.internal.console; + +import org.eclipse.jface.text.BadLocationException; +import org.eclipse.jface.text.DocumentEvent; +import org.eclipse.jface.text.IDocument; +import org.eclipse.jface.text.IDocumentListener; +import org.eclipse.swt.custom.StyledText; +import org.eclipse.swt.events.VerifyEvent; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.ui.console.ConsolePlugin; +import org.eclipse.ui.console.IConsoleDocumentPartitioner; +import org.eclipse.ui.console.TextConsole; +import org.eclipse.ui.console.TextConsoleViewer; + +/** + * Viewer used to display an IOConsole + * + * @since 3.1 + */ +public class IOConsoleViewer extends TextConsoleViewer { + /** + * will always scroll with output if value is true. + */ + private boolean fAutoScroll = true; + + private IDocumentListener fDocumentListener; + + /* + * (non-Javadoc) + * + * @see org.eclipse.jface.text.TextViewer#handleDispose() + */ + protected void handleDispose() { + IDocument document = getDocument(); + if (document != null) { + document.removeDocumentListener(fDocumentListener); + } + super.handleDispose(); + } + + public IOConsoleViewer(Composite parent, TextConsole console) { + super(parent, console); + fDocumentListener = new IDocumentListener() { + public void documentAboutToBeChanged(DocumentEvent event) { + } + + public void documentChanged(DocumentEvent event) { + if (fAutoScroll) { + revealEndOfDocument(); + } + } + }; + getDocument().addDocumentListener(fDocumentListener); + } + + public boolean isAutoScroll() { + return fAutoScroll; + } + + public void setAutoScroll(boolean scroll) { + fAutoScroll = scroll; + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.jface.text.TextViewer#handleVerifyEvent(org.eclipse.swt.events.VerifyEvent) + */ + protected void handleVerifyEvent(VerifyEvent e) { + IDocument doc = getDocument(); + String[] legalLineDelimiters = doc.getLegalLineDelimiters(); + String eventString = e.text; + + IConsoleDocumentPartitioner partitioner = (IConsoleDocumentPartitioner) doc.getDocumentPartitioner(); + if (!partitioner.isReadOnly(e.start)) { + boolean isCarriageReturn = false; + for (int i = 0; i < legalLineDelimiters.length; i++) { + if (e.text.equals(legalLineDelimiters[i])) { + isCarriageReturn = true; + break; + } + } + + if (!isCarriageReturn) { + super.handleVerifyEvent(e); + return; + } + } + + int length = doc.getLength(); + if (e.start == length) { + super.handleVerifyEvent(e); + } else { + try { + doc.replace(length, 0, eventString); + } catch (BadLocationException e1) { + } + e.doit = false; + } + } + + /** + * makes the associated text widget uneditable. + */ + public void setReadOnly() { + ConsolePlugin.getStandardDisplay().asyncExec(new Runnable() { + public void run() { + StyledText text = getTextWidget(); + if (text != null) { + text.setEditable(false); + } + } + }); + } + + /** + * @return false if text is editable + */ + public boolean isReadOnly() { + return !getTextWidget().getEditable(); + } +} diff --git a/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/ScrollLockAction.java b/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/ScrollLockAction.java index 35ace66b4..ed42ad3e0 100644 --- a/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/ScrollLockAction.java +++ b/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/ScrollLockAction.java @@ -5,7 +5,7 @@ import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.ui.console.ConsolePlugin; -import org.eclipse.ui.console.TextConsole; +import org.eclipse.ui.console.IOConsole; /** * Toggles console auto-scroll @@ -15,9 +15,9 @@ import org.eclipse.ui.console.TextConsole; public class ScrollLockAction extends Action implements IPropertyChangeListener { private IPreferenceStore prefStore = ConsolePlugin.getDefault().getPreferenceStore(); - private TextConsole fConsole; + private IOConsole fConsole; - public ScrollLockAction(TextConsole console) { + public ScrollLockAction(IOConsole console) { super(ConsoleMessages.getString("ScrollLockAction.0")); //$NON-NLS-1$ fConsole = console; |