001: /*******************************************************************************
002: * Copyright (c) 2000, 2005 IBM Corporation and others.
003: * All rights reserved. This program and the accompanying materials
004: * are made available under the terms of the Eclipse Public License v1.0
005: * which accompanies this distribution, and is available at
006: * http://www.eclipse.org/legal/epl-v10.html
007: *
008: * Contributors:
009: * IBM Corporation - initial API and implementation
010: *******************************************************************************/package org.eclipse.ui.internal.console;
011:
012: import org.eclipse.jface.action.IMenuManager;
013: import org.eclipse.jface.action.IToolBarManager;
014: import org.eclipse.jface.util.IPropertyChangeListener;
015: import org.eclipse.jface.util.PropertyChangeEvent;
016: import org.eclipse.swt.widgets.Composite;
017: import org.eclipse.ui.actions.ActionFactory;
018: import org.eclipse.ui.console.IConsoleConstants;
019: import org.eclipse.ui.console.IConsoleView;
020: import org.eclipse.ui.console.TextConsole;
021: import org.eclipse.ui.console.TextConsolePage;
022: import org.eclipse.ui.console.TextConsoleViewer;
023:
024: /**
025: * A page for an IOConsole
026: *
027: * @since 3.1
028: *
029: */
030: public class IOConsolePage extends TextConsolePage {
031:
032: private ScrollLockAction fScrollLockAction;
033:
034: private boolean fReadOnly;
035:
036: private IPropertyChangeListener fPropertyChangeListener;
037:
038: public IOConsolePage(TextConsole console, IConsoleView view) {
039: super (console, view);
040:
041: fPropertyChangeListener = new IPropertyChangeListener() {
042: public void propertyChange(PropertyChangeEvent event) {
043: String property = event.getProperty();
044: if (property
045: .equals(IConsoleConstants.P_CONSOLE_OUTPUT_COMPLETE)) {
046: setReadOnly();
047: }
048: }
049: };
050: console.addPropertyChangeListener(fPropertyChangeListener);
051: }
052:
053: /*
054: * (non-Javadoc)
055: *
056: * @see org.eclipse.ui.part.IPage#createControl(org.eclipse.swt.widgets.Composite)
057: */
058: public void createControl(Composite parent) {
059: super .createControl(parent);
060: if (fReadOnly) {
061: IOConsoleViewer viewer = (IOConsoleViewer) getViewer();
062: viewer.setReadOnly();
063: }
064: }
065:
066: /*
067: * (non-Javadoc)
068: *
069: * @see org.eclipse.ui.console.TextConsolePage#createViewer(org.eclipse.swt.widgets.Composite,
070: * org.eclipse.ui.console.TextConsole)
071: */
072: protected TextConsoleViewer createViewer(Composite parent) {
073: return new IOConsoleViewer(parent, (TextConsole) getConsole());
074: }
075:
076: public void setAutoScroll(boolean scroll) {
077: IOConsoleViewer viewer = (IOConsoleViewer) getViewer();
078: if (viewer != null) {
079: viewer.setAutoScroll(scroll);
080: fScrollLockAction.setChecked(!scroll);
081: }
082: }
083:
084: /**
085: * Informs the viewer that it's text widget should not be editable.
086: */
087: public void setReadOnly() {
088: fReadOnly = true;
089: IOConsoleViewer viewer = (IOConsoleViewer) getViewer();
090: if (viewer != null) {
091: viewer.setReadOnly();
092: }
093: }
094:
095: /* (non-Javadoc)
096: * @see org.eclipse.ui.console.TextConsolePage#createActions()
097: */
098: protected void createActions() {
099: super .createActions();
100: fScrollLockAction = new ScrollLockAction(getConsoleView());
101: setAutoScroll(!fScrollLockAction.isChecked());
102: }
103:
104: /* (non-Javadoc)
105: * @see org.eclipse.ui.console.TextConsolePage#contextMenuAboutToShow(org.eclipse.jface.action.IMenuManager)
106: */
107: protected void contextMenuAboutToShow(IMenuManager menuManager) {
108: super .contextMenuAboutToShow(menuManager);
109: menuManager.add(fScrollLockAction);
110: IOConsoleViewer viewer = (IOConsoleViewer) getViewer();
111: if (!viewer.isReadOnly()) {
112: menuManager.remove(ActionFactory.CUT.getId());
113: menuManager.remove(ActionFactory.PASTE.getId());
114: }
115: }
116:
117: /*
118: * (non-Javadoc)
119: *
120: * @see org.eclipse.ui.console.TextConsolePage#configureToolBar(org.eclipse.jface.action.IToolBarManager)
121: */
122: protected void configureToolBar(IToolBarManager mgr) {
123: super .configureToolBar(mgr);
124: mgr.appendToGroup(IConsoleConstants.OUTPUT_GROUP,
125: fScrollLockAction);
126: }
127:
128: /*
129: * (non-Javadoc)
130: *
131: * @see org.eclipse.ui.part.IPage#dispose()
132: */
133: public void dispose() {
134: if (fScrollLockAction != null) {
135: fScrollLockAction.dispose();
136: fScrollLockAction = null;
137: }
138: getConsole().removePropertyChangeListener(
139: fPropertyChangeListener);
140: super.dispose();
141: }
142:
143: }
|