/* | |
* Copyright (c) 2011 Google Inc. | |
* | |
* 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 com.google.eclipse.protobuf.ui.editor; | |
import static org.eclipse.core.runtime.Status.OK_STATUS; | |
import static org.eclipse.xtext.ui.editor.Messages.XtextEditorErrorTickUpdater_JobName; | |
import org.eclipse.core.resources.IResource; | |
import org.eclipse.core.runtime.IProgressMonitor; | |
import org.eclipse.core.runtime.IStatus; | |
import org.eclipse.core.runtime.jobs.ISchedulingRule; | |
import org.eclipse.swt.graphics.Image; | |
import org.eclipse.ui.IEditorInput; | |
import org.eclipse.ui.IEditorSite; | |
import org.eclipse.ui.progress.UIJob; | |
import org.eclipse.xtext.ui.PluginImageHelper; | |
import org.eclipse.xtext.ui.editor.IXtextEditorCallback.NullImpl; | |
import org.eclipse.xtext.ui.editor.SchedulingRuleFactory; | |
import org.eclipse.xtext.ui.editor.XtextEditor; | |
import com.google.inject.Inject; | |
/** | |
* @author alruiz@google.com (Alex Ruiz) | |
*/ | |
public class FileOutsideWorkspaceIconUpdater extends NullImpl { | |
private static final ISchedulingRule SEQUENCE_RULE = SchedulingRuleFactory.INSTANCE.newSequence(); | |
@Inject private PluginImageHelper imageHelper; | |
@Override public void afterSetInput(XtextEditor editor) { | |
IEditorInput editorInput = editor.getEditorInput(); | |
IResource resource = (IResource) editorInput.getAdapter(IResource.class); | |
if (resource == null) { | |
UpdateEditorImageJob job = new UpdateEditorImageJob(); | |
job.scheduleFor(editor, imageHelper.getImage("pb-ro.gif")); | |
} | |
} | |
private static class UpdateEditorImageJob extends UIJob { | |
private XtextEditor editor; | |
private Image titleImage; | |
public UpdateEditorImageJob() { | |
super(XtextEditorErrorTickUpdater_JobName); | |
setRule(SEQUENCE_RULE); | |
} | |
@Override public IStatus runInUIThread(final IProgressMonitor monitor) { | |
IEditorSite site = null != editor ? editor.getEditorSite() : null; | |
if (site != null) { | |
if (!monitor.isCanceled() && titleImage != null && !titleImage.isDisposed() && editor != null) { | |
editor.updatedTitleImage(titleImage); | |
} | |
} | |
return OK_STATUS; | |
} | |
void scheduleFor(XtextEditor newEditor, Image newTitleImage) { | |
cancel(); | |
editor = newEditor; | |
titleImage = newTitleImage; | |
schedule(); | |
} | |
} | |
} |