org.eclipse.ui.handlers.RegistryToggleState 状态切换实现要点

本文补充了关于org.eclipse.ui.handlers.RegistryToggleState状态切换的实现细节。初始默认值需设置为true,使用预定义的stateid而非IMenuStateIds.STYLE,并通过IStateListener监听状态变化,在handleStateChange方法中处理切换逻辑。
摘要由CSDN通过智能技术生成

http://eclipsesource.com/blogs/2009/01/15/toggling-a-command-contribution/

帖子中描述了在使用到toggle状态切换时候的用法,发现帖子中描述的不够全面,有一些遗漏的地方。

1、如果要初始按下去,注意初始默认值org.eclipse.ui.handlers.RegistryToggleState:true 确保为true

<command id="cn.com.ywave.fibermon.ui.handlers.CmdVpFilter"
			name="Filter">
			<state class="org.eclipse.ui.handlers.RegistryToggleState:true"
				id="fibermon.vpwarning.filter.state">
			</state>
		</command>

2,handler要实现IElementUpdater

直接使用在plugin中定义好的stateid(fibermon.vpwarning.filter.state) 不要使用comments中的IMenuStateIds.STYLE

IStateListener 是状态改变时候的监听,提供了handleStateChange方法,可以在此方法中实现状态切换时候的处理。

public class HandlerVpFilter extends AbstractHandler implements IHandler, IStateListener, IElementUpdater {

	@Override
	public Object execute(ExecutionEvent event) throws ExecutionException {

		Command allShowCommand = event.getCommand();
		State allState = allShowCommand.getState("fibermon.vpwarning.filter.state");
		allState.setValue(!Boolean.parseBoolean(String.valueOf(allState.getValue())));
		ICommandService service = (ICommandService) PlatformUI.getWorkbench().getService(ICommandService.class);

		service.refreshElements(event.getCommand().getId(), null);

		return null;
	}

	@Override
	public void handleStateChange(State state, Object oldValue) {
		GlobalDataContainer.inst().getFilterDisableWarningDM().setValue((Boolean) state.getValue());

	}

	@Override
	public void updateElement(UIElement element, Map parameters) {
		ICommandService commandService = (ICommandService) PlatformUI.getWorkbench().getService(ICommandService.class);
		Command command = commandService.getCommand("cn.com.ywave.fibermon.ui.handlers.CmdVpFilter");
		element.setChecked((Boolean) command.getState("fibermon.vpwarning.filter.state").getValue());

	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值