Конфликты привязок ключей Eclipse - PullRequest
4 голосов
/ 23 июня 2009

Я расширяю платформу затмения своим собственным взглядом. Это представление содержит одно действие на панели инструментов.

Я хочу создать комбинацию клавиш, связанную с Ctrl + R для этих действий. Для этого я создал my.context (мой контекст расширяет контекст org.eclipse.ui.window), my.command и расширения my.command.binding.

Затем, когда мое представление создается, в методе createPartControl (*) я активирую свой контекст:

IContextService contextService = (IContextService) getSite()
    .getService(IContextService.class);
contextService.activateContext(VIEW_CONTEXT_ID);

Когда мое представление открывается в перспективе отладки, у меня появляется следующее предупреждение:

    Warning: A conflict occurred for CTRL+R:
    Binding(CTRL+R,
    ParameterizedCommand(Command(org.eclipse.debug.ui.commands.RunToLine,Run to Line,
    Resume and break when execution reaches the current line,
    Category(org.eclipse.debug.ui.category.run,Run/Debug,Run/Debug command category,true),
 ActionDelegateHandlerProxy(null,org.eclipse.debug.internal.ui.actions.RetargetRunToLineAction),
    ,,true),null),
    org.eclipse.ui.defaultAcceleratorConfiguration,
    org.eclipse.debug.ui.debugging,,,system)
    Binding(CTRL+R,
    ParameterizedCommand(Command(RestoreAction,Restore Chart (T-Charts),
    Restore the initial chart display,
    Category(TChartsActions,T-Charts Actions,null,true),
    ActionHandler(com.st.tcharts.internal.actions.RestoreChartAction@1997b8a),
    ,,true),null),
    org.eclipse.ui.defaultAcceleratorConfiguration,
    com.st.tcharts.ui.view,,,system)

Я не уверен, что понимаю, почему у меня есть это предупреждение ...

Есть ли несколько активных контекстов в данный момент?

Если я, например, изменит свой ярлык на Ctrl + C , у меня нет этого предупреждения, но Ctrl + C также связан с другой командой (копией) в контексте отладки ... почему?

Я не нашел в сети чётких источников информации о контекстах Eclipse ...

Заранее спасибо

Маню

1 Ответ

2 голосов
/ 23 июня 2009

Я не уверен, почему ваш контекст не изолирует ваши привязки от затмения, но если CTRL+R уже связан с командой «Run to Line», вы можете просто изменить его обработчик своим, как описано в эта тема :

(Пример для адаптации к вашему случаю)

 <handler
       class="test.handlers.DeleteFooHandler"
       commandId="org.eclipse.ui.edit.delete">
    <activeWhen>
       <iterate
             ifEmpty="false"
             operator="and">
          <instanceof
                value="test.model.Foo">
          </instanceof>
       </iterate></activeWhen>
 </handler>

Примечание: этот подход также иллюстрируется этой веткой :

IHandlerService handlerService =
  getSite().getService(IHandlerService.class);


IHandler myPaste = new org.eclipse.core.commands.AbstractHandler() {
  public Object execute(ExecutionEvent event) throws ExecutionException{
    System.out.println("This is MyPaste");
  }
};

Теперь, поскольку это не объясняет, почему ваши собственные IContext не деактивируют привязки Eclipse, я могу пока только найти эту цепочку , объясняющую, когда ваш контекст действительно активно:

Если вы открываете свое собственное окно (диалоговое окно или оболочку), и это делает окно рабочей среды неактивным, ваш контекст также не будет активным.
Вы можете попробовать установить в своей командной оболочке тип == window, также используя IContextService#registerShell(*) ..., что должно оставить стандартные контексты окна действительными.
Возможно, вам все еще придется активировать контекст, когда ваша оболочка окна SW активна (с соответствующим отключением).

На что ФП ответил:

Я получил его решение, активировав этот контекст на усилении фокуса требуемого окна и деактивировав этот контекст на потерянном фокусе и избавившись от того же окна.

Может быть, это может помочь.
А пока вы можете посмотреть « Platform Command Framework », чтобы активировать «Опцию трассировки» и точно узнать, какая привязка активирована и для какой команды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...