Я в настоящее время борется со следующими Eclipse RCP команды:Eclipse RCP: как наблюдать состояния команд cut/copy/paste?
org.eclipse.ui.edit.cut
org.eclipse.ui.edit.copy
org.eclipse.ui.edit.paste
Я их, используя в качестве командных взносов на панели инструментов, но UIElements (элементы панели инструментов) не обновляются, когда изменяется состояние этих команд «handled
».
Для тестирования я использовал механизм опроса для проверки того, что состояние этих команд действительно изменяется в зависимости от текущего сосредоточенного элемента, и я обнаружил, что обработчик остается тем же, но состояние обработанного обработчика изменяется правильно, команд "обработано", чтобы также правильно изменить.
Единственная проблема в том, что ни один из этих изменений состояния вызывает уведомление (ни на Командования ICommandListener
, ни на хендлере IHandlerListener
), поэтому UIElements не будет обновляться.
Вот некоторые тестирования кода для наблюдения состояния команды:
ICommandService commandService = (ICommandService) PlatformUI.getWorkbench().getService(ICommandService.class);
final String commandId="org.eclipse.ui.edit.copy";
Command command = commandService.getCommand(commandId);
command.addCommandListener(new ICommandListener() {
public void commandChanged (CommandEvent commandEvent) {
System.out.println(">> Command changed: " + commandId);
}
});
Am я что-то отсутствует, или это ошибка в реализации вырезать/копировать/вставлять обработчик? Любые идеи?
EDIT: команд включены все время, и обработчик никогда не обменивается, только «handled
» состояния обработчика (и, таким образом, также на вводе команды в «handled
» состояния) меняется в зависимости от пользовательского интерфейса элемент имеет фокус , Однако при изменении этого состояния уведомления не поступают. Это приводит к тому, что кнопки панели инструментов всегда включаются, и при нажатии на них вызывается org.eclipse.core.commands.NotHandledException: There is no handler to execute for command
.
Это состояние «обработано», которое меня интересует. Когда фокус не находится в текстовом поле, все три команды включены, но не обрабатываются (обработчик установлен, но не обрабатывается). Когда команда вызывается нажатием кнопки на панели инструментов, тогда это приведет к появлению «org.eclipse.core.commands.NotHandledException: обработчик не выполняется для команды» –
Ах ... теперь это имеет смысл. Я обновил мою Ответ: –
Я в порядке, когда команда временно не обрабатывается (например, когда фокус меняется с текстового поля на кнопку, тогда нет ничего, что можно было бы вырезать/скопировать/вставить), но в этом случае я бы хотел чтобы получить уведомление, чтобы я мог отключить элемент toobar до тех пор, пока команда не обрабатывается. Я мог бы, конечно, зарегистрировать макет h andler для указанных команд, поэтому по крайней мере исключение возникает при попытке выполнить их, но я бы предпочел отключить элементы панели инструментов/меню. –