5

現在開いているすべてのエディターについて通知を受け取りたいビューがあります。これを実現するためにどこにリスナーを追加できますか?

WorkbenchPage または EditorManager に適切なリスナー レジストリがあることを期待していましたが、見つかりませんでした。

4

2 に答える 2

8

あなたのビューはorg.eclipse.ui.IPartListener2?

これが、このEditorListenerを使用しているものであり、その仕事は、特定のビューに対して Editor イベント (open と close を含む) に反応することです。

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を直接実装すると、このようIPartListener2にさまざまな に自分自身を登録できますEditorsBytecodeReferenceView

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

I think you're on the right track. You need to listen to the IWorkbenchPage IPartService events:

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

    ...
});
于 2009-02-12T17:15:35.930 に答える