我有一个视图希望收到所有当前打开的编辑器的通知。我在哪里可以添加一个监听器来实现这一点?
我期待 WorkbenchPage 或 EditorManager 有一些合适的监听器注册表,但我找不到它。
我有一个视图希望收到所有当前打开的编辑器的通知。我在哪里可以添加一个监听器来实现这一点?
我期待 WorkbenchPage 或 EditorManager 有一些合适的监听器注册表,但我找不到它。
您的视图是否使用org.eclipse.ui.IPartListener2
?
这就是使用此EditorListener的原因,它的工作是针对给定视图对 Editor 事件(包括打开和关闭)做出反应
public class EditorListener implements ISelectionListener, IFileBufferListener,
IPartListener2 {
protected BytecodeOutlineView view;
EditorListener(BytecodeOutlineView view){
this.view = view;
}
[...]
/**
* @see org.eclipse.ui.IPartListener2#partOpened(org.eclipse.ui.IWorkbenchPartReference)
*/
public void partOpened(IWorkbenchPartReference partRef) {
view.handlePartVisible(partRef.getPart(false));
}
现在,如果您ViewPart
直接实现 an IPartListener2
,它可以将自己注册到各种Editors
,就像这样BytecodeReferenceView
public class BytecodeReferenceView extends ViewPart implements IPartListener2, ISelectionListener {
[...]
public void createPartControl(Composite parent) {
browser = new Browser(parent, SWT.BORDER);
browser.setText(BytecodeOutlinePlugin.getResourceString(NLS_PREFIX
+ "empty.selection.text"));
final IWorkbenchWindow workbenchWindow = getSite().getWorkbenchWindow();
workbenchWindow.getPartService().addPartListener(this);
[...]
我认为你在正确的轨道上。您需要监听 IWorkbenchPage IPartService事件:
page.addPartListener(new IPartListener() {
partOpened(IWorkbenchPart part) {
...
}
...
});