在E4中打开编辑器部分

时间:2017-05-04 11:52:46

标签: java eclipse-plugin e4

在E3中,这是一个基本用例:我们想要根据某个模型对象打开一个编辑器(或视图或部件,无论你想要什么),然后包装在IEditorInput中。

在E4中,这似乎是在没有替换的情况下被删除的功能之一。但是你可以重新发明轮子:

public static final String DATA_MODEL = "model";
@Inject
private EPartService partService;
@Inject
private EPartService partService;
@Inject
private MApplication application;

public void open(String editorId, Object editorInput) {
    MPart part = this.partService.createPart(editorId);
    part.getTransientData().put(DATA_MODEL, editorInput);
    this.partService.showPart(part, PartState.ACTIVATE);

    PartStack editorStack = (MPartStack) 
        this.modelService.find("org.acme.application.stack", this.application);
    editorStack.setVisible(true);
    editorStack.getChildren().add(part);
}

(如果我错了,请纠正我。这似乎是丑陋和过于复杂的方式,是正确的方法™。)

那么,如果已有编辑器输入怎么办?在E3中,编辑器刚刚被置于顶部并被激活。在E4 ......好吧,由于没有编辑器,应用程序无法处理这种情况也就不足为奇了。

所以我们在上面的方法的顶部添加了以下内容:

    for (final MPart part : this.partService.getParts()) {
        if (part.getElementId().equals(editorId)
                && Objects.equals(editorId, part.getTransientData().get(DATA_MODEL)))
            this.partService.showPart(part, PartState.ACTIVATE);
            return;
    }

它有效,这里没问题。对于基本功能而言,这只是一项工作,所以现在我们认为我们并不真正了解E4应该如何工作。

我们错过了什么吗?这真的是处理输入零件的正确方法吗?这个标准用例是否没有框架支持?

0 个答案:

没有答案