2009-06-23 3 views
4

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

Я хочу, чтобы создать ключ связывания ярлык, связанный с 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([email protected]), 
    ,,true),null), 
    org.eclipse.ui.defaultAcceleratorConfiguration, 
    com.st.tcharts.ui.view,,,system) 

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

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

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

я не нашел четких RESSOURCES delaing о затмении контекстов в Интернете ...

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

Ману

+0

Обновлен мой ответ несколькими идеями. – VonC

+0

Благодарим вас за отзыв (в комментарии). Если вы найдете решение, не стесняйтесь публиковать его здесь (и сделайте его официальным ответом). Я буду его продвигать;) – VonC

ответ

2

Я не уверен, почему ваш контекст не изолировать привязки от eclipse one, но если CTRL+R уже связан с командой «Выполнить на линию», вы можете просто изменить его обработчик на свой, как описано в this thread:

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

<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> 

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

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, я могу только найти на данный момент this thread, объясняя, когда ваш контекст есть или нет фактически активных:

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

На что OP ответил:

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

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

+0

Спасибо за ответ, но я думаю, что это решение является своего рода «взломом». Как вы сказали, я хочу, чтобы «мой контекст изолировал мои привязки от eclipse one». Он должен работать, но ... –

+0

Еще раз спасибо за эти дополнения. Я не открываю собственное окно, так что это больше не помогает. Мой контекст активирован в моем методе view.createPartCOntrol, и представление открывается программно. Я думаю, что где-то есть ошибка. В затмении или в моем собственном коде ... Постараюсь больше исследовать и сообщать вам. Еще раз спасибо за ваше время. –

Смежные вопросы