Eclipse 4 环境中的 Zoom GEF 应用

Zoom GEF Application in Eclipse 4 Environment

我正在尝试使用 Eclipse 4 在我的 GEF 应用程序中进行缩放。 我已经通过使用 ZoomManager 和 Actions 设法让缩放功能在 Eclipse 3 环境中工作:

ZoomManager manager = rootEditPart.getZoomManager();
getActionRegistry().registerAction(new ZoomInAction(manager));
getActionRegistry().registerAction(new ZoomOutAction(manager));

现在我尝试将我的项目迁移到 Eclipse 4 环境。 据我所知,在 Eclipse 4 中,Actions 被 Commands 取代了。 我已经在我的应用程序中添加了 "ZoomIn command" 和 "ZoomIn handler"。我还找到了一个使用 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 的方法?

谢谢! 托马斯

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

    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();
}