Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Barnes2004-10-27 20:31:58 +0000
committerKevin Barnes2004-10-27 20:31:58 +0000
commit95e295a34b61c034d4d6b81d2651b21ebc133938 (patch)
tree6fea788e1d029db6f99ef69a8028f0b6c26939eb /org.eclipse.ui.console
parentd8c9661c895535921c41e46d729a29fde4ec2d7e (diff)
downloadeclipse.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')
-rw-r--r--org.eclipse.ui.console/src/org/eclipse/ui/console/IOConsole.java9
-rw-r--r--org.eclipse.ui.console/src/org/eclipse/ui/console/MessageConsole.java4
-rw-r--r--org.eclipse.ui.console/src/org/eclipse/ui/console/TextConsole.java4
-rw-r--r--org.eclipse.ui.console/src/org/eclipse/ui/console/TextConsolePage.java (renamed from org.eclipse.ui.console/src/org/eclipse/ui/internal/console/TextConsolePage.java)286
-rw-r--r--org.eclipse.ui.console/src/org/eclipse/ui/console/TextConsoleViewer.java (renamed from org.eclipse.ui.console/src/org/eclipse/ui/internal/console/TextConsoleViewer.java)431
-rw-r--r--org.eclipse.ui.console/src/org/eclipse/ui/internal/console/ConsolePatternMatcher.java3
-rw-r--r--org.eclipse.ui.console/src/org/eclipse/ui/internal/console/FollowHyperlinkAction.java1
-rw-r--r--org.eclipse.ui.console/src/org/eclipse/ui/internal/console/IOConsolePage.java142
-rw-r--r--org.eclipse.ui.console/src/org/eclipse/ui/internal/console/IOConsoleViewer.java130
-rw-r--r--org.eclipse.ui.console/src/org/eclipse/ui/internal/console/ScrollLockAction.java6
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;

Back to the top