Платформа Eclipse RCP Commands: я потерялся - PullRequest
3 голосов
/ 31 января 2012

У меня есть два отдельных представления, которые показывают несколько списков значений.Оба вида открыты одновременно.

У меня есть общая команда 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 может использовать только текущий контекст оценки.Кажется, я не могу использовать параметры, предоставленные командой.Это означает, что обработчик включается или отключается в зависимости от состояния полного рабочего места.

Ответы [ 2 ]

1 голос
/ 01 февраля 2012

У тестеров пользовательских свойств есть некоторые проблемы, и они действительно ужасны.Они обещают сделать некоторые улучшения в версии 4.0 .Вы можете попробовать реализовать нечто подобное самостоятельно.

1 голос
/ 01 февраля 2012

Как создать выражение, чтобы увидеть, не возвращает ли метод метода getAdapter () представления null?

Можно использовать тестеры пользовательских свойств .Он нуждается в большом количестве шаблонов и выглядит некрасиво, но он работает.

РЕДАКТИРОВАТЬ: На самом деле, это намного проще :

<with variable="activePart">
  <adapt type="com.foo.MyList"/>
</with>
...