eclipse使用工作台提供的Memento来支持UI状态保存
1 排序保存
在AddressViewerSorter添加以下代码
调用初始化和保存方法
2 过滤信息存储方法类似
在AressFilter中添加
view中调用:
1 排序保存
在AddressViewerSorter添加以下代码
public class AddressViewerSorter extends ViewerSorter {
//xml元素名
private static final String TAG_DESENDING = "descending";
private static final String TAG_INDEX = "columnIndex";
private static final String TAG_CATEGORY = "category";
private static final String TAG_TRUE = "true";
public void saveState(IMemento memento) {
for (int i = 0; i < infos.length; i++) {
SortInfo info = infos[i];
IMemento mem = memento.createChild(TAG_CATEGORY);
mem.putInteger(TAG_INDEX, info.columnIndex);
if (info.descending)
mem.putString(TAG_DESENDING, TAG_TRUE);
}
}
//...
public void init(IMemento memento) {
List newInfos = new ArrayList(infos.length);
IMemento[] mems = memento.getChildren(TAG_CATEGORY);
for (int i = 0; i < mems.length; i++) {
IMemento mem = mems[i];
Integer value = mem.getInteger(TAG_INDEX);
if (value == null)
continue;
int index = value.intValue();
if (index < 0 || index >= infos.length)
continue;
SortInfo info = infos[index];
if (newInfos.contains(info))
continue;
info.descending = TAG_TRUE.equals(mem.getString(TAG_DESENDING));
newInfos.add(info);
}
for (int i = 0; i < infos.length; i++)
if (!newInfos.contains(infos[i]))
newInfos.add(infos[i]);
infos = (SortInfo[]) newInfos.toArray(new SortInfo[newInfos.size()]);
}
}
调用初始化和保存方法
在view的init方法中获取workbench传递的Imemo对象
public void init(IViewSite site, IMemento memento)throws PartInitException
{
super.init(site, memento);
this.memento = memento;
}
//在创建排序器时,初始化状态
private void createTableSorter() {
//...
if(memento != null)
sorter.init(memento);
}
//保存状态
public void saveState(IMemento memento){
super.saveState(memento);
sorter.saveState(memento);
filterAction.saveState(memento);
}
2 过滤信息存储方法类似
在AressFilter中添加
public class AddressFilter extends Action {
//保存过滤状态
public void saveState(IMemento memento){
categoryFilter.saveState(memento);//具体保存方法
}
//获得保存的过滤状态
public void init(IMemento memento){
categoryFilter.init(memento);//具体初始化方法
}
}
public class AddressViewerCategoryFilter extends ViewerFilter {
//保存在IMemento中的标记名称
private static final String TAG_PATTERN = "pattern";
private static final String TAG_TYPE = "CategoryFilterInfo";
//保存过滤状态
public void saveState(IMemento memento) {
if (pattern.length() == 0)
return;
IMemento mem = memento.createChild(TAG_TYPE);
mem.putString(TAG_PATTERN, pattern);
}
//获得保存的过滤状态
public void init(IMemento memento) {
IMemento mem = memento.getChild(TAG_TYPE);
if (mem == null)
return;
setPattern(mem.getString(TAG_PATTERN));
}
}
view中调用:
// 加到菜单栏
bars.getMenuManager().add(filterAction);
//为持久化UI状态提供支持
if(memento != null)
filterAction.init(memento);
public void saveState(IMemento memento){
super.saveState(memento);
filterAction.saveState(memento);
}