Eclipse在View上调用ViewPart saveState关闭

时间:2012-02-27 21:06:14

标签: eclipse-plugin savestate memento

我有一个Eclipse插件,它使用扩展ViewPart的视图。 ViewPartsaveState方法,需要IMemento

我将代码添加到saveState以及相应的init方法,但它确实有效。不幸的是,只有在整个工作区正在关闭时才会调用saveState。我的观点并不是那么重要,以至于我可以期待它一直被打开。因此,如果在视图闭包上调用saveState,那将会很酷。

我发现一个视图部分监听器是对视图闭包做出反应的意思,但我没有得到的是IMemento的来源。我在哪里获得工作区关闭时使用的memento对象?或者,如果(重新)打开视图,我必须在哪里存储我自己的memento对象以使视图部分在init方法中使用它?

@Override
public void saveState(IMemento memento) {
    super.saveState(memento);
    memento = memento.createChild(MEMENTO_GUI_STATE);
    memento.putBoolean(MEMENTO_IS_FLAT, !isHierarchicalModeActive());
    memento.putBoolean(MEMENTO_IS_CATEGORY_MODE_ACTIVE, comboViewer.isVisible());
}

这是我的saveState - 我可以告诉我的观点以某种方式告诉每次视图关闭时调用它吗?

3 个答案:

答案 0 :(得分:4)

在Eclipse FAQ中查看此question

  

存储视图状态是以两种方式完成的,具体取决于是否   您希望在工作台会话之间存储设置   调用你的观点。找到了第一个这样的设施   直接在IViewPart上。当工作台关闭时,该方法   在所有打开的视图上调用saveState。

     

持久化视图状态的另一种机制是JFace   IDialogSettings设施。对话框设置优于   查看保存/初始化机制是您可以控制何时进行设置   持续存在。仅当视图处于打开状态时才会调用saveState方法   当工作台关闭时,它对存储视图没有用   当用户关闭视图时的状态。对话框设置,在   另一方面,可以随时更改和保留。

转到其他questionEclipse documentation本身获取设置机制。

答案 1 :(得分:2)

这可能有点“丑陋”,但我没想到:将memento变量存储为字段变量,在init(IViewSite site, IMemento memento)方法中初始化,覆盖dispose()并调用{{1明确地说。

答案 2 :(得分:0)

您可以随时从org.eclipse.core.runtime.Plugin.getStateLocation()读取和编写自己的XMLMemento。正如@BelaViser所提到的,您可以在IViewPart#dispose()方法中编写文件,并在视图构造函数中阅读它。