Как я могу заставить GEF GraphicalViewer соответствовать представлению / редактору, в котором он находится?

1

Мой ScrollingGraphicalViewer отображается в ViewPart. Однако, если содержащаяся диаграмма больше, чем ViewPart, появляется полоса прокрутки, и вся диаграмма не отображается. Вместо этого я хотел бы уменьшить масштаб, пока вся диаграмма не будет видна без прокрутки.

Я уже пробовал вызывать viewer.zoomTo(Rectangle), но, видимо, этот метод еще не реализован. Есть ли другой способ достичь этого?

Мне все еще нужна функция прокрутки, поэтому я должен использовать ScrollingGraphicalViewer. Просто, когда ViewPart открывается впервые, масштабирование должно быть отрегулировано, как описано выше.

Теги:
eclipse-gef

1 ответ

1
Лучший ответ

Попробуйте установить GEF LayoutListener на диаграмму. Переопределите содержимое. Editpart #createFigure() метод (например, DiagramEditPart # createFigure(). Что-то вроде этого:

protected IFigure createFigure() {
    IFigure f = super.createFigure();
    f.addLayoutListener(new LayoutListener.Stub(IFigure container) {
        public void postLayout() {
             Rectangle diagramBounds = new PrecisionRectangle(container.getBounds());
             container.translateToAbsolute(diagramBounds);

             /*
              * Do the scale factor calculation based on you viewport/control size
              */

             ZoomManager zoomManager = (ZoomManager)DiuagramEditPart.this.getViewer().getProperty(ZoomManager.class.toString());
             if (zoomManager != null) {
                  zoomManager.setScale(scaleFactor);
             }
        }
    });
    return f;
}
  • 0
    Если я хочу получать уведомления после отображения диаграммы, является ли добавление LayoutListener единственным решением? Или есть способ, который не включает цифры?
  • 0
    Боюсь, что нет. Вам нужен ограничительный прямоугольник диаграммы, чтобы определить коэффициент масштабирования. Ограничивающий прямоугольник определяется макетом.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню