У вас есть хороший пример в Начало работы со свойствами
Использование представления «Свойства» достаточно просто.
Поскольку он показывает свойства для выбранного объекта, первый шаг к его использованию - убедиться, что служба выбора рабочей среды знает об объекте, выбранном в вашем представлении . На тему службы выбора написана целая статья Eclipse Corner
public void createPartControl(Composite parent) {
viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
viewer.setContentProvider(new ViewContentProvider());
viewer.setLabelProvider(new ViewLabelProvider());
getSite().setSelectionProvider(viewer);
viewer.setInput(getViewSite());
}
Как только ваш вид внесет свой вклад в выбор рабочей среды, вы должны убедиться, что объекты, выбранные вашим видом, предоставляют свойства
(экстракт)
public class Person implements IPropertySource {
private String name;
private Object street;
private Object city;
public Person(String name) {
this.name = name;
this.street = "";
this.city = "";
}
public Object getEditableValue() {
return this;
}
public IPropertyDescriptor[] getPropertyDescriptors() {
return new IPropertyDescriptor[] {
new TextPropertyDescriptor("name", "Name"),
new TextPropertyDescriptor("street", "Street"),
new TextPropertyDescriptor("city", "City")
};
}
Ранее я указывал, что это решение «не обязательно [самое] правильное». Это потому, что для того, чтобы это работало, мой доменный объект должен знать об очень ориентированном на представление (и Eclipse-ориентированном) понятии быть источником свойства; короче говоря, существует тесная связь между моделью и представлением, и это не очень хорошо ™.
Лучше использовать адаптер, так как описано в этой статье :
Человек должен реализовать IAdaptable
.
См. Также эту недавнюю статью о , как создать собственное представление свойства
как взломать панель свойств, чтобы прослушать только конкретное представление.
Метод isImportant()
- это тот, который решает, создавать ли IPage для определенного IWorkbenchPart или нет.
Идея состоит в том, чтобы переопределить этот метод и вернуть false для всех workbenchPart
, которые нас не интересуют. Давайте сначала создадим представление:
<view
class="com.eclipse_tips.views.CustomPropertiesView"
icon="icons/sample.gif"
id="com.eclipse-tips.views.customePropertiesView"
name="My Properties View">
</view>
CustomPropertiesView
должен расширяться PropertySheet
и переопределять isImportant()
:
public class CustomPropertiesView extends PropertySheet {
@Override
protected boolean isImportant(IWorkbenchPart part) {
if (part.getSite().getId().equals(IPageLayout.ID_PROJECT_EXPLORER))
return true;
return false;
}
}
В этом случае я создаю представление только для ответа на Project Explorer и игнорирую другие представления
Согласно этой теме , тот же принцип должен быть действителен для редактора, а не для представления.
В окне свойств прослушивается поставщик выбора страницы рабочей среды.
Выбор поставщика зависит от того, какой просмотрщик / редактор активен .
Каждый редактор / средство просмотра предоставляет своего собственного поставщика выбора для использования, когда этот редактор / средство просмотра активен .
Таким образом, лист свойств не заботится о том, кто активен, он просто слушает поставщика выбора.
Таким образом, в зависимости от вида отображается другой набор свойств.
Например, представление Navigator
обеспечивает выбор IResource
, поэтому на листе свойств отображаются свойства IResource
, когда навигатор активен.
Механизм выбора Workbench показан в этой статье
ISelectionListener
- простой интерфейс с одним методом.
Типичная реализация выглядит следующим образом:
private ISelectionListener mylistener = new ISelectionListener() {
public void selectionChanged(IWorkbenchPart sourcepart, ISelection selection) {
if (sourcepart != MyView.this && // 1
selection instanceof IStructuredSelection) { // 2
doSomething(((IStructuredSelection) selection).toList()); // 3
}
}
};
В зависимости от ваших требований реализация вашего слушателя, вероятно, должна решить следующие проблемы, как показано в фрагменте кода выше:
- В случае, если мы также предоставляем выборки (например, представление или редактор ), мы должны исключить наши собственные события выбора из обработки. Это позволяет избежать неожиданных результатов, когда пользователь выбирает элементы в нашей части (1).
- Проверьте, можем ли мы обработать этот вид выбора (2).
- Получить выбранный контент из выбора и обработать его (3).