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



在 e3 中创建不可恢复的视图,我在扩展org.eclipse.ui.views中将字段"可恢复"设置为 false,它可以工作。在我的 e4 应用程序中,我创建了带有标签"NoRestore"的 PartDescriptor,但它什么也不做。重新启动后,将显示部件。我做错了什么?还是虫子?

如果让 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);
  }
}

它只是找到一个部分并关闭"待渲染"标志。

为了与未来版本(其中将存在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 方法中。

最新更新