Как получать уведомления при открытии нового редактора в Eclipse? - PullRequest
5 голосов
/ 12 февраля 2009

У меня есть вид, который хотел бы получать уведомления обо всех открытых в данный момент редакторах. Где я могу добавить слушателя для достижения этой цели?

Я ожидал, что WorkbenchPage или EditorManager будут иметь какой-то соответствующий реестр слушателей, но я не смог его найти.

Ответы [ 2 ]

8 голосов
/ 13 февраля 2009

Использует ли ваш взгляд org.eclipse.ui.IPartListener2?

Именно для этого используется EditorListener , задача которого - реагировать для данного представления на события редактора (включая открытие и закрытие)

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, он может зарегистрировать себя в различных 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);
    [...]
3 голосов
/ 12 февраля 2009

Я думаю, вы на правильном пути. Вам необходимо прослушать события IWorkbenchPage IPartService :

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

    ...
});
...