我正在开发Eclipse RCP。 我定义了一个弹出菜单项命令。 为了控制命令的可见性,我使用属性测试器设置了测试条件。 除了第一次打开菜单外,此属性测试器使命令不可见。 意味着如果我是第一次打开弹出菜单,则无论属性测试器如何,该特定命令都可见。 当我第二次打开该菜单时,它将根据属性测试器确定可见性。 谁能解释我为什么会这样?
以下是我正在尝试的完整代码。
命令
id="com.eclipse-tips.commandState.alignCommand"
name="Align Command">
name="default"
value="false">
name="persisted"
value="false">
处理程序
class="com.gnr.handlers.AlignCommand"
commandId="com.eclipse-tips.commandState.alignCommand">
菜单贡献
commandId="com.eclipse-tips.commandState.alignCommand"
label="Align Command"
style="toggle">
checkEnabled="true">
variable="selection">
type="org.eclipse.core.resources.IFile">
property="com.gnr.testgen.checkInputFile_Align"
value="true">
性能测试仪
class="com.gnr.testgen.UserPropertyTester_Align"
id="com.gnr.testgen.user.propertyTester_Align"
namespace="com.gnr.testgen"
properties="checkInputFile_Align"
type="org.eclipse.core.resources.IFile">
以下是处理程序代码
public class AlignCommand extends AbstractHandler {
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
Command command = event.getCommand();
State state = command.getState(RegistryToggleState.STATE_ID);
boolean oldValue = ((Boolean) state.getValue()).booleanValue();
state.setValue(new Boolean(!oldValue));
return null;
}
}
最后PropertyTester
public class UserPropertyTester_Align extends PropertyTester {
public UserPropertyTester_Align() { }
@Override
public boolean test(Object receiver, String property, Object[] args,
Object expectedValue) {
return false;
}
}
在这里,您可以看到,属性测试器返回“ false”。 这意味着命令不应该可见,但是不会发生。 第一次打开弹出菜单时,该命令可见;第二次打开弹出菜单时,该命令不可见。