cdt/cdt_5_0_x/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/executables/ExecutablesContentProvider.java
changeset 14 c50c3d06898c
parent 0 0e6d23e2b466
equal deleted inserted replaced
8:2cfb52d98e82 14:c50c3d06898c
    15 import java.util.Date;
    15 import java.util.Date;
    16 
    16 
    17 import org.eclipse.cdt.debug.core.executables.Executable;
    17 import org.eclipse.cdt.debug.core.executables.Executable;
    18 import org.eclipse.cdt.debug.core.executables.ExecutablesManager;
    18 import org.eclipse.cdt.debug.core.executables.ExecutablesManager;
    19 import org.eclipse.core.runtime.IPath;
    19 import org.eclipse.core.runtime.IPath;
    20 import org.eclipse.core.runtime.IProgressMonitor;
       
    21 import org.eclipse.core.runtime.IStatus;
       
    22 import org.eclipse.core.runtime.jobs.Job;
       
    23 import org.eclipse.jface.viewers.ColumnLabelProvider;
    20 import org.eclipse.jface.viewers.ColumnLabelProvider;
    24 import org.eclipse.jface.viewers.IStructuredContentProvider;
    21 import org.eclipse.jface.viewers.IStructuredContentProvider;
    25 import org.eclipse.jface.viewers.ITreeContentProvider;
    22 import org.eclipse.jface.viewers.ITreeContentProvider;
    26 import org.eclipse.jface.viewers.TreeViewer;
    23 import org.eclipse.jface.viewers.TreeViewer;
    27 import org.eclipse.jface.viewers.Viewer;
    24 import org.eclipse.jface.viewers.Viewer;
    28 import org.eclipse.jface.viewers.ViewerCell;
    25 import org.eclipse.jface.viewers.ViewerCell;
    29 
    26 
    30 class ExecutablesContentProvider extends ColumnLabelProvider implements IStructuredContentProvider, ITreeContentProvider {
    27 class ExecutablesContentProvider extends ColumnLabelProvider implements IStructuredContentProvider, ITreeContentProvider {
    31 
    28 
    32 	private TreeViewer viewer;
       
    33 
       
    34 	public ExecutablesContentProvider(TreeViewer viewer) {
    29 	public ExecutablesContentProvider(TreeViewer viewer) {
    35 		this.viewer = viewer;
       
    36 	}
    30 	}
    37 
    31 
    38 	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
    32 	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
    39 	}
    33 	}
    40 
    34 
    41 	public void dispose() {
    35 	public void dispose() {
    42 	}
    36 	}
    43 
    37 
    44 	public Object[] getElements(final Object inputElement) {
    38 	public Object[] getElements(final Object inputElement) {
    45 		if (inputElement instanceof ExecutablesManager) {
    39 		if (inputElement instanceof ExecutablesManager) {
    46 			final ExecutablesManager em = (ExecutablesManager) inputElement;
    40 			ExecutablesManager em = (ExecutablesManager) inputElement;
    47 			if (em.refreshNeeded()) {
    41 			return em.getExecutables().toArray();
    48 				// do this asynchronously. just return an empty array
       
    49 				// immediately, and then refresh the view
       
    50 				// once the list of executables has been calculated. this can
       
    51 				// take a while and we don't want
       
    52 				// to block the UI.
       
    53 				Job refreshJob = new Job(Messages.ExecutablesContentProvider_FetchingExecutables) {
       
    54 
       
    55 					@Override
       
    56 					protected IStatus run(IProgressMonitor monitor) {
       
    57 						IStatus status = em.refreshExecutables(monitor);
       
    58 
       
    59 						// Are we in the UIThread? If so spin it until we are done
       
    60 						if (!viewer.getControl().isDisposed()) {
       
    61 							if (viewer.getControl().getDisplay().getThread() == Thread.currentThread()) {
       
    62 								viewer.refresh(inputElement);
       
    63 							} else {
       
    64 								viewer.getControl().getDisplay().asyncExec(new Runnable() {
       
    65 									public void run() {
       
    66 										viewer.refresh(inputElement);
       
    67 									}
       
    68 								});
       
    69 							}
       
    70 						}
       
    71 
       
    72 						monitor.done();
       
    73 						return status;
       
    74 					}
       
    75 				};
       
    76 
       
    77 				refreshJob.schedule();
       
    78 
       
    79 			} else {
       
    80 				return em.getExecutables();
       
    81 			}
       
    82 		}
    42 		}
    83 		return new Object[] {};
    43 		return new Object[] {};
    84 	}
    44 	}
    85 
    45 
    86 	public Object getParent(Object element) {
    46 	public Object getParent(Object element) {