В моем приложении RCP Eclipse я использую службу выбора, как описано в этом хорошем article. Существует TreeViewer в одном представлении, зарегистрированном как SelectionProvider:
getSite().setSelectionProvider(viewer);
Другое представление - получение событий из TreeViewer:
selectionListener = new ISelectionListener() {
public void selectionChanged(IWorkbenchPart part, ISelection selection) {
pageSelectionChanged(part, selection);
}
};
getSite().getPage().addSelectionListener(selectionListener);
Все работает нормально, если события инициируются моими обычными щелчками мыши. Я хотел бы программно запускать события выбора путем выбора элемента в дереве:
treeViewer.setSelection(new StructuredSelection(element),true);
Это не работает. Выбор методаChanged не вызывается в представлении приемника. Этот вопрос обсуждается в этом форуме. Решение отсутствует.
EDIT
Нет правильного способа обработки щелчка мыши, как и программный выбор. Щелчок мышью активирует представление, которое программный выбор не делает.
Мое решение состоит в том, чтобы зарегистрировать второе представление таким же образом на Selection Service
как первое представление. После этого оба представления получают события выбора непосредственно из активного редактора.