У меня есть команда и обработчик для нее. Событие execute обработчика должно получить значение для свойства, фактически выбранного в представлении свойств, и действовать на него, или быть отключенным, если не выбрано какое-либо свойство.Как сделать страницу свойств ссылкой поставщиком?
Я пробовал:
1) Установить поставщика выбора на то, которое обеспечивает выбор с точки зрения собственности. Что-то в этом случае просто PropertySheetViewer для моего PropertySheetPage, но я не могу установить его как поставщика выбора, потому что средство просмотра PropertySheetPage является закрытым и не имеет getter.
2) Переопределение метода CreateControl PropertySheetPage: этот метод создает элемент управления Tree для PropertySheetViewer. Выбор слушатель может быть установлен для этого элемента управления деревом, так что, может быть, я могу сделать мой обработчик команд реализовать SelectionListener ... Решение будет что-нибудь вроде:
В моем редакторе:
public Object getAdapter(@SuppressWarnings("rawtypes") Class type) {
if (type == IPropertySheetPage.class) {
PropertySheetPage page = new PropertySheetPage() {
@Override
public void createControl(Composite parent) {
super.createControl(parent);
IHandler handler = someWayToGetMyCmdHandler();
((org.eclipse.swt.widgets.Tree) getControl())
.addSelectionListener(handler);
}
};
IPropertySheetEntry entry = new UndoablePropertySheetEntry(
getCommandStack());
page.setRootEntry(entry);
return page;
}
return super.getAdapter(type);
}
И мой обработчик команд реализуя SelectionListener, как я сказал ... Проблема с этим подходом заключается в том, что я не могу найти способ получить ссылку на мой обработчик обработанной команды (someWayToGetMyCmdHandler() выше).
У кого-нибудь есть ключ к этому, или любой другой возможный подход к проблеме?
Я добавил частное свойство «выбора» в моем обработчике команд и геттер/сеттер для него, чтобы как можно обычным образом уведомить/обновить обработчик, как вы намеревались. Я думаю, было бы интересно обновить ответ с информацией о том, как искать обработчик с помощью IHandlerService, могу ли я отредактировать ответ, чтобы добавить эту информацию? – roirodriguez
@roirodriguez Вперед :) –