通过按相应选项卡上的关闭图标来检查 PartStack 内的部件是否已关闭
Checking if a Part inside of a PartStack was closed by pressing the close icon on the corresponding tab
平台:Windows 8.1 Pro,E4 与 e(fx)clipse
我目前正在缓存打开的部件,以便在重新加载 PartStack 时重新打开。这种重新加载方法使用 EPartService.hidePart() 来关闭 PartStack 中的所有 Part。由于我还需要从缓存中删除部件,因此我需要区分重新加载和实际关闭 tab/Part.
我已经尝试通过从部件的 preDestroy() 方法发送事件再次将部件添加到缓存中,然后再次将其删除。但这并不理想。
点击关闭图标时是否有我可以捕捉到的特殊事件或我可以检查的其他方式?
感谢您的帮助。
事实证明,完成我想做的事情的最简单方法是使用标签。
因为我只能访问程序关闭零件时的代码,所以我需要在零件上设置一个标签。
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) {
}
}
}
平台:Windows 8.1 Pro,E4 与 e(fx)clipse
我目前正在缓存打开的部件,以便在重新加载 PartStack 时重新打开。这种重新加载方法使用 EPartService.hidePart() 来关闭 PartStack 中的所有 Part。由于我还需要从缓存中删除部件,因此我需要区分重新加载和实际关闭 tab/Part.
我已经尝试通过从部件的 preDestroy() 方法发送事件再次将部件添加到缓存中,然后再次将其删除。但这并不理想。
点击关闭图标时是否有我可以捕捉到的特殊事件或我可以检查的其他方式?
感谢您的帮助。
事实证明,完成我想做的事情的最简单方法是使用标签。 因为我只能访问程序关闭零件时的代码,所以我需要在零件上设置一个标签。
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) {
}
}
}