2014-01-09 50 views
0

我有點卡住了,因爲資源很多,他們不會爲我解決這個問題。基於選擇的Eclipse RCP處理程序啓用

假設我有一個命令,一個處理器,一個性能測試儀,而這些在UI上呈現爲酷工具欄項目結果。

現在,假設我有幾個視圖擴展了相同的基礎(例如BaseView)。所有這些視圖包含作爲選擇提供者ColumnViewer(例如TableViewer,TreeViewer)。

  • enableWhenactiveWhen配置如何知道這些查看器中的選擇?我無法想象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. 
    } 
} 

回答

1

每個ViewPart(和編輯的部分)具有選擇服務維護和選擇供應商設置單獨的選擇。 enabledWhenvisibleWhen使用從零件的選擇服務獲得的當前活動零件的選擇。

屬性測試調用通常位於啓用表達式中的<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> 

正在使用當前選擇,要求選擇適應特定類型,並測試兩個屬性之一。

+0

啓用參數的有趣選擇。在這種情況下,'iterate'和'adapt'如何派上用場? – GGrec

+0

如果樹/表允許選擇多個項目,則「iterate」依次查看每個選擇,因此使用'or'指定只有其中一個選項必須匹配。 'adapt'使用'IAdapterFactory'接口將指定的類型與所選對象進行匹配(所以UI對象不必直接實現接口)。 –

+0

優秀的解釋。現在,我還有一個問題。爲什麼房產測試人員不斷打電話?如果我在'test'方法中有幾條業務邏輯,是不是會減慢整個系統的速度? – GGrec

相關問題