Можно ли использовать ViewerSupport.bind() вместе с изображениями?

В моем Eclipse RCP View я использую привязку данных JFace для привязки данных модели к org.eclipse.jface.viewers.TreeViewer, я использую ViewerSupport.bind() привязать данные, как показано во фрагментах, и это работает просто отлично.

ViewerSupport.bind(viewer, model, BeanProperties.list("children",
          ModelObject.class), BeanProperties.value(ModelObject.class, "name"));

Теперь мне бы очень хотелось отобразить изображение вместе с текстом на узлах. Без привязки данных я бы просто переопределил LabelProvider"s getImage(Object element) метод, но метод поставщика контента + метки и использование ViewerSupport не работайте вместе Я не нашел решения своей проблемы в ViewerSupport API. Есть ли решение, возможно, с использованием org.eclipse.core.databinding.property.value.IValuePropertys?

1 ответ

Решение

ViewerSupport использования ObservableMapLabelProvider в качестве поставщика меток. К сожалению getImage метод для этого просто возвращает null,

Возможно, вы могли бы использовать подкласс ObservableMapLabelProvider предоставить изображения. Вы не можете использовать ViewerSupport чтобы сделать это, вам придется продублировать часть кода.

Вот как ViewerSupport.bind устанавливает дерево:

public static void bind(AbstractTreeViewer viewer, Object input,
        IListProperty childrenProperty, IValueProperty[] labelProperties) {
  Realm realm = DisplayRealm.getRealm(viewer.getControl().getDisplay());

  ObservableListTreeContentProvider contentProvider = new ObservableListTreeContentProvider(
            childrenProperty.listFactory(realm), null);

  if (viewer.getInput() != null)
    viewer.setInput(null);

  viewer.setContentProvider(contentProvider);

  viewer.setLabelProvider(new ObservableMapLabelProvider(Properties
            .observeEach(contentProvider.getKnownElements(),
                    labelProperties)));

  if (input != null)
    viewer.setInput(input);
}
Другие вопросы по тегам