package com.nidapeng.eclipse.plugin.pde;
import org.eclipse.core.resources.*;
import org.eclipse.core.resources.IResourceChangeEvent;
import org.eclipse.core.runtime.CoreException;
import java.util.ResourceBundle;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.part.ViewPart;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
public class NoticeView extends ViewPart implements
Runnable,IResourceChangeListener ,IResourceDeltaVisitor{
private ResourceBundle resourceBundle;
private Label label;
private Display disp;
private String dispTxt;
public NoticeView() {
ResourcesPlugin.getWorkspace().addResourceChangeListener(this,
IResourceChangeEvent.PRE_CLOSE
IResourceChangeEvent.PRE_DELETE
IResourceChangeEvent.PRE_AUTO_BUILD
IResourceChangeEvent.POST_AUTO_BUILD
IResourceChangeEvent.POST_CHANGE);
}
public static IWorkspace getWorkspace() {
//ResourcesPlugin插件的主类!
return ResourcesPlugin.getWorkspace();
}
public void createPartControl(Composite parent) {
label = new Label(parent, SWT.WRAP);
label.setText("change your project status...");
disp = Display.getDefault();
}
public void setFocus() {
}
// 实现IResourceChangeListener接口中的resourceChanged方法
public void resourceChanged(IResourceChangeEvent event) {
IResource res = event.getResource();
switch (event.getType()) {
case IResourceChangeEvent.PRE_CLOSE :
dispTxt = res.getFullPath() + " is about to closed!";
break;
case IResourceChangeEvent.PRE_DELETE :
dispTxt = res.getFullPath() + " is about to be deleted!";
break;
case IResourceChangeEvent.POST_CHANGE :
try {
event.getDelta().accept(this);
} catch (CoreException e) {
e.printStackTrace();
}
break;
case IResourceChangeEvent.PRE_AUTO_BUILD :
try {
event.getDelta().accept(this);
} catch (CoreException e) {
e.printStackTrace();
}
break;
case IResourceChangeEvent.POST_AUTO_BUILD :
try {
event.getDelta().accept(this);
} catch (CoreException e) {
e.printStackTrace();
}
break;
}
disp.syncExec(this);
}
// 实现IResourceDeltaVisitor接口中的visit方法
public boolean visit(IResourceDelta delta) {
IResource res = delta.getResource();
switch (delta.getKind()) {
case IResourceDelta.ADDED :
dispTxt = "Resource "+res.getFullPath()+" was added.";
break;
case IResourceDelta.REMOVED:
dispTxt = "Resource "+res.getFullPath()+" was removed.";
break;
case IResourceDelta.CHANGED :
dispTxt = "Resource "+res.getFullPath()+" has changed.";
break;
}
return true; // visit the children
}
// 实现Runnable接口中的run方法
public void run() {
try {
label.setText(dispTxt);
} catch (Exception e) {
e.printStackTrace();
}
}
} |