В момента се боря със следните RCP команди на Eclipse:
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);
}
});
Пропускам ли нещо или това е грешка в реализациите на манипулатора за изрязване/копиране/поставяне? Някакви прозрения?
РЕДАКТИРАНЕ: Командите са активирани през цялото време и манипулаторът никога не се обменя, само състоянието 'handled
' на манипулатора (и по този начин също и състоянието 'handled
' на командата) се променя в зависимост от това кой елемент на потребителския интерфейс е на фокус. Няма обаче известие, когато това състояние се промени. Това води до това, че бутоните на лентата с инструменти винаги са активирани и натискането им ще доведе до org.eclipse.core.commands.NotHandledException: There is no handler to execute for command
.