diff options
Diffstat (limited to 'bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeSourceViewer.java')
-rw-r--r-- | bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeSourceViewer.java | 1074 |
1 files changed, 0 insertions, 1074 deletions
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeSourceViewer.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeSourceViewer.java deleted file mode 100644 index 0f823fde2..000000000 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeSourceViewer.java +++ /dev/null @@ -1,1074 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2009 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - * Max Weninger (max.weninger@windriver.com) - Bug 131895 [Edit] Undo in compare - * Max Weninger (max.weninger@windriver.com) - Bug 72936 [Viewers] Show line numbers in comparision - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.ResourceBundle; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.custom.StyledText; -import org.eclipse.swt.graphics.Color; -import org.eclipse.swt.graphics.Font; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.graphics.RGB; -import org.eclipse.swt.graphics.Rectangle; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Display; - -import org.eclipse.core.commands.Command; -import org.eclipse.core.commands.IHandler; -import org.eclipse.core.commands.operations.IOperationHistory; -import org.eclipse.core.commands.operations.IOperationHistoryListener; -import org.eclipse.core.commands.operations.IUndoContext; -import org.eclipse.core.commands.operations.OperationHistoryEvent; - -import org.eclipse.core.runtime.Assert; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IAdaptable; -import org.eclipse.core.runtime.IProgressMonitor; - -import org.eclipse.jface.action.GroupMarker; -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.action.IMenuListener; -import org.eclipse.jface.action.IMenuManager; -import org.eclipse.jface.action.MenuManager; -import org.eclipse.jface.action.Separator; -import org.eclipse.jface.preference.IPreferenceStore; -import org.eclipse.jface.preference.PreferenceConverter; -import org.eclipse.jface.util.IPropertyChangeListener; -import org.eclipse.jface.util.PropertyChangeEvent; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.ISelectionChangedListener; -import org.eclipse.jface.viewers.ISelectionProvider; -import org.eclipse.jface.viewers.SelectionChangedEvent; - -import org.eclipse.jface.text.BadLocationException; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.IRegion; -import org.eclipse.jface.text.ITextListener; -import org.eclipse.jface.text.ITextOperationTarget; -import org.eclipse.jface.text.ITextSelection; -import org.eclipse.jface.text.ITextViewer; -import org.eclipse.jface.text.ITextViewerExtension5; -import org.eclipse.jface.text.IUndoManager; -import org.eclipse.jface.text.IUndoManagerExtension; -import org.eclipse.jface.text.Position; -import org.eclipse.jface.text.Region; -import org.eclipse.jface.text.TextEvent; -import org.eclipse.jface.text.source.CompositeRuler; -import org.eclipse.jface.text.source.IAnnotationModel; -import org.eclipse.jface.text.source.ISharedTextColors; -import org.eclipse.jface.text.source.IVerticalRuler; -import org.eclipse.jface.text.source.LineNumberRulerColumn; -import org.eclipse.jface.text.source.SourceViewer; -import org.eclipse.jface.text.source.SourceViewerConfiguration; - -import org.eclipse.ui.IEditorInput; -import org.eclipse.ui.IEditorPart; -import org.eclipse.ui.IEditorSite; -import org.eclipse.ui.IPropertyListener; -import org.eclipse.ui.IWorkbenchActionConstants; -import org.eclipse.ui.IWorkbenchCommandConstants; -import org.eclipse.ui.IWorkbenchPartSite; -import org.eclipse.ui.PartInitException; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.commands.ICommandService; -import org.eclipse.ui.menus.CommandContributionItem; -import org.eclipse.ui.menus.CommandContributionItemParameter; - -import org.eclipse.ui.texteditor.AbstractDecoratedTextEditorPreferenceConstants; -import org.eclipse.ui.texteditor.ChangeEncodingAction; -import org.eclipse.ui.texteditor.FindReplaceAction; -import org.eclipse.ui.texteditor.IDocumentProvider; -import org.eclipse.ui.texteditor.IElementStateListener; -import org.eclipse.ui.texteditor.ITextEditor; - -import org.eclipse.ui.editors.text.EditorsUI; - -import org.eclipse.compare.ICompareContainer; - -/** - * Wraps a JFace SourceViewer and add some convenience methods. - */ -public class MergeSourceViewer implements ISelectionChangedListener, - ITextListener, IMenuListener, IOperationHistoryListener, IAdaptable { - - public static final String UNDO_ID= "undo"; //$NON-NLS-1$ - public static final String REDO_ID= "redo"; //$NON-NLS-1$ - public static final String CUT_ID= "cut"; //$NON-NLS-1$ - public static final String COPY_ID= "copy"; //$NON-NLS-1$ - public static final String PASTE_ID= "paste"; //$NON-NLS-1$ - public static final String DELETE_ID= "delete"; //$NON-NLS-1$ - public static final String SELECT_ALL_ID= "selectAll"; //$NON-NLS-1$ - public static final String FIND_ID= "find"; //$NON-NLS-1$ - public static final String GOTO_LINE_ID= "gotoLine"; //$NON-NLS-1$ - public static final String CHANGE_ENCODING_ID= "changeEncoding"; //$NON-NLS-1$ - - class TextOperationAction extends MergeViewerAction { - - private int fOperationCode; - - TextOperationAction(int operationCode, boolean mutable, boolean selection, boolean content) { - this(operationCode, null, mutable, selection, content); - } - - public TextOperationAction(int operationCode, String actionDefinitionId, boolean mutable, boolean selection, boolean content) { - super(mutable, selection, content); - if (actionDefinitionId != null) - setActionDefinitionId(actionDefinitionId); - fOperationCode= operationCode; - update(); - } - - public void run() { - if (isEnabled()) - getSourceViewer().doOperation(fOperationCode); - } - - public boolean isEnabled() { - return fOperationCode != -1 && getSourceViewer().canDoOperation(fOperationCode); - } - - public void update() { - this.setEnabled(isEnabled()); - } - } - - /** - * TODO: The only purpose of this class is to provide "Go to Line" action in - * TextMergeViewer. The adapter should be removed as soon as we implement - * embedded TextEditor in a similar way JDT has it done for Java compare. - */ - class TextEditorAdapter implements ITextEditor { - - public void close(boolean save) { - // defining interface method - } - - public void doRevertToSaved() { - // defining interface method - } - - public IAction getAction(String actionId) { - // defining interface method - return null; - } - - public IDocumentProvider getDocumentProvider() { - return new IDocumentProvider(){ - - public void aboutToChange(Object element) { - // defining interface method - } - - public void addElementStateListener( - IElementStateListener listener) { - // defining interface method - } - - public boolean canSaveDocument(Object element) { - // defining interface method - return false; - } - - public void changed(Object element) { - // defining interface method - } - - public void connect(Object element) throws CoreException { - // defining interface method - } - - public void disconnect(Object element) { - // defining interface method - } - - public IAnnotationModel getAnnotationModel(Object element) { - // defining interface method - return null; - } - - public IDocument getDocument(Object element) { - return MergeSourceViewer.this.getSourceViewer().getDocument(); - } - - public long getModificationStamp(Object element) { - // defining interface method - return 0; - } - - public long getSynchronizationStamp(Object element) { - // defining interface method - return 0; - } - - public boolean isDeleted(Object element) { - // defining interface method - return false; - } - - public boolean mustSaveDocument(Object element) { - // defining interface method - return false; - } - - public void removeElementStateListener( - IElementStateListener listener) { - // defining interface method - } - - public void resetDocument(Object element) throws CoreException { - // defining interface method - } - - public void saveDocument(IProgressMonitor monitor, - Object element, IDocument document, boolean overwrite) - throws CoreException { - // defining interface method - }}; - } - - public IRegion getHighlightRange() { - // defining interface method - return null; - } - - public ISelectionProvider getSelectionProvider() { - return MergeSourceViewer.this.getSourceViewer().getSelectionProvider(); - } - - public boolean isEditable() { - // defining interface method - return false; - } - - public void removeActionActivationCode(String actionId) { - // defining interface method - } - - public void resetHighlightRange() { - // defining interface method - } - - public void selectAndReveal(int start, int length) { - selectAndReveal(start, length, start, length); - } - - /* - * @see org.eclipse.ui.texteditor.AbstractTextEditor#selectAndReveal(int, int, int, int) - */ - private void selectAndReveal(int selectionStart, int selectionLength, int revealStart, int revealLength) { - - ISelection selection = getSelectionProvider().getSelection(); - if (selection instanceof ITextSelection) { - ITextSelection textSelection = (ITextSelection) selection; - if (textSelection.getOffset() != 0 || textSelection.getLength() != 0) - markInNavigationHistory(); - } - - StyledText widget= MergeSourceViewer.this.getSourceViewer().getTextWidget(); - widget.setRedraw(false); - { - adjustHighlightRange(revealStart, revealLength); - MergeSourceViewer.this.getSourceViewer().revealRange(revealStart, revealLength); - - MergeSourceViewer.this.getSourceViewer().setSelectedRange(selectionStart, selectionLength); - - markInNavigationHistory(); - } - widget.setRedraw(true); - } - - /* - * @see org.eclipse.ui.texteditor.AbstractTextEditor#markInNavigationHistory() - */ - private void markInNavigationHistory() { - getSite().getPage().getNavigationHistory().markLocation(this); - } - - /* - * @see org.eclipse.ui.texteditor.AbstractTextEditor#adjustHighlightRange(int, int) - */ - private void adjustHighlightRange(int offset, int length) { - - if (MergeSourceViewer.this instanceof ITextViewerExtension5) { - ITextViewerExtension5 extension= (ITextViewerExtension5) MergeSourceViewer.this; - extension.exposeModelRange(new Region(offset, length)); - } else if (!isVisible(MergeSourceViewer.this.getSourceViewer(), offset, length)) { - MergeSourceViewer.this.getSourceViewer().resetVisibleRegion(); - } - } - - /* - * @see org.eclipse.ui.texteditor.AbstractTextEditor#isVisible(ISourceViewer, int, int) - */ - private /*static*/ final boolean isVisible(ITextViewer viewer, int offset, int length) { - if (viewer instanceof ITextViewerExtension5) { - ITextViewerExtension5 extension= (ITextViewerExtension5) viewer; - IRegion overlap= extension.modelRange2WidgetRange(new Region(offset, length)); - return overlap != null; - } - return viewer.overlapsWithVisibleRegion(offset, length); - } - - public void setAction(String actionID, IAction action) { - // defining interface method - } - - public void setActionActivationCode(String actionId, - char activationCharacter, int activationKeyCode, - int activationStateMask) { - // defining interface method - } - - public void setHighlightRange(int offset, int length, boolean moveCursor) { - // defining interface method - } - - public void showHighlightRangeOnly(boolean showHighlightRangeOnly) { - // defining interface method - } - - public boolean showsHighlightRangeOnly() { - // defining interface method - return false; - } - - public IEditorInput getEditorInput() { - if (MergeSourceViewer.this.fContainer.getWorkbenchPart() instanceof IEditorPart) - return ((IEditorPart) MergeSourceViewer.this.fContainer.getWorkbenchPart()).getEditorInput(); - return null; - } - - public IEditorSite getEditorSite() { - // defining interface method - return null; - } - - public void init(IEditorSite site, IEditorInput input) - throws PartInitException { - // defining interface method - } - - public void addPropertyListener(IPropertyListener listener) { - // defining interface method - } - - public void createPartControl(Composite parent) { - // defining interface method - } - - public void dispose() { - // defining interface method - } - - public IWorkbenchPartSite getSite() { - return MergeSourceViewer.this.fContainer.getWorkbenchPart().getSite(); - } - - public String getTitle() { - // defining interface method - return null; - } - - public Image getTitleImage() { - // defining interface method - return null; - } - - public String getTitleToolTip() { - // defining interface method - return null; - } - - public void removePropertyListener(IPropertyListener listener) { - // defining interface method - } - - public void setFocus() { - // defining interface method - } - - public Object getAdapter(Class adapter) { - // defining interface method - return null; - } - - public void doSave(IProgressMonitor monitor) { - // defining interface method - } - - public void doSaveAs() { - // defining interface method - } - - public boolean isDirty() { - // defining interface method - return false; - } - - public boolean isSaveAsAllowed() { - // defining interface method - return false; - } - - public boolean isSaveOnCloseNeeded() { - // defining interface method - return false; - } - } - - private ResourceBundle fResourceBundle; - private ICompareContainer fContainer; - private SourceViewer fSourceViewer; - private Position fRegion; - private boolean fEnabled= true; - private HashMap fActions= new HashMap(); - private IDocument fRememberedDocument; - - private boolean fAddSaveAction= true; - private boolean isConfigured = false; - - // line number ruler support - private IPropertyChangeListener fPreferenceChangeListener; - private boolean fShowLineNumber=false; - private LineNumberRulerColumn fLineNumberColumn; - private List textActions = new ArrayList(); - private CommandContributionItem fSaveContributionItem; - - public MergeSourceViewer(SourceViewer sourceViewer, ResourceBundle bundle, ICompareContainer container) { - Assert.isNotNull(sourceViewer); - fSourceViewer= sourceViewer; - fResourceBundle= bundle; - fContainer = container; - - MenuManager menu= new MenuManager(); - menu.setRemoveAllWhenShown(true); - menu.addMenuListener(this); - StyledText te= getSourceViewer().getTextWidget(); - te.setMenu(menu.createContextMenu(te)); - fContainer.registerContextMenu(menu, getSourceViewer()); - - // for listening to editor show/hide line number preference value - fPreferenceChangeListener= new IPropertyChangeListener() { - public void propertyChange(PropertyChangeEvent event) { - MergeSourceViewer.this.handlePropertyChangeEvent(event); - } - }; - EditorsUI.getPreferenceStore().addPropertyChangeListener(fPreferenceChangeListener); - fShowLineNumber= EditorsUI.getPreferenceStore().getBoolean(AbstractDecoratedTextEditorPreferenceConstants.EDITOR_LINE_NUMBER_RULER); - if(fShowLineNumber){ - updateLineNumberRuler(); - } - - IOperationHistory history = getHistory(); - if (history != null) - history.addOperationHistoryListener(this); - - // don't add save when in a dialog, IWorkbenchPart is null in dialog containers - fAddSaveAction = fContainer.getWorkbenchPart() != null; - } - - public void rememberDocument(IDocument doc) { -// if (doc != null && fRememberedDocument != null) { -// System.err.println("MergeSourceViewer.rememberDocument: fRememberedDocument != null: shouldn't happen"); //$NON-NLS-1$ -// } - fRememberedDocument= doc; - } - - public IDocument getRememberedDocument() { - return fRememberedDocument; - } - - public void hideSaveAction() { - fAddSaveAction= false; - } - - public void setFont(Font font) { - StyledText te= getSourceViewer().getTextWidget(); - if (te != null) - te.setFont(font); - if (fLineNumberColumn != null) { - fLineNumberColumn.setFont(font); - layoutViewer(); - } - } - - public void setBackgroundColor(Color color) { - StyledText te= getSourceViewer().getTextWidget(); - if (te != null) - te.setBackground(color); - if (fLineNumberColumn != null) - fLineNumberColumn.setBackground(color); - } - - public void setForegroundColor(Color color) { - StyledText te= getSourceViewer().getTextWidget(); - if (te != null) - te.setForeground(color); - } - - public void setEnabled(boolean enabled) { - if (enabled != fEnabled) { - fEnabled= enabled; - StyledText c= getSourceViewer().getTextWidget(); - if (c != null) { - c.setEnabled(enabled); - Display d= c.getDisplay(); - c.setBackground(enabled ? d.getSystemColor(SWT.COLOR_LIST_BACKGROUND) : null); - } - } - } - - public boolean getEnabled() { - return fEnabled; - } - - public void setRegion(Position region) { - fRegion= region; - } - - public Position getRegion() { - return fRegion; - } - - public boolean isControlOkToUse() { - StyledText t= getSourceViewer().getTextWidget(); - return t != null && !t.isDisposed(); - } - - public void setSelection(Position position) { - if (position != null) - getSourceViewer().setSelectedRange(position.getOffset(), position.getLength()); - } - - public void setLineBackground(Position position, Color c) { - StyledText t= getSourceViewer().getTextWidget(); - if (t != null && !t.isDisposed()) { - Point region= new Point(0, 0); - getLineRange(position, region); - - region.x-= getDocumentRegionOffset(); - - try { - t.setLineBackground(region.x, region.y, c); - } catch (IllegalArgumentException ex) { - // silently ignored - } - } - } - - public void resetLineBackground() { - StyledText t= getSourceViewer().getTextWidget(); - if (t != null && !t.isDisposed()) { - int lines= getLineCount(); - t.setLineBackground(0, lines, null); - } - } - - /* - * Returns number of lines in document region. - */ - public int getLineCount() { - IRegion region= getSourceViewer().getVisibleRegion(); - - int length= region.getLength(); - if (length == 0) - return 0; - - IDocument doc= getSourceViewer().getDocument(); - int startLine= 0; - int endLine= 0; - - int start= region.getOffset(); - try { - startLine= doc.getLineOfOffset(start); - } catch(BadLocationException ex) { - // silently ignored - } - try { - endLine= doc.getLineOfOffset(start+length); - } catch(BadLocationException ex) { - // silently ignored - } - - return endLine-startLine+1; - } - - public int getViewportLines() { - StyledText te= getSourceViewer().getTextWidget(); - Rectangle clArea= te.getClientArea(); - if (!clArea.isEmpty()) - return clArea.height / te.getLineHeight(); - return 0; - } - - public int getViewportHeight() { - StyledText te= getSourceViewer().getTextWidget(); - Rectangle clArea= te.getClientArea(); - if (!clArea.isEmpty()) - return clArea.height; - return 0; - } - - /* - * Returns lines - */ - public int getDocumentRegionOffset() { - int start= getSourceViewer().getVisibleRegion().getOffset(); - IDocument doc= getSourceViewer().getDocument(); - if (doc != null) { - try { - return doc.getLineOfOffset(start); - } catch(BadLocationException ex) { - // silently ignored - } - } - return 0; - } - - public int getVerticalScrollOffset() { - StyledText st= getSourceViewer().getTextWidget(); - int lineHeight= st.getLineHeight(); - return getSourceViewer().getTopInset() - ((getDocumentRegionOffset()*lineHeight) + st.getTopPixel()); - } - - /* - * Returns the start line and the number of lines which correspond to the given position. - * Starting line number is 0 based. - */ - public Point getLineRange(Position p, Point region) { - - IDocument doc= getSourceViewer().getDocument(); - - if (p == null || doc == null) { - region.x= 0; - region.y= 0; - return region; - } - - int start= p.getOffset(); - int length= p.getLength(); - - int startLine= 0; - try { - startLine= doc.getLineOfOffset(start); - } catch (BadLocationException e) { - // silently ignored - } - - int lineCount= 0; - - if (length == 0) { -// // if range length is 0 and if range starts a new line -// try { -// if (start == doc.getLineStartOffset(startLine)) { -// lines--; -// } -// } catch (BadLocationException e) { -// lines--; -// } - - } else { - int endLine= 0; - try { - endLine= doc.getLineOfOffset(start + length - 1); // why -1? - } catch (BadLocationException e) { - // silently ignored - } - lineCount= endLine-startLine+1; - } - - region.x= startLine; - region.y= lineCount; - return region; - } - - /* - * Scroll TextPart to the given line. - */ - public void vscroll(int line) { - - int srcViewSize= getLineCount(); - int srcExtentSize= getViewportLines(); - - if (srcViewSize > srcExtentSize) { - - if (line < 0) - line= 0; - - int cp= getSourceViewer().getTopIndex(); - if (cp != line) - getSourceViewer().setTopIndex(line + getDocumentRegionOffset()); - } - } - - public void addAction(String actionId, MergeViewerAction action) { - fActions.put(actionId, action); - } - - public IAction getAction(String actionId) { - IAction action= (IAction) fActions.get(actionId); - if (action == null) { - action= createAction(actionId); - if (action == null) - return null; - if (action instanceof MergeViewerAction) { - MergeViewerAction mva = (MergeViewerAction) action; - if (mva.isContentDependent()) - getSourceViewer().addTextListener(this); - if (mva.isSelectionDependent()) - getSourceViewer().addSelectionChangedListener(this); - - Utilities.initAction(action, fResourceBundle, "action." + actionId + "."); //$NON-NLS-1$ //$NON-NLS-2$ - } - addAction(actionId, action); - - } - if (action instanceof MergeViewerAction) { - MergeViewerAction mva = (MergeViewerAction) action; - if (mva.isEditableDependent() && !getSourceViewer().isEditable()) - return null; - } - return action; - } - - protected IAction createAction(String actionId) { - if (UNDO_ID.equals(actionId)) - return new TextOperationAction(ITextOperationTarget.UNDO, IWorkbenchCommandConstants.EDIT_UNDO, true, false, true); - if (REDO_ID.equals(actionId)) - return new TextOperationAction(ITextOperationTarget.REDO, IWorkbenchCommandConstants.EDIT_REDO, true, false, true); - if (CUT_ID.equals(actionId)) - return new TextOperationAction(ITextOperationTarget.CUT, IWorkbenchCommandConstants.EDIT_CUT, true, true, false); - if (COPY_ID.equals(actionId)) - return new TextOperationAction(ITextOperationTarget.COPY, IWorkbenchCommandConstants.EDIT_COPY, false, true, false); - if (PASTE_ID.equals(actionId)) - return new TextOperationAction(ITextOperationTarget.PASTE, IWorkbenchCommandConstants.EDIT_PASTE, true, false, false); - if (DELETE_ID.equals(actionId)) - return new TextOperationAction(ITextOperationTarget.DELETE, IWorkbenchCommandConstants.EDIT_DELETE, true, false, false); - if (SELECT_ALL_ID.equals(actionId)) - return new TextOperationAction(ITextOperationTarget.SELECT_ALL, IWorkbenchCommandConstants.EDIT_SELECT_ALL, false, false, false); - return null; - } - - public void selectionChanged(SelectionChangedEvent event) { - Iterator e= fActions.values().iterator(); - while (e.hasNext()) { - Object next = e.next(); - if (next instanceof MergeViewerAction) { - MergeViewerAction action = (MergeViewerAction) next; - if (action.isSelectionDependent()) - action.update(); - } - } - } - - public void textChanged(TextEvent event) { - updateContentDependantActions(); - } - - void updateContentDependantActions() { - Iterator e= fActions.values().iterator(); - while (e.hasNext()) { - Object next = e.next(); - if (next instanceof MergeViewerAction) { - MergeViewerAction action = (MergeViewerAction) next; - if (action.isContentDependent()) - action.update(); - } - } - } - - /* - * Allows the viewer to add menus and/or tools to the context menu. - */ - public void menuAboutToShow(IMenuManager menu) { - - menu.add(new Separator("undo")); //$NON-NLS-1$ - addMenu(menu, UNDO_ID); - addMenu(menu, REDO_ID); - menu.add(new GroupMarker("save")); //$NON-NLS-1$ - if (fAddSaveAction) - addSave(menu); - menu.add(new Separator("file")); //$NON-NLS-1$ - - menu.add(new Separator("ccp")); //$NON-NLS-1$ - addMenu(menu, CUT_ID); - addMenu(menu, COPY_ID); - addMenu(menu, PASTE_ID); - addMenu(menu, DELETE_ID); - addMenu(menu, SELECT_ALL_ID); - - menu.add(new Separator("edit")); //$NON-NLS-1$ - addMenu(menu, CHANGE_ENCODING_ID); - menu.add(new Separator("find")); //$NON-NLS-1$ - addMenu(menu, FIND_ID); - - menu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); - - menu.add(new Separator("text")); //$NON-NLS-1$ - for (Iterator iterator = textActions.iterator(); iterator.hasNext();) { - IAction action = (IAction) iterator.next(); - menu.add(action); - } - - menu.add(new Separator("rest")); //$NON-NLS-1$ - - // update all actions - // to get undo redo right - updateActions(); - } - - private void addMenu(IMenuManager menu, String actionId) { - IAction action= getAction(actionId); - if (action != null) - menu.add(action); - } - - private void addSave(IMenuManager menu) { - ICommandService commandService = (ICommandService) fContainer.getWorkbenchPart().getSite().getService(ICommandService.class); - final Command command= commandService.getCommand(IWorkbenchCommandConstants.FILE_SAVE); - - final IHandler handler = command.getHandler(); - if (handler != null) { - if (fSaveContributionItem == null) { - fSaveContributionItem = new CommandContributionItem( - new CommandContributionItemParameter(fContainer - .getWorkbenchPart().getSite(), null, command - .getId(), CommandContributionItem.STYLE_PUSH)); - } - // save is an editable dependent action, ie add only when edit - // is possible - if (handler.isHandled() && getSourceViewer().isEditable()) - menu.add(fSaveContributionItem); - } - } - - /** - * The viewer is no longer part of the UI, it's a wrapper only. The disposal - * doesn't take place while releasing the editor pane's children. The method - * have to be called it manually. The wrapped viewer is disposed as a - * regular viewer, while disposing the UI. - */ - public void dispose() { - getSourceViewer().removeTextListener(this); - getSourceViewer().removeSelectionChangedListener(this); - EditorsUI.getPreferenceStore().removePropertyChangeListener(fPreferenceChangeListener); - - IOperationHistory history = getHistory(); - if (history != null) - history.removeOperationHistoryListener(this); - } - - /** - * update all actions independent of their type - * - */ - public void updateActions() { - Iterator e= fActions.values().iterator(); - while (e.hasNext()) { - Object next = e.next(); - if (next instanceof MergeViewerAction) { - MergeViewerAction action = (MergeViewerAction) next; - action.update(); - } else if (next instanceof FindReplaceAction) { - FindReplaceAction action = (FindReplaceAction) next; - action.update(); - } else if (next instanceof ChangeEncodingAction) { - ChangeEncodingAction action = (ChangeEncodingAction) next; - action.update(); - } - } - } - - public void configure(SourceViewerConfiguration configuration) { - if (isConfigured ) - getSourceViewer().unconfigure(); - isConfigured = true; - getSourceViewer().configure(configuration); - } - - /** - * specific implementation to support a vertical ruler - * @param x - * @param y - * @param width - * @param height - */ - public void setBounds (int x, int y, int width, int height) { - if(getSourceViewer().getControl() instanceof Composite){ - ((Composite)getSourceViewer().getControl()).setBounds(x, y, width, height); - } else { - getSourceViewer().getTextWidget().setBounds(x, y, width, height); - } - } - - /** - * handle show/hide line numbers from editor preferences - * @param event - */ - protected void handlePropertyChangeEvent(PropertyChangeEvent event) { - - String key= event.getProperty(); - - if(key.equals(AbstractDecoratedTextEditorPreferenceConstants.EDITOR_LINE_NUMBER_RULER)){ - boolean b= EditorsUI.getPreferenceStore().getBoolean(AbstractDecoratedTextEditorPreferenceConstants.EDITOR_LINE_NUMBER_RULER); - if (b != fShowLineNumber){ - toggleLineNumberRuler(); - } - } else if (key.equals(AbstractDecoratedTextEditorPreferenceConstants.EDITOR_LINE_NUMBER_RULER_COLOR)) { - updateLineNumberColumnPresentation(true); - } - } - - /** - * Hides or shows line number ruler column based of preference setting - */ - private void updateLineNumberRuler() - { - IVerticalRuler v= getVerticalRuler(getSourceViewer()); - if (v!=null && v instanceof CompositeRuler) { - CompositeRuler c= (CompositeRuler) v; - - if(!fShowLineNumber){ - if(fLineNumberColumn!=null){ - c.removeDecorator(fLineNumberColumn); - } - } else { - if(fLineNumberColumn==null){ - fLineNumberColumn = new LineNumberRulerColumn(); - updateLineNumberColumnPresentation(false); - } - c.addDecorator(0, fLineNumberColumn); - } - } - } - - /** - * Calls the <code>getVerticalRuler</code> method of the given viewer. - * - * TODO: don't use reflection - * - * @param viewer the viewer to call <code>getVerticalRuler</code> on - */ - private IVerticalRuler getVerticalRuler(SourceViewer viewer) { - try { - Method method= SourceViewer.class.getDeclaredMethod("getVerticalRuler", new Class[] {}); //$NON-NLS-1$ - method.setAccessible(true); - return (IVerticalRuler) method.invoke(viewer, new Object[] {}); - } catch (Throwable e) { - CompareUIPlugin.log(e); - } - return null; - } - - private void updateLineNumberColumnPresentation(boolean refresh) { - if (fLineNumberColumn == null) - return; - RGB rgb= getColorFromStore(EditorsUI.getPreferenceStore(), AbstractDecoratedTextEditorPreferenceConstants.EDITOR_LINE_NUMBER_RULER_COLOR); - if (rgb == null) - rgb= new RGB(0, 0, 0); - ISharedTextColors sharedColors= getSharedColors(); - fLineNumberColumn.setForeground(sharedColors.getColor(rgb)); - if (refresh) { - fLineNumberColumn.redraw(); - } - } - - private void layoutViewer() { - Control parent= getSourceViewer().getControl(); - if (parent instanceof Composite && !parent.isDisposed()) - ((Composite) parent).layout(true); - } - - private ISharedTextColors getSharedColors() { - return EditorsUI.getSharedTextColors(); - } - - private RGB getColorFromStore(IPreferenceStore store, String key) { - RGB rgb= null; - if (store.contains(key)) { - if (store.isDefault(key)) - rgb= PreferenceConverter.getDefaultColor(store, key); - else - rgb= PreferenceConverter.getColor(store, key); - } - return rgb; - } - - /** - * Toggles line number ruler column. - */ - private void toggleLineNumberRuler() - { - fShowLineNumber=!fShowLineNumber; - - updateLineNumberRuler(); - } - - public void addTextAction(IAction textEditorPropertyAction) { - textActions.add(textEditorPropertyAction); - } - - public void addAction(String id, IAction action) { - fActions.put(id, action); - } - - private IOperationHistory getHistory() { - if (PlatformUI.getWorkbench() == null) { - return null; - } - return PlatformUI.getWorkbench().getOperationSupport() - .getOperationHistory(); - } - - public void historyNotification(OperationHistoryEvent event) { - // This method updates the enablement of all content operations - // when the undo history changes. It could be localized to UNDO and REDO. - IUndoContext context = getUndoContext(); - if (context != null && event.getOperation().hasContext(context)) { - Display.getDefault().asyncExec(new Runnable() { - public void run() { - updateContentDependantActions(); - } - }); - } - } - - private IUndoContext getUndoContext() { - IUndoManager undoManager = getSourceViewer().getUndoManager(); - if (undoManager instanceof IUndoManagerExtension) - return ((IUndoManagerExtension)undoManager).getUndoContext(); - return null; - } - - /** - * @return the wrapped viewer - */ - public SourceViewer getSourceViewer() { - return fSourceViewer; - } - - public Object getAdapter(Class adapter) { - if (adapter == ITextEditor.class) { - return new TextEditorAdapter(); - } - return null; - } -} |