0
我有點卡住了,因爲資源很多,他們不會爲我解決這個問題。基於選擇的Eclipse RCP處理程序啓用
假設我有一個命令,一個處理器,一個性能測試儀,而這些在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.
}
}
啓用參數的有趣選擇。在這種情況下,'iterate'和'adapt'如何派上用場? – GGrec
如果樹/表允許選擇多個項目,則「iterate」依次查看每個選擇,因此使用'or'指定只有其中一個選項必須匹配。 'adapt'使用'IAdapterFactory'接口將指定的類型與所選對象進行匹配(所以UI對象不必直接實現接口)。 –
優秀的解釋。現在,我還有一個問題。爲什麼房產測試人員不斷打電話?如果我在'test'方法中有幾條業務邏輯,是不是會減慢整個系統的速度? – GGrec