Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Eclipse Projects » JFace » Issue with default Sorting on Virtual Table & ViewerComparator(Issue with default Sorting on Virtual Table & ViewerComparator)
Issue with default Sorting on Virtual Table & ViewerComparator [message #829783] Mon, 26 March 2012 15:32
Santhosh Missing name is currently offline Santhosh Missing name
Messages: 12
Registered: July 2009
Junior Member
We have a Virtual Table in our Eclipse RCP application. We make a call to the backend to retrieve the data to be populated in the virtual table.

We want default sorting on the table on a single column. We use ViewerComparator to achieve sorting functionality. My problem is, I am not able to get this sorting working when the table loads with the data for the 1st time. But when I click on the column, everything works fine as expected.

This is how, I set the Comparator to the column

TableViewerColumn tvc = viewer.addColumn(100, SWT.LEFT, "Name");
viewer.setColumnComparator(tvc,
new Comparator<Person>() {
@Override
public int compare(Person o1,Person o2) {
double firstValue = Double.parseDouble(o1
.getAge());
double secondValue = Double.parseDouble(o2
.getAge());
return firstValue > secondValue ? 1 : -1;
}

});

setColumnComparator method in custom viewer

public void setColumnComparator(TableViewerColumn tvc, Comparator<T> cmp){
final MyViewerComparator c = new MyViewerComparator(cmp);
final TableColumn tc = tvc.getColumn();

setComparator(c);
getTable().setSortDirection(c.getDirection());
getTable().setSortColumn(tc);
refresh();

tc.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
<same code as above>
}
});

MyViewerComparator

class MyViewerComparator extends ViewerComparator{
Comparator<T> cmp;
boolean desc = true;
MyViewerComparator(Comparator<T> cmp){
this.cmp = cmp;
}
int getDirection(){
return desc?SWT.UP:SWT.DOWN;
}

void flipDirection(){
desc = !desc;
}

@Override
public int compare(Viewer viewer, Object e1, Object e2) {

if(e1 == null || e2==null){
return 0;
}
int rc = cmp.compare((T)e1, (T)e2);
if(desc)
return -rc;
return rc;
}
}
When the table loads the data for the 1st time, it goes inside the Bolded condition in the above code as one of the object is ALWAYS NULL

Note: This functionality works totally fine if I use a Standard table rather than VIRTUAL TABLE. I am not sure whether I can change it to use Standard table as we want the lazy load functionality as well..

ContentProvider used is: ObservableListContentProvider

Could you please advise on this issue and provide a solution for the same?

Thanks in Advance
Previous Topic:Cell vertical block selection in Table/Tree Viewer
Next Topic:[Databinding] Is this a good Master-Details-Binding pattern for my use case?
Goto Forum:
  


Current Time: Wed Apr 23 02:46:46 EDT 2014

Powered by FUDForum. Page generated in 0.01494 seconds