在Eclipse 4环境中缩放GEF应用程序

时间:2016-06-13 12:25:13

标签: eclipse zoom e4 eclipse-gef

我正在尝试使用Eclipse 4在我的GEF应用程序中进行缩放。 我已经设法通过使用ZoomManager和Actions:

在Eclipse 3环境中使缩放功能正常工作
ZoomManager manager = rootEditPart.getZoomManager();
getActionRegistry().registerAction(new ZoomInAction(manager));
getActionRegistry().registerAction(new ZoomOutAction(manager));

现在我尝试将项目迁移到Eclipse 4环境。 据我所知,Actions被Eclipse 4中的命令取代。 我已经在我的应用程序中添加了“ZoomIn命令”和“ZoomIn处理程序”。我还找到了一个使用ScalableFreeformLayeredPane的例子。

private static ScalableFreeformLayeredPane root;

@Inject
@Optional
private void subscribeTopicViewZoomIn(@UIEventTopic(Events.TOPIC_VIEW_ZOOMIN) Map<String, String> event) {
    double curScale = root.getScale();

    if (curScale <= 2.9)
        root.setScale(curScale + 0.1);
}

我的问题是,我不知道如何将此ScalableFreeformLayeredPane与我用于显示模型的ScrollingGraphicalViewer连接:

private static ScrollingGraphicalViewer viewer = new ScrollingGraphicalViewer();
private static Model model = new Model();

    @PostConstruct
    public void postConstruct(Composite parent) {

    viewer.createControl(parent);

    viewer.setEditPartFactory(editPartFactory);
    viewer.setEditDomain(new DefaultEditDomain(this));

    CreateModel();

    viewer.setContents(model);

}

有人可以帮助我或提供一个例子吗? 或者,如果不使用ScalableFreeformLayeredPane,还有其他方法吗?

谢谢! 托马斯

1 个答案:

答案 0 :(得分:1)

我终于找到了适合我的解决方案:

    private ZoomManager manager;

    @Override
    protected void initializeGraphicalViewer() {
        double[] zoomLevels;
        ArrayList<String> zoomContributions;

        ScalableRootEditPart rootEditPart = (ScalableRootEditPart) viewer.getRootEditPart();

        manager = rootEditPart.getZoomManager();

        zoomLevels = new double[] {0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.25, 1.5, 1.75, 2.0, 2.5, 3.0, 4.0, 5.0};
        manager.setZoomLevels(zoomLevels);

        zoomContributions = new ArrayList<String>();

        manager.setZoomLevelContributions(zoomContributions);
    }

使用此配置,我可以使用命令和事件来访问ZoomManager:

@Inject
@Optional
private void subscribeTopicViewZoomIn(@UIEventTopic(Events.TOPIC_VIEW_ZOOMIN) Map<String, String> event) {

    manager.setZoom(manager.getNextZoomLevel());
    updateZoomCombo();
}