2017-10-02 8 views
0

を可能にすることを私はfragment.e4xmiでHandledToolItem定義:Eclipseプラグインの開発 - ToolItem奇妙な行動

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

私は常に有効/ setEnable方法でtoolItemを無効にするが、私はUI toolItem状態に他の場所でいくつかをクリックしたときにすることができます前の状態に関係なく、有効に変更します。

Eclipse E4で動作します。

答えて

0

ツールまたはメニュー項目の有効化ステータスは、現在のハンドラの@CanExecuteメソッドから定期的に更新されるため、setEnabledを呼び出してその状態を変更することはできません。 @CanExecuteメソッドがない場合は、trueとします。あなたは、ハンドラのメイン@Execute方法の間に有効状態を変更したい場合は、あなたがするEclipseを強制する必要があるかもしれません

@CanExecute 
public boolean canExecute() 
{ 
    return // TODO enabled state 
} 

代わりに使用可能状態を返すハンドラで@CanExecuteメソッドを実装@CanExecuteメソッドを呼び出します。これは、イベントブローカーの特別なトピックを使用して行います。

@Execute 
public void execute(MHandledToolItem mitem, IEventBroker eventBroker) 
{ 
    ... other code 

    // Update enablement 
    eventBroker.send(UIEvents.REQUEST_ENABLEMENT_UPDATE_TOPIC, mitem.getElementId()); 
} 
+0

これは機能していますが、奇妙な方法です。私はmenuItemsにも同じコマンドを持っています。 「メニューポイント」をクリックすると@CanExecuteが呼び出されますが、eventBroker.sendが実行されたときには実行されませんでした。 –

+0

私も試してみました:eventBroker.send(UIEvents.REQUEST_ENABLEMENT_UPDATE_TOPIC、UIEvents.ALL_ELEMENT_ID); –

+0

UIEvents.REQUEST_ENABLEMENT_UPDATE_TOPICは、ツールアイテムに対して実行可能なcanだけを呼び出します。メニュー項目の場合、メニューが表示されているときだけ呼び出す必要があります。そのため、リクエストを有効にしてもcanを呼び出す必要はありません。 –