@Override
 public void reveal(Object element) {
   Assert.isNotNull(element);
   int index = getElementIndex(element);
   if (index == -1) {
     return;
   }
   // algorithm patterned after List.showSelection()
   int count = list.getItemCount();
   if (count == 0) {
     return;
   }
   int height = list.getItemHeight();
   Rectangle rect = list.getClientArea();
   int topIndex = list.getTopIndex();
   int visibleCount = Math.max(rect.height / height, 1);
   int bottomIndex = Math.min(topIndex + visibleCount, count) - 1;
   if ((topIndex <= index) && (index <= bottomIndex)) {
     return;
   }
   int newTop = Math.min(Math.max(index - (visibleCount / 2), 0), count - 1);
   list.setTopIndex(newTop);
 }
 @Override
 protected int listGetTopIndex() {
   return list.getTopIndex();
 }