Eclipse 插件开发 - ToolItem 启用时的奇怪行为
Eclipse plugin development - ToolItem strange behavior at enabling
我在 fragment.e4xmi 中定义了一个 HandledToolItem :
<fragments xsi:type="fragment:StringModelFragment" xmi:id="_rva08KK6Eeealvq0OCaXXw" featurename="trimContributions" parentElementId="org.eclipse.e4.legacy.ide.application">
<elements xsi:type="menu:TrimContribution" xmi:id="_NDOigKK8Eeealvq0OCaXXw" elementId="xyz.trimcontribution.0" parentId="org.eclipse.ui.main.toolbar" positionInParent="after=additions">
<children xsi:type="menu:ToolBar" xmi:id="_NXC2YKK8Eeealvq0OCaXXw" elementId="xyz.toolbar.1" accessibilityPhrase="ToolItems1">
<children xsi:type="menu:HandledToolItem" xmi:id="_dOkvwKK8Eeealvq0OCaXXw" elementId="xyz.handledtoolitem.1" label="Item1" iconURI="platform:/plugin/xyz-plugin/resources/icons/toolbar/Item1.png" tooltip="" enabled="false" command="_SALb4JItEee5yvRIuSvsRg"/>
</children>
</elements>
</fragments>
我可以 enable/disable 使用 setEnable 方法的 toolItem,但是当我在 UI toolItem 的其他地方单击一些时,状态总是更改为启用,无论之前是哪个状态。
我在 Eclipse E4 中工作。
工具或菜单项的启用状态会定期从当前处理程序的 @CanExecute
方法更新,因此您不能只调用 setEnabled
来更改其状态。如果没有 @CanExecute
方法,则假定为 true
。
改为在 returns 启用状态的处理程序中实施 @CanExecute
方法:
@CanExecute
public boolean canExecute()
{
return // TODO enabled state
}
如果您想在处理程序的主要 @Execute
方法期间更改启用状态,您可能需要强制 Eclipse 调用 @CanExecute
方法。您可以使用事件代理的特殊主题来执行此操作:
@Execute
public void execute(MHandledToolItem mitem, IEventBroker eventBroker)
{
... other code
// Update enablement
eventBroker.send(UIEvents.REQUEST_ENABLEMENT_UPDATE_TOPIC, mitem.getElementId());
}
我在 fragment.e4xmi 中定义了一个 HandledToolItem :
<fragments xsi:type="fragment:StringModelFragment" xmi:id="_rva08KK6Eeealvq0OCaXXw" featurename="trimContributions" parentElementId="org.eclipse.e4.legacy.ide.application">
<elements xsi:type="menu:TrimContribution" xmi:id="_NDOigKK8Eeealvq0OCaXXw" elementId="xyz.trimcontribution.0" parentId="org.eclipse.ui.main.toolbar" positionInParent="after=additions">
<children xsi:type="menu:ToolBar" xmi:id="_NXC2YKK8Eeealvq0OCaXXw" elementId="xyz.toolbar.1" accessibilityPhrase="ToolItems1">
<children xsi:type="menu:HandledToolItem" xmi:id="_dOkvwKK8Eeealvq0OCaXXw" elementId="xyz.handledtoolitem.1" label="Item1" iconURI="platform:/plugin/xyz-plugin/resources/icons/toolbar/Item1.png" tooltip="" enabled="false" command="_SALb4JItEee5yvRIuSvsRg"/>
</children>
</elements>
</fragments>
我可以 enable/disable 使用 setEnable 方法的 toolItem,但是当我在 UI toolItem 的其他地方单击一些时,状态总是更改为启用,无论之前是哪个状态。
我在 Eclipse E4 中工作。
工具或菜单项的启用状态会定期从当前处理程序的 @CanExecute
方法更新,因此您不能只调用 setEnabled
来更改其状态。如果没有 @CanExecute
方法,则假定为 true
。
改为在 returns 启用状态的处理程序中实施 @CanExecute
方法:
@CanExecute
public boolean canExecute()
{
return // TODO enabled state
}
如果您想在处理程序的主要 @Execute
方法期间更改启用状态,您可能需要强制 Eclipse 调用 @CanExecute
方法。您可以使用事件代理的特殊主题来执行此操作:
@Execute
public void execute(MHandledToolItem mitem, IEventBroker eventBroker)
{
... other code
// Update enablement
eventBroker.send(UIEvents.REQUEST_ENABLEMENT_UPDATE_TOPIC, mitem.getElementId());
}