вторник, 17 июня 2008 г.

TabbedPropertySheet vs PropertySheet

В Eclipse в настоящее время реализованы два механизма отображения свойств в PropertyView:
  • PropertySheet - "обычное" представление в виде двухколоночной таблицы "имя параметра" / редактор значения. Поддержка реализуется через наследования от IPropertySource (или с помощью адаптирования). Очень просто реализуется для простых свойств. Подробнее можно почитать здесь
  • TabbedPropertySheet - представление в виде закладок на которых размещаются созданные "вручную" секции с редакторами свойств. Реализуется относительно сложнее, зато результат более адаптирован задачам, то есть более подходит в случае реализации редакторов "сложных" свойств. Подробнее можно почитать здесь.
Однако основной вопрос для меня был: "как можно выбрать какую реализацию будет применять Eclipse для отображения свойств моего view". Оказалось всё просто. Необходимо перегрузить метод getAdapter для вашего view с тем , чтобы он адаптировал ваше view к IPropertySheet:

для PropertySheetPage

public Object getAdapter(Class adapter) {
if (adapter == IPropertySheetPage.class)
return new PropertySheetPage();
return super.getAdapter(adapter);
}

для TabbedPropertySheet
 
public Object getAdapter(Class adapter) {
if(adapter.equals(IPropertySheetPage.class))
return new TabbedPropertySheetPage(new ITabbedPropertySheetPageContributor(){
@Override
public String getContributorId() {
return "MyContributorID";
}
});
return super.getAdapter(adapter);
}


Все это также применимо к CommonNavigator. Для меня была не совсем очевидной сама возможность наследования от CommonNavigator. Но эксперимент показал, что всё нормально :)
Единственное надо не забыть указать именно свой класс-потомок CommonNavigator в объявлении расширения "org.eclipse.ui.views".

К сожалению не удалось обойтись без наследования. Так как определение фабрики/адаптера CommonNavigator к IProperySheePage не работает. Видимо из какого-то модуля аналогичный адаптер уже регистрируется.

Комментариев нет: