private VirtualTreeModelViewer initVirtualViewer(
     TreeModelViewer clientViewer, VirtualViewerListener listener) {
   Object input = clientViewer.getInput();
   ModelDelta stateDelta = new ModelDelta(input, IModelDelta.NO_CHANGE);
   clientViewer.saveElementState(TreePath.EMPTY, stateDelta, IModelDelta.EXPAND);
   listener.fRemainingUpdatesCount = calcUpdatesCount(stateDelta);
   VirtualTreeModelViewer fVirtualViewer =
       new VirtualTreeModelViewer(
           clientViewer.getDisplay(), SWT.NONE, clientViewer.getPresentationContext());
   fVirtualViewer.setFilters(clientViewer.getFilters());
   fVirtualViewer.addViewerUpdateListener(listener);
   fVirtualViewer.addLabelUpdateListener(listener);
   String[] columns = clientViewer.getPresentationContext().getColumns();
   fVirtualViewer.setInput(input);
   if (fVirtualViewer.canToggleColumns()) {
     fVirtualViewer.setShowColumns(clientViewer.isShowColumns());
     fVirtualViewer.setVisibleColumns(columns);
   }
   fVirtualViewer.updateViewer(stateDelta);
   return fVirtualViewer;
 }