如何在e4应用程序中创建不可恢复的部分

时间:2018-01-25 11:28:00

标签: eclipse eclipse-rcp e4

在e3中创建不可恢复的视图我在扩展名org.eclipse.ui.views中将字段“restorable”设置为false并且它有效。在我的e4应用程序中,我使用标签“NoRestore”创建了PartDescriptor,但它什么也没做。重启后显示部件。我做错了什么?或者是bug?

2 个答案:

答案 0 :(得分:2)

如果让e4在退出时保存工作台模型,它将在下次启动RCP时完全恢复。不支持NoRestore代码。

启动时指定-clearPersistedState标志会将模型重置为初始状态。您还可以指定-persistState false以停止退出时保存的模型。

如果您只想处理一个部分,可以在启动期间更改生命周期类中的模型。类似的东西:

@ProcessAdditions
public void processAdditions(MApplication app, EModelService modelService)
{
  MUIElement el = modelService.find("your part id", app);
  if (el != null) {
    el.setToBeRendered(false);
  }
}

只找到一个部分并关闭要呈现的'标志。

答案 1 :(得分:1)

为了与将来版本兼容,IPresentationEngine.NO_RESTORE(" NoRestore")标记将存在,您可以使用以下代码。

@PreSave
void preSave(MApplication a_app, EModelService a_modelService){

    ArrayList<MElementContainer<MUIElement>> containers = new ArrayList<>();
    List<MPart> parts = a_modelService.findElements(a_app, null, MPart.class, Arrays.asList("NoRestore"));
    parts.forEach(p -> {
        p.setToBeRendered(false); // hide parts 
        containers.add(p.getParent()); // collect containers with no restorable parts
    });
    // hide containers which contains only no restorable parts
    containers.stream().filter(c -> c.getChildren().stream().allMatch(ch -> ch.getTags().contains("NoRestore"))).forEach(c -> c.setToBeRendered(false));
}

请注意。尝试向注释@ProcessAdditions@ProcessRemovals的方法添加相同的代码没有帮助:发生错误,重新启动应用程序后没有显示任何部分。所以我将代码添加到@PreSave方法。