Активация различных обработчиков команд E4 в зависимости от выбора текущей программы просмотра - PullRequest
0 голосов
/ 16 января 2019

Я реализую простую деталь E4 с TreeViewer, поддерживаемым TreeNode s с различными типами значений Foo и Bar.

Теперь я хочу добавить IOpenListener кTreeViewer, который выполняет команду открытия:

treeViewer.addOpenListener(event -> {
  ...
  Object selected value = ((TreeNode) event.getSelection()).getValue();
  ...
});

Теперь я могу получить команду из ECommandService и выполнить ее с помощью EHandlerService.

Однако я хочу другой обработчик для выполнения, в зависимости от , является ли выбранное значение равным Foo или Bar;хотя все обработчики соответствуют одной и той же логической команде («Открыть»), фактически выполняемый обработчик должен зависеть от выбора.

Возможно ли это?

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Некоторое время назад у меня был похожий вариант использования в проекте, и я придумал 'generic composite handler', способный отправлять event context в нужный / фактический / конкретный экземпляр обработчика. Например, составной обработчик создается, зная все обработчики, в которые он должен отправлять.

0 голосов
/ 16 января 2019

Обычно для детали существует только один обработчик.

Вы можете использовать метод EHandlerService.activateHandler для активации различных обработчиков, но для этого потребуется, чтобы вы постоянно активировали и деактивировали обработчики, используя прослушиватель выбора при изменении выбора.

...