Bug 393812 - find dialog gives error when select non-top level items from the dialog for variables/expressions/registers views.

Conflicts:

	org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/VirtualCopyToClipboardActionDelegate.java
	org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/VirtualFindAction.java
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/VirtualCopyToClipboardActionDelegate.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/VirtualCopyToClipboardActionDelegate.java
index bc8dd76..afb1eae 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/VirtualCopyToClipboardActionDelegate.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/VirtualCopyToClipboardActionDelegate.java
@@ -25,16 +25,13 @@
 import org.eclipse.debug.internal.ui.actions.ActionMessages;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.ILabelUpdate;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
-import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.IVirtualItemListener;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.IVirtualItemValidator;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.ModelDelta;
-import org.eclipse.debug.internal.ui.viewers.model.provisional.PresentationContext;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.TreeModelViewer;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.VirtualItem;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.VirtualItem.Index;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.VirtualTreeModelViewer;
-import org.eclipse.debug.ui.IDebugUIConstants;
 import org.eclipse.debug.ui.IDebugView;
 import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.dialogs.MessageDialog;
@@ -149,36 +146,6 @@
 		}
 	}
 
-    private IPresentationContext makeVirtualPresentationContext(final IPresentationContext clientViewerContext) {
-        return new PresentationContext(clientViewerContext.getId()) {
-            {
-                String[] clientProperties = clientViewerContext.getProperties();
-                for (int i = 0; i < clientProperties.length; i++) {
-                    setProperty(clientProperties[i], clientViewerContext.getProperty(clientProperties[i]));
-                }
-                    
-            }
-            
-            public String[] getColumns() {
-                String[] clientColumns = super.getColumns();
-                
-                if (clientColumns == null || clientColumns.length == 0) {
-                    // No columns are used.
-                    return null;
-                }
-                
-                // Try to find the name column.
-                for (int i = 0; i < clientColumns.length; i++) {
-                    if (IDebugUIConstants.COLUMN_ID_VARIABLE_NAME.equals(clientColumns[i])) {
-                        return new String[] { IDebugUIConstants.COLUMN_ID_VARIABLE_NAME }; 
-                    }
-                }
-                
-                return new String[] { clientColumns[0] };
-            }
-        };
-    }
-	
 	private class ItemsToCopyVirtualItemValidator implements IVirtualItemValidator {
 	    
 	    Set fItemsToCopy = Collections.EMPTY_SET;
@@ -211,12 +178,17 @@
         VirtualTreeModelViewer virtualViewer = new VirtualTreeModelViewer(
             clientViewer.getDisplay(), 
             SWT.VIRTUAL, 
-            makeVirtualPresentationContext(clientViewer.getPresentationContext()), 
+            clientViewer.getPresentationContext(), 
             validator); 
         virtualViewer.setFilters(clientViewer.getFilters());
         virtualViewer.addLabelUpdateListener(listener);
         virtualViewer.getTree().addItemListener(listener);
+        String[] columns = clientViewer.getPresentationContext().getColumns();
         virtualViewer.setInput(input);
+        if (virtualViewer.canToggleColumns()) {
+            virtualViewer.setShowColumns(clientViewer.isShowColumns());
+            virtualViewer.setVisibleColumns(columns);
+        }
         virtualViewer.updateViewer(stateDelta);
         
         // Parse selected items from client viewer and add them to the virtual viewer selection.
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/VirtualFindAction.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/VirtualFindAction.java
index a7f0007..4306ee6 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/VirtualFindAction.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/VirtualFindAction.java
@@ -29,15 +29,12 @@
 import org.eclipse.debug.internal.ui.viewers.model.provisional.ILabelUpdate;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDeltaVisitor;
-import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdate;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdateListener;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.ModelDelta;
-import org.eclipse.debug.internal.ui.viewers.model.provisional.PresentationContext;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.TreeModelViewer;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.VirtualItem;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.VirtualTreeModelViewer;
-import org.eclipse.debug.ui.IDebugUIConstants;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.dialogs.ProgressMonitorDialog;
 import org.eclipse.jface.operation.IRunnableWithProgress;
@@ -158,49 +155,20 @@
         VirtualTreeModelViewer fVirtualViewer = new VirtualTreeModelViewer(
             clientViewer.getDisplay(), 
             SWT.NONE, 
-            makeVirtualPresentationContext(clientViewer.getPresentationContext()));
+            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;
 	}
 	
-	private IPresentationContext makeVirtualPresentationContext(final IPresentationContext clientViewerContext) {
-	    return new PresentationContext(clientViewerContext.getId()) {
-	        
-	        {
-	            String[] clientProperties = clientViewerContext.getProperties();
-	            for (int i = 0; i < clientProperties.length; i++) {
-	                setProperty(clientProperties[i], clientViewerContext.getProperty(clientProperties[i]));
-	            }
-	                
-	        }
-	        
-	        public String[] getColumns() {
-	            String[] clientColumns = super.getColumns();
-	            
-	            if (clientColumns == null || clientColumns.length == 0) {
-	                // No columns are used.
-	                return null;
-	            }
-	            
-	            // Try to find the name column.
-	            for (int i = 0; i < clientColumns.length; i++) {
-	                if (IDebugUIConstants.COLUMN_ID_VARIABLE_NAME.equals(clientColumns[i])) {
-	                    return new String[] { IDebugUIConstants.COLUMN_ID_VARIABLE_NAME }; 
-	                }
-	            }
-	            
-	            return new String[] { clientColumns[0] };
-	        }
-	    };
-	}
-	
 	public void run() {
 	    final VirtualViewerListener listener = new VirtualViewerListener();
 	    VirtualTreeModelViewer virtualViewer = initVirtualViewer(fClientViewer, listener);