У меня есть два отдельных представления, которые показывают несколько списков значений.Оба вида открыты одновременно.
У меня есть общая команда AddNewItemInList
, которую я хочу добавить на панель инструментов обоих видов.Команда должна добавить новый элемент в список, который в данный момент имеет фокус.Команда должна быть отключена, если пользователь еще не выбрал список.
В настоящее время я использовал следующее для выполнения команды.
public class MyViewPart extends ViewPart {
[...]
public Object getAdapter(Class clazz) {
if(clazz.equals(List.class))
return getListInFocus(); // can be null if no list in focus
return null;
}
}
public class AddNewItemInList extends AbstractHandler {
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
MyList list = HandlerUtil.getActivePart(event).getAdapter(MyList.class);
list.add(new Item());
return null;
}
}
Пока все хорошо, но у меня нетпонять, как включить или отключить обработчик соответственно.Я читал об инфраструктуре Eclipse Core Commands.Я очень растерялся.
Ответы на вопросы: Как создать выражение, чтобы увидеть, не возвращает ли метод метода getAdapter () представления null?-> Ответ ниже
Как получить представление, для которого была настроена эта команда (а не текущее активное представление)?-> Я могу добавить viewId в качестве параметра команды
Остальные вопросы: Должен ли я настроить два отдельных экземпляра обработчика в моем файле plugin.xml (по одному для каждого представления)?-> Условие enabledWhen может использовать только текущий контекст оценки.Кажется, я не могу использовать параметры, предоставленные командой.Это означает, что обработчик включается или отключается в зависимости от состояния полного рабочего места.