/******************************************************************************* * Copyright (c) 2015 Bruno Medeiros and other Contributors. * 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: * Bruno Medeiros - initial API and implementation *******************************************************************************/ package melnorme.lang.ide.ui.editor; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.CoreException; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.source.IAnnotationModel; import org.eclipse.swt.graphics.Image; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.editors.text.TextEditor; import melnorme.lang.ide.ui.EditorSettings_Actual; import melnorme.lang.ide.ui.utils.WorkbenchUtils; import melnorme.utilbox.core.CommonException; import melnorme.utilbox.misc.Location; import melnorme.utilbox.ownership.IDisposable; import melnorme.utilbox.ownership.IOwner; import melnorme.utilbox.ownership.OwnedObjects; /** * A few extensions to TextEditor for non-lang-specific functionality. */ public class TextEditorExt extends TextEditor { protected final IOwner owned = new OwnedObjects(); public TextEditorExt() { super(); } protected <T extends IDisposable> T addOwned(T disposable) { owned.bind(disposable); return disposable; } @Override public void dispose() { owned.disposeAll(); super.dispose(); } /* ----------------- ----------------- */ protected ExternalBreakpointWatcher breakpointWatcher; @Override protected void doSetInput(IEditorInput input) throws CoreException { super.doSetInput(input); owned.disposeOwned(breakpointWatcher); breakpointWatcher = null; if(input == null) { return; } IAnnotationModel annotationModel = getDocumentProvider().getAnnotationModel(input); IFile file = EditorUtils.getAssociatedFile(input); if(file != null || annotationModel == null) { return; // No need for external breakpoint watching } breakpointWatcher = new ExternalBreakpointWatcher(input, getDocument(), annotationModel); owned.bind(breakpointWatcher); } protected IDocument getDocument() { return getDocumentProvider().getDocument(getEditorInput()); } /* ----------------- ----------------- */ // public access to method @Override public void setStatusLineErrorMessage(String message) { super.setStatusLineErrorMessage(message); } // public access to method @Override public void setTitleImage(Image titleImage) { super.setTitleImage(titleImage); } /* ----------------- actions ----------------- */ protected LangEditorContextMenuContributor editorActionsManager; @Override protected void createActions() { super.createActions(); editorActionsManager = createActionsManager(); } protected LangEditorContextMenuContributor createActionsManager() { return EditorSettings_Actual.createCommandsContribHelper(getSite().getWorkbenchWindow()); } @Override protected void editorContextMenuAboutToShow(IMenuManager menu) { super.editorContextMenuAboutToShow(menu); editorContextMenuAboutToShow_extend(menu); } protected void editorContextMenuAboutToShow_extend(IMenuManager menu) { editorActionsManager.editorContextMenuAboutToShow(menu); } /* ----------------- Helpers ----------------- */ public boolean isActivePart() { return WorkbenchUtils.getActivePart(getSite()) == this; } public Location getInputLocation() throws CommonException { return EditorUtils.getLocationFromEditorInput(getEditorInput()); } }