このスレッドで述べたように、パッケージResourceNavigator
から、
後半を見てください。
(そのクラスは直接使用されなくなったため、「late」。EclipseWikiを参照してください)。org.eclipse.ui.views.navigator
( Eclipse Javaモデルに見られるように)
を使用しTreeViewer
、展開された要素と選択された要素などの状態を保存します。
モデル要素はオブジェクトであり、 /メカニズムIResource
を使用して永続化されます。アダプタはクラスに登録されてい
ますが、代わりに、モデル要素を直接実装することで取得できます。
対応するは、 'sの拡張子で宣言されています。IPersistableElement
IElementFactory
IPersistableElement
IResource
WorkbenchAdapter
IPersistableElement
IElementFactory
elementFactory
org.eclipse.ui.ide
plugin.xml
復元されたリソースは、ツリーのコンテンツプロバイダーを介して自分の子(および親)を取得する方法を知っているため、ツリーのすべての要素を永続化する必要はありません。
同様のアプローチを使用して、ビューアの入力リソースを保存できます。
の場合、現在のフレームResourceNavigator
を介した間接参照のレベルがありFrameList
ますが、デバッガーでステップスルーすると、基本的に同じことを実行していることがわかります。
小さな抽出(ただし、コードの残りの部分は、選択を含む他の多くのものも保存します)
if (frameList.getCurrentIndex() > 0) {
//save frame, it's not the "home"/workspace frame
TreeFrame currentFrame = (TreeFrame) frameList.getCurrentFrame();
IMemento frameMemento = memento.createChild(TAG_CURRENT_FRAME);
currentFrame.saveState(frameMemento);
} else {
//save visible expanded elements
Object JavaDoc expandedElements[] = viewer.getVisibleExpandedElements();
if (expandedElements.length > 0) {
IMemento expandedMem = memento.createChild(TAG_EXPANDED);
for (int i = 0; i < expandedElements.length; i++) {
if (expandedElements[i] instanceof IResource) {
IMemento elementMem = expandedMem
.createChild(TAG_ELEMENT);
elementMem.putString(TAG_PATH,
((IResource) expandedElements[i]).getFullPath()
.toString());
}
}
}
[...]
}