5

我有一个视图希望收到所有当前打开的编辑器的通知。我在哪里可以添加一个监听器来实现这一点?

我期待 WorkbenchPage 或 EditorManager 有一些合适的监听器注册表,但我找不到它。

4

2 回答 2

8

您的视图是否使用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);
    [...]
于 2009-02-12T21:19:31.057 回答
2

我认为你在正确的轨道上。您需要监听 IWorkbenchPage IPartService事件:

page.addPartListener(new IPartListener() {
    partOpened(IWorkbenchPart part) {
        ...
    }

    ...
});
于 2009-02-12T17:15:35.930 回答