Использование службы выбора на чем-то, что не * представление JFace - PullRequest
1 голос
/ 24 апреля 2009

Я создаю редактор изображений как плагин Eclipse.

Я хотел бы использовать представление «Свойства» для просмотра и редактирования свойств модели под изображением. Соответственно звоню ..

getSite().setSelectionProvider( this );

.. внутри createPartControl и реализации интерфейса ISelectionProvider в моей реализации EditorPart, так что модель возвращается в качестве выбора (который, следовательно, должен реализовывать интерфейс ISelection).

Следующим шагом для редактора будет реализация IAdaptable для предоставления адаптера для выбранного объекта.

Однако моя проблема заключается в том, что getAdapter никогда не вызывается с IPropertySource.class, и, следовательно, представление свойств никогда не получает того, что необходимо для понимания модели изображения.

Ваша помощь очень ценится.

М.

1 Ответ

2 голосов
/ 05 мая 2009

В конце ответ разбился на несколько частей ...

1.) Когда ваш выбор действительно изменится (например, если пользователь увеличил изображение), обязательно сообщите об этом Eclipse. Иначе не будет.

2.) При отправке SelectionChangedEvent оберните свой IAdaptable в объект StructuredSelection - в противном случае представление Properties будет игнорировать его.

Это сводилось к следующему методу

public void fireSelectionChanged()
{
    final SelectionChangedEvent event = new SelectionChangedEvent( this, new StructuredSelection( this  ) );
    Object[] listeners = selectionChangedListeners.getListeners();
    for (int i = 0; i < listeners.length; ++i) 
    {
        final ISelectionChangedListener l = (ISelectionChangedListener) listeners[i];
        SafeRunnable.run(new SafeRunnable() {
            public void run() {
                l.selectionChanged( event );
            }
        });
    }
}

... в классе, который реализовал ISelectionProvider & IAdaptable.

М.

...