我正在用自己的观点扩展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(com.st.tcharts.internal.actions.RestoreChartAction@1997b8a),
,,true),null),
org.eclipse.ui.defaultAcceleratorConfiguration,
com.st.tcharts.ui.view,,,system)
我不确定为什么我会收到这个警告......
在给定时间有几个活动的上下文?
例如,如果我将快捷方式更改为 Ctrl + C ,我没有此警告但 Ctrl + C 也绑定到debugg上下文中的另一个命令(copy)...为什么?
我没有找到明确的关于网络上Eclipse上下文的资源...
提前致谢
马努
答案 0 :(得分:2)
我不确定为什么你的上下文没有将你的绑定与eclipse隔离,但是如果CTRL+R
已经与“Run to Line”命令相关联,你可以简单地用你的改变它的处理程序,如this thread:
(适应您案例的例子)
<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,解释你的上下文何时实际上活跃:
如果您打开自己的窗口(对话框或外壳)并且工作台窗口未激活,则您的上下文也不会处于活动状态。
您可以尝试将窗口shell设置为使用IContextService#registerShell(*)
来键入==窗口...这应该使标准窗口上下文有效。
当SW窗口shell处于活动状态时(在匹配的停用状态下),您可能还必须激活上下文。
OP回复:
我通过在所需窗口的焦点增益上激活该上下文并在焦点丢失时停用该上下文并处置相同的窗口来获得它的解决方案。
可能会有所帮助 在此期间,您可以查看“Platform Command Framework”以激活“跟踪选项”,并确切地查看激活的绑定和命令。