Я работаю над RCP-приложением Eclipse и пытаюсь обновить значение выражения, предоставленное MySourceProvider
, в соответствии с изменениями выбора в TableViewer
в MyEditorPart
.
Экземпляр MyEditorPart
определяет TableViewer
следующим образом:
public class MyEditorPart extends EditorPart {
@Override
public void createPartControl(Composite parent) {
TableViewer tableviewer = new TableViewer(parent, SWT.CHECK);
tableviewer.setContentProvider(ArrayContentProvider.getInstance());
getSite().setSelectionProvider(tableViewer);
...
MySourceProvider
имеют некоторые значения выражений, подобные этому:
public class MySourceProvider extends AbstractSourceProvider {
public static final String EXPR = "org.xyz.isEntrySelected";
// other expressions
@Override
public String[] getProvidedSourceNames() {
return new String[] { EXPR,
// other expressions
};
}
@Override
public Map getCurrentState() {
HashMap<String, Object> map = new HashMap<String, Object>(1);
map.put(EXPR, expr_value); // expr_value calculated by the listener
// other expressions
return map;
}
Я хочу изменить expr_value
в соответствии с изменениями выбора на TableViewer
. Я зарегистрировал слушателя следующим образом:
window.getSelectionService().addPostSelectionListener(MyEditorPartId, selectionListener);
private final ISelectionListener selectionListener = new SelectionListener() {
@Override
public void selectionChanged(IWorkbenchPart part, ISelection selection) {
handleEvent();
}
};
Слушатель успешно регистрируется, но получает уведомление только один раз, если я нажал где-нибудь на MyEditorPart
(не только TableViewer
, но и на весь редактор). Чтобы получить уведомление снова, мне нужно щелкнуть другую часть представления (или редактора), чтобы потерять фокус, а затем снова щелкнуть MyEditorPart
.
1. Почему прослушиватель получает уведомление только один раз, когда MyEditorPart
снова получает фокус?
2. Как прослушивать только изменения выбора до TableViewer
строк?
Что мне здесь не хватает? Каков правильный способ прослушивания изменений выбора?
Заранее спасибо.