【发布时间】:2014-01-09 18:53:01
【问题描述】:
我有点卡住了,因为资源很多,他们并没有为我澄清这个问题。
假设我有一个 command、一个 handler、一个 property tester,并且这些结果在 UI 上显示为 酷栏项目。
现在,假设我有多个视图扩展同一个基础(例如BaseView)。所有这些视图都包含ColumnViewers(例如TableViewer、TreeViewer),它们充当选择提供者。
-
enableWhen和activeWhen配置如何知道这些查看器中的选择?我无法想象selection+instanceOf参数如何为ISelection(s) 工作。 - 如何将选定对象传递给属性测试器?
test方法接收什么实例(作为receiver)? - 我注意到有许多通过处理程序的
setEnabled()方法的断点。这是正常行为吗?可以覆盖setEnabled吗?
这里的代码对我来说似乎有点无关紧要。但无论如何,这些 sn-ps 涵盖了以下问题:
// --------------------- 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.
}
}
【问题讨论】:
标签: java eclipse eclipse-plugin swt eclipse-rcp