[英]Eclipse RCP Handler enablement based on selection
我有点被困住了,因为资源很多,而且他们没有为我澄清这个问题。
假设我有一个命令 ,一个处理程序 ,一个属性测试器 ,并将这些结果作为一个酷炫的项目显示在UI上。
现在,假设我有几个扩展相同基数的视图(例如BaseView
)。 所有这些视图都包含ColumnViewer
(例如TableViewer
, TreeViewer
),它们充当选择提供程序 。
enableWhen
和activeWhen
配置如何了解这些查看器中的选择? 我无法想象如何selection
+ instanceOf
参数工作ISelection
(S)。 test
方法接收什么实例(作为receiver
)? setEnabled()
方法有很多遍。 那是正常的行为吗? 可以重写setEnabled
吗? 代码在这里似乎与我无关。 但是无论如何,这些片段涵盖了以下问题:
// --------------------- 1 -----------------------
<handler
class="com.example.ggrec.handlers.SampleHandler"
commandId="com.example.ggrec.commands.sampleCommand">
<enabledWhen>
<with
variable="selection">
<instanceof
value="org.eclipse.jface.viewers.ISelection">
</instanceof>
</with>
</enabledWhen>
</handler>
// --------------------- 2 -----------------------
<propertyTester
class="com.example.ggrec.propertyTesters.SamplePropertyTester"
id="com.example.ggrec.samplePropertyTester"
namespace="com.example.ggrec.propertyTesters"
properties="simpleTest"
type="java.lang.Object">
</propertyTester>
// --------------------- 3 -----------------------
/**
*
* @author ggrec
*
*/
public class SamplePropertyTester extends PropertyTester
{
@Override
public boolean test(final Object receiver, final String property, final Object[] args, final Object expectedValue)
{
if (receiver instanceof ISelection) // What instance is this?
System.out.println("RAINBOWS");
return true;
}
}
// --------------------- 4 -----------------------
/**
*
* @author ggrec
*
*/
public class SampleHandler extends AbstractHandler
{
@Override
public Object execute(final ExecutionEvent event) throws ExecutionException
{
final IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event);
MessageDialog.openInformation(window.getShell(), "", "meh");
return null;
}
@Override
public void setEnabled(final Object evaluationContext)
{
super.setEnabled(evaluationContext); // Goes like crazy through here.
}
}
每个ViewPart
(和编辑器部件)都有一个由选择服务维护并由选择提供者设置的单独选择。 enabledWhen
和visibleWhen
使用从零件选择服务获得的当前活动零件的选择。
属性测试调用通常位于启用表达式中的<with>
块内,该表达式建立要测试的对象。 就像是:
<with
variable="org.eclipse.ui.selection">
<iterate
operator="or">
<adapt
type="music.resources.data.IMusicFile">
<or>
<test property="music.isMusicOrPlaylist"/>
<test property="music.isVideo"/>
</or>
</adapt>
</iterate>
</with>
它与当前选择配合使用,要求选择适应特定类型,并测试两个属性之一。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.