* @param field the field to sort by
* @param sortDir the sort dir
*/
public void sort(String field, SortDir sortDir) {
final StoreEvent<M> event = createStoreEvent();
event.setSortInfo(new SortInfo(field, sortDir));
if (!fireEvent(BeforeSort, event)) {
return;
}
SortInfo prev = new SortInfo(sortInfo.getSortField(), sortInfo.getSortDir());
if (sortDir == null) {
if (sortInfo.getSortField() != null && !sortInfo.getSortField().equals(field)) {
sortInfo.setSortDir(SortDir.NONE);
}
switch (sortInfo.getSortDir()) {
case ASC:
sortDir = SortDir.DESC;
break;
case DESC:
case NONE:
sortDir = SortDir.ASC;
break;
}
}
sortInfo.setSortField(field);
sortInfo.setSortDir(sortDir);
if (loader != null && loader.isRemoteSort()) {
Listener<LoadEvent> l = new Listener<LoadEvent>() {
public void handleEvent(LoadEvent le) {
loader.removeListener(Loader.Load, this);
event.setSortInfo(sortInfo);
fireEvent(Sort, event);
}
};
loader.addListener(Loader.Load, l);
loader.setSortDir(sortDir);
loader.setSortField(field);
if (!loader.load()) {
loader.removeListener(Loader.Load, l);
sortInfo.setSortField(prev.getSortField());
sortInfo.setSortDir(prev.getSortDir());
}
} else {
applySort(false);
fireEvent(DataChanged, event);
}