Я разрабатываю приложение RCP. В приложении есть режим выполнения, в котором я хочу включить различные привязки клавиш для управления пуском, остановкой, продолжением, повторением и т. Д. Привязки будут активированы с помощью «ExecutionContext», который устанавливается при активации любого из соответствующих представлений.
Переключение контекста выполняется в каждом из представлений «Выполнение».
@Override
public final void createPartControl(Composite parent)
{
addPartListener();
...
}
private void addPartListener()
{
this.getViewSite().getPage().addPartListener(new IPartListener2()
{
IContextActivation token = null;
@Override
public void partDeactivated(IWorkbenchPartReference partRef)
{
if (token != null)
{
System.out.println("End exec context");
IContextService contextService = (IContextService) PlatformUI.getWorkbench().getService(
IContextService.class);
contextService.deactivateContext(token);
token = null;
}
}
@Override
public void partActivated(IWorkbenchPartReference partRef)
{
System.out.println("Set exec context");
IContextService contextService = (IContextService) PlatformUI.getWorkbench().getService(
IContextService.class);
token = contextService.activateContext("AtfExecutionContext");
}
});
}
Я могу видеть через сообщения консоли, что мой контекст установлен, и некоторые привязки клавиш работают как положено.
Однако, если привязка ключа уже была назначена другим плагином, эта привязка имеет приоритет. Например. Я хочу использовать Ctrl + F8 , чтобы остановить, но когда это нажато, я получаю действие «Следующая перспектива», которое является рабочим местом по умолчанию.
Обязательное определение:
<extension
point="org.eclipse.ui.bindings">
<scheme
id="atfscheme"
name="atfscheme"
parentId="org.eclipse.ui.defaultAcceleratorConfiguration">
</scheme>
<key
commandId="com.xxx.atf.model.ui.commands.ExecKey.Start"
contextId="AtfExecutionContext"
schemeId="atfscheme"
sequence="M1+M2+F5">
<!-- F5 does not work but Ctrl-Shift-F5 does -->
</key>
</extension>
<extension
point="org.eclipse.ui.contexts">
<context
id="AtfExecutionContext"
name="AtfExecutionContext"
parentId="org.eclipse.debug.ui.debugging">
<!-- have tried various parentid values... -->
</context>
</extension>
Кажется, работают только ранее неопределенные ускорители. Что мне нужно сделать, чтобы переопределить существующие определения и активировать мои, когда мой контекст установлен?