按相应选项卡上的关闭图标,检查PartStack内部的零件是否已关闭

时间:2016-05-09 08:38:47

标签: javafx eclipse-rcp rcp e4 efxclipse

平台:Windows 8.1 Pro,带有e(fx)clipse的E4

我正在努力缓存已打开的部件,以便在重新加载PartStack时重新打开。此重新加载方法使用EPartService.hidePart()来关闭PartStack中的所有部件。由于我还需要从缓存中删除部件,因此我需要区分重新加载和实际关闭选项卡/部件。

我已经尝试通过从Part的preDestroy()方法发送事件,再次将部件添加到缓存中,然后再次删除它。但这不太理想。

点击关闭图标或我可以检查的其他方式,是否有特殊事件可以捕获?

感谢您的帮助。

1 个答案:

答案 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) {
        }
    }
}