Как работать с таблицей свойств из настраиваемого редактора при разработке плагина eclipse? - PullRequest
3 голосов
/ 19 ноября 2009

Мне нужно привязать объекты виджета редактора в окне свойств. Так что я могу узнать свойство моего виджета из представления свойств. Пожалуйста, помогите мне в этом, если возможно, предоставьте мне некоторые фрагменты кода.

1 Ответ

10 голосов
/ 19 ноября 2009

У вас есть хороший пример в Начало работы со свойствами

Использование представления «Свойства» достаточно просто.
Поскольку он показывает свойства для выбранного объекта, первый шаг к его использованию - убедиться, что служба выбора рабочей среды знает об объекте, выбранном в вашем представлении . На тему службы выбора написана целая статья 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.


См. Также эту недавнюю статью о , как создать собственное представление свойства

http://3.bp.blogspot.com/_hsp14iFkRLs/Sg28gW12WnI/AAAAAAAADk4/Y_bxy5lHIvI/s320/PinActionRemoved.png

как взломать панель свойств, чтобы прослушать только конкретное представление.

Метод 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 и игнорирую другие представления

http://2.bp.blogspot.com/_hsp14iFkRLs/Sg28Nwe3QSI/AAAAAAAADko/DqnVd7obB1Y/s320/CustomPropertiesProjectExplore.png


Согласно этой теме , тот же принцип должен быть действителен для редактора, а не для представления.

В окне свойств прослушивается поставщик выбора страницы рабочей среды.
Выбор поставщика зависит от того, какой просмотрщик / редактор активен .
Каждый редактор / средство просмотра предоставляет своего собственного поставщика выбора для использования, когда этот редактор / средство просмотра активен .
Таким образом, лист свойств не заботится о том, кто активен, он просто слушает поставщика выбора.
Таким образом, в зависимости от вида отображается другой набор свойств.
Например, представление 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).

http://www.eclipse.org/articles/Article-WorkbenchSelections/images/diagram1.gif

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...