我有一個貢獻的命令和處理程序。處理程序的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())的引用。
有沒有人對此有任何線索,或者有任何其他可能的解決方法?
我已經在我的命令處理程序中添加了一個私有「選擇」屬性,併爲其添加了一個getter/setter作爲自定義通知/更新處理程序的方式。我認爲用IHandlerService更新答案和有關如何查找處理程序的信息會很有趣,我可以編輯答案來添加此信息嗎? – roirodriguez 2012-01-05 09:06:41
@roirodriguez繼續前進:) – 2012-01-05 09:11:10