Như đã đề cập trong this thread, hãy nhìn vào cuối ResourceNavigator
, thuộc về gói org.eclipse.ui.views.navigator
.
("muộn" vì lớp đó không còn được sử dụng trực tiếp, xem Eclipse Wiki).
(như đã thấy trong eclipse Java Model)
Nó sử dụng một TreeViewer
, và tiết kiệm các yếu tố mở rộng và các yếu tố được lựa chọn, trong số những trạng thái khác.
Các yếu tố mô hình là các đối tượng IResource
, được tiếp tục sử dụng cơ chế IPersistableElement
/IElementFactory
.
Bộ điều hợp IPersistableElement
được đăng ký với IResource
trong lớp WorkbenchAdapter
, nhưng thay vào đó, yếu tố mô hình này có thể được lấy trực tiếp bằng cách thực hiện trực tiếp IPersistableElement
.
Tương ứng IElementFactory
được khai báo trong một phần mở rộng elementFactory
trong org.eclipse.ui.ide
's plugin.xml
.
Tài nguyên đã khôi phục biết cách nhận con riêng (và cha mẹ), thông qua nhà cung cấp nội dung của cây, vì vậy không phải tất cả các yếu tố của cây cần được duy trì.
Cách tiếp cận tương tự có thể được sử dụng để lưu tài nguyên đầu vào của người xem.
Đối với ResourceNavigator
, có mức độ gián đoạn ở đây thông qua khung hiện tại của FrameList
, nhưng nếu bạn duyệt qua nó trong trình gỡ rối, bạn sẽ thấy rằng về cơ bản nó cũng làm như vậy.
chiết xuất nhỏ (nhưng phần còn lại của mã tiết kiệm cũng có nhiều thứ khác, bao gồm lựa chọn)
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());
}
}
}
[...]
}
Cảm ơn, nó hoạt động sau khi triển khai phương thức equals và hashset .. – penguru