/* * Copyright (c) 2012 European Synchrotron Radiation Facility, * Diamond Light Source Ltd. * * 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 */ package fable.framework.ui.editors; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceChangeEvent; import org.eclipse.core.resources.IResourceChangeListener; import org.eclipse.core.resources.IResourceDelta; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IFileEditorInput; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.editors.text.TextEditor; import org.eclipse.ui.part.FileEditorInput; /** * Use this editor to display keys and values in different colors * * @author SUCHET * */ public class GeneralInputEditor extends TextEditor implements IResourceChangeListener { /** The ID of this editor as defined in plugin.xml */ public static String ID = "fable.framework.ui.editors.GeneralInputEditor"; public GeneralInputEditor() { super(); setSourceViewerConfiguration(new KeyAndValueEditorConfiguration()); ResourcesPlugin.getWorkspace().addResourceChangeListener(this); } @Override protected void doSetInput(IEditorInput input) throws CoreException { // provider if (input instanceof IFileEditorInput) { setDocumentProvider(new KeyAndValueFileDocumentProvider()); } super.doSetInput(input); } @Override public void dispose() { ResourcesPlugin.getWorkspace().removeResourceChangeListener(this); super.dispose(); } @Override public void resourceChanged(final IResourceChangeEvent event) { if (event.getType() == IResourceChangeEvent.PRE_CLOSE) { Display.getDefault().asyncExec(new Runnable() { public void run() { IWorkbenchPage[] pages = getSite().getWorkbenchWindow() .getPages(); for (int i = 0; i < pages.length; i++) { if (((FileEditorInput) getEditorInput()).getFile() .getProject().equals(event.getResource())) { IEditorPart editorPart = pages[i] .findEditor(getEditorInput()); pages[i].closeEditor(editorPart, true); } } } }); } if (event.getType() == IResourceChangeEvent.POST_CHANGE) { // A general resource has changed IFileEditorInput fileInput = null; IPath path = null; IResourceDelta delta = null; IResource res = null; if (getEditorInput() != null && getEditorInput() instanceof IFileEditorInput) { fileInput = (IFileEditorInput) getEditorInput(); path = fileInput.getFile().getFullPath(); } if (path != null) { delta = event.getDelta().findMember(path); } if (delta != null) res = delta.getResource(); if (res != null) { int kind = delta.getKind(); if (kind == IResourceDelta.REMOVED) { // Close the editor final IFileEditorInput input = fileInput; Display.getDefault().asyncExec(new Runnable() { public void run() { IWorkbenchPage[] pages = getSite() .getWorkbenchWindow().getPages(); for (int i = 0; i < pages.length; i++) { IEditorPart editorPart = pages[i] .findEditor(input); pages[i].closeEditor(editorPart, true); } } }); } else { // TODO Handle other changes such as the file changed // externally // SWTUtils.infoMsgAsync("Got POST_CHANGE [" + delta.getKind() // + "] for " + path.toOSString()); } } } } @Override public void createPartControl(Composite parent) { super.createPartControl(parent); } }