2012-02-27 57 views
4

我有一個Eclipse插件,它使用延伸爲ViewPart的視圖。 ViewPart有一個saveState方法,它需要一個IMementoEclipse在視圖上調用ViewPart saveState視圖關閉

我將我的代碼添加到saveState和相應的init方法,它的工作原理。不幸的是,saveState僅在整個工作區關閉時才被調用。我的觀點並不那麼重要,我可以預期它會一直開放。因此,如果在視圖關閉時調用saveState將會很酷。

我發現一個視圖部分偵聽器的意思是對視圖封閉作出反應,但我沒有得到的是IMemento來自哪裏。我在哪裏可以得到在工作區關閉時使用的備忘錄對象?或者,如果視圖(重新)打開,我必須在哪裏存儲我自己的紀念品對象,以使視圖部分在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 - 我可以告訴我的觀點在某種程度上告訴調用每個視圖關閉的時間呢?

+0

可否請您提供您的saveState方法 – 2012-02-27 21:34:48

回答

2

嗯,這可能是「有點」醜陋,但沒有別的來到我的腦海:商店紀念變量作爲一個字段變量,初始化它在你的init(IViewSite site, IMemento memento)方法,覆蓋dispose()並調用saveState(IMemento memento)明確地。

+0

''View''的dispose()'可能會在'Widget'被處理後調用,導致'org.eclipse.swt.SWTException':處理Widget當試圖保存這些小部件的狀態 – benez 2016-11-04 18:00:24

0

您可以隨時從您的org.eclipse.core.runtime.Plugin.getStateLocation()中隨時隨地讀寫自己的XMLMemento。正如@BelaViser提到的,你可以在你的IViewPart#dispose()方法中編寫你的文件,並在你的視圖構造函數中讀取它。

4

您可以在Eclipse中常見問題一起來看看這款question

存儲視圖狀態中,這兩個公共的方式完成,這取決於你是否 要存儲在工作臺會話之間或在您的視圖 調用設置。第一個設施直接在IViewPart上找到 。當工作臺關閉時,將在所有打開的視圖上調用方法 saveState。

保持視圖狀態的另一種機制是IDialogSettings工具JFace 。通過 視圖保存/初始化機制,對話框設置的優點在於,您可以控制何時持續保留設置 。只有在工作臺關閉時打開 才調用saveState方法,因此在用戶關閉視圖時,對於存儲視圖 狀態沒有用處。另一方面,對話框的設置可以隨時更改並保持不變。

轉到此其他questionEclipse documentation本身的設置機制。

+0

剛剛遇到這個問題,我得出結論,爲了保存視圖的狀態,DialogSettings效果最好,留下的紀念留給工作臺保存的視圖大小,位置等。DialogSettings從插件中簡單檢索:Activator.getDefault()。getDialogSettings(); – fredrik 2013-08-28 14:54:58