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

#java #eclipse #eclipse-gef

#java #eclipse #eclipse-gef

Вопрос:

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

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

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

Ответ №1:

Попробуйте установить GEF LayoutListener, чтобы переопределить метод #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;
}
  

Комментарии:

1. Если я хочу получать уведомления после отображения диаграммы, является ли добавление LayoutListener единственным решением? Или есть способ, который не включает цифры?

2. Боюсь, что нет. Вам нужен ограничивающий прямоугольник диаграммы, чтобы определить коэффициент масштабирования. Ограничивающий прямоугольник определяется макетом.