平台:Windows 8.1 Pro,带有e(fx)clipse的E4
我正在努力缓存已打开的部件,以便在重新加载PartStack时重新打开。此重新加载方法使用EPartService.hidePart()来关闭PartStack中的所有部件。由于我还需要从缓存中删除部件,因此我需要区分重新加载和实际关闭选项卡/部件。
我已经尝试通过从Part的preDestroy()方法发送事件,再次将部件添加到缓存中,然后再次删除它。但这不太理想。
点击关闭图标或我可以检查的其他方式,是否有特殊事件可以捕获?
感谢您的帮助。
答案 0 :(得分:1)
事实证明,做我想做的最简单的方法就是使用标签。 由于我只能访问程序关闭零件时的代码,因此我需要在零件上设置标签。
if (part.isDirty()) {
if(!partService.savePart(part, true)) {
return;
}
part.getTags().add(Tag.PART_CLOSED_BY_PROGRAM);
partService.hidePart(part);
} else if (part.isCloseable()) {
part.getTags().add(Tag.PART_CLOSED_BY_PROGRAM);
partService.hidePart(part);
}
}
现在我可以检查preDestroy()方法,如果程序或用户正在关闭Part。
@PreDestroy
protected void preDestroy() {
if (part.getTags().contains(Tag.PART_CLOSED_BY_PROGRAM)) {
part.getTags().remove(Tag.PART_CLOSED_BY_PROGRAM);
} else {
try {
//remove "Part" from cache
} catch (IllegalAccessException e) {
} catch (InvocationTargetException e) {
} catch (NoSuchMethodException e) {
}
}
}