2011-12-30 61 views
0

我有一個貢獻的命令和處理程序。處理程序的execute事件必須獲取屬性視圖中實際選定的屬性的值並對其執行操作,或者如果未選擇任何屬性,則會被禁用。如何使一個propertysheetpage成爲一個選擇提供者?

我已經試過:

1)將選擇提供的東西從屬性視圖提供了選擇。在這種情況下,PropertySheetViewer僅用於PropertySheetPage,但我無法將其設置爲選擇提供程序,因爲PropertySheetPage的查看器是私有的,並且沒有獲取器。

2)覆蓋PropertySheetPage的createControl方法:此方法爲PropertySheetViewer創建一個Tree控件。一個選擇監聽器可以安裝該樹形控件,所以也許我可以讓我的命令處理程序實現SelectionListener中......解決辦法是像事端:

在我的編輯:

public Object getAdapter(@SuppressWarnings("rawtypes") Class type) { 
     if (type == IPropertySheetPage.class) { 
      PropertySheetPage page = new PropertySheetPage() { 
       @Override 
       public void createControl(Composite parent) { 
        super.createControl(parent); 

            IHandler handler = someWayToGetMyCmdHandler(); 
        ((org.eclipse.swt.widgets.Tree) getControl()) 
          .addSelectionListener(handler); 
       } 

      }; 
      IPropertySheetEntry entry = new UndoablePropertySheetEntry(
        getCommandStack()); 
      page.setRootEntry(entry); 
      return page; 
     } 

    return super.getAdapter(type); 
} 

我的命令處理程序像我說的那樣實現SelectionListener ...這種方法的問題是我找不到一個方法來獲取對我貢獻的命令處理程序(上面的someWayToGetMyCmdHandler())的引用。

有沒有人對此有任何線索,或者有任何其他可能的解決方法?

回答

1

handleEntrySelection(ISelection selection)方法在PropertySheetPage,您可以覆蓋,以通知查看器中的選擇更改(雖然PropertySheetPage@noextend)。

第二部分(更新處理程序)比它通常會更棘手。當工作臺選擇改變時,命令/處理程序會自動更新(您只需執行setEnabled(Object evaluationContext)AbstractHandler)。但由於PropertySheetPage被設計爲改變其對全局選擇改變的輸入,所以你必須找到一些自定義的方式來通知/更新你的處理程序。

據我所知,目前無法使用自定義變量來擴展平臺命令事件處理機制,因此您只需要直接使用工作臺的IHandlerService來查找處理程序。

+0

我已經在我的命令處理程序中添加了一個私有「選擇」屬性,併爲其添加了一個getter/setter作爲自定義通知/更新處理程序的方式。我認爲用IHandlerService更新答案和有關如何查找處理程序的信息會很有趣,我可以編輯答案來添加此信息嗎? – roirodriguez 2012-01-05 09:06:41

+0

@roirodriguez繼續前進:) – 2012-01-05 09:11:10

相關問題