Improved File selector for debugging action
authoraxelcl <axelcl>
Sat, 29 Jan 2005 08:54:54 +0000 (08:54 +0000)
committeraxelcl <axelcl>
Sat, 29 Jan 2005 08:54:54 +0000 (08:54 +0000)
net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/ui/util/PHPFileSelector.java

index 36acd8f..41fce7c 100644 (file)
@@ -7,62 +7,100 @@ import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.jface.util.Assert;
+import org.eclipse.jface.viewers.LabelProvider;
 import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.model.WorkbenchLabelProvider;
+import org.eclipse.ui.model.IWorkbenchAdapter;
 
 public class PHPFileSelector extends ResourceSelector {
-       protected PHPProjectSelector phpProjectSelector;
+  static class FileLabelProvider extends LabelProvider {
+    /**
+     * Returns the implementation of IWorkbenchAdapter for the given object.
+     * 
+     * @param o
+     *          the object to look up.
+     * @return IWorkbenchAdapter or <code>null</code> if the adapter is not defined or the object is not adaptable.
+     */
+    protected final IWorkbenchAdapter getAdapter(Object o) {
+      if (!(o instanceof IAdaptable)) {
+        return null;
+      }
+      return (IWorkbenchAdapter) ((IAdaptable) o).getAdapter(IWorkbenchAdapter.class);
+    }
 
-       public PHPFileSelector(Composite parent, PHPProjectSelector aProjectSelector) {
-               super(parent);
-               Assert.isNotNull(aProjectSelector);
-               phpProjectSelector = aProjectSelector;
-               
-               browseDialogTitle = "File Selection";
-       }
+    /*
+     * @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object)
+     */
+    public String getText(Object element) {
+      if (element instanceof IFile) {
+        //                     query the element for its label
+        IWorkbenchAdapter adapter = getAdapter(element);
+        if (adapter == null) {
+          return ""; //$NON-NLS-1$
+        }
+        String filename = adapter.getLabel(element);
+        IPath path = ((IFile) element).getFullPath();
+        String filePathname = path != null ? path.toString() : ""; //$NON-NLS-1$
+        return filename + " (" + filePathname + ")";
+      }
+      return super.getText(element);
+    }
+  }
 
-       protected Object[] getPHPFiles() {
-               IProject phpProject = phpProjectSelector.getSelection();
-               if (phpProject == null)
-                       return new Object[0];
+  protected PHPProjectSelector phpProjectSelector;
 
-               PHPElementVisitor visitor = new PHPElementVisitor();
-               try {
-                       phpProject.accept(visitor);
-               } catch(CoreException e) {
-                       PHPeclipsePlugin.log(e);
-               }
-               return visitor.getCollectedPHPFiles();
-       }
+  public PHPFileSelector(Composite parent, PHPProjectSelector aProjectSelector) {
+    super(parent);
+    Assert.isNotNull(aProjectSelector);
+    phpProjectSelector = aProjectSelector;
 
-       public IFile getSelection() {
-               String fileName = getSelectionText();
-               if (fileName != null && !fileName.equals("")) {
-                       IPath filePath = new Path(fileName);
-                       IProject project = phpProjectSelector.getSelection();
-                       if (project != null && project.exists(filePath))
-                               return project.getFile(filePath);
-               }
-                       
-               return null;
-       }
+    browseDialogTitle = "File Selection";
+  }
 
-       protected void handleBrowseSelected() {
-               ElementListSelectionDialog dialog = new ElementListSelectionDialog(getShell(), new WorkbenchLabelProvider());
-               dialog.setTitle(browseDialogTitle);
-               dialog.setMessage(browseDialogMessage);
-               dialog.setElements(getPHPFiles());
+  protected Object[] getPHPFiles() {
+    IProject phpProject = phpProjectSelector.getSelection();
+    if (phpProject == null)
+      return new Object[0];
 
-               if (dialog.open() == ElementListSelectionDialog.OK) {
-                       textField.setText(((IResource) dialog.getFirstResult()).getProjectRelativePath().toString());
-               }
-       }
+    PHPElementVisitor visitor = new PHPElementVisitor();
+    try {
+      phpProject.accept(visitor);
+    } catch (CoreException e) {
+      PHPeclipsePlugin.log(e);
+    }
+    return visitor.getCollectedPHPFiles();
+  }
 
-       protected String validateResourceSelection() {
-               IFile selection = getSelection();
-               return selection == null ? EMPTY_STRING : selection.getProjectRelativePath().toString();
-       }
-}
+  public IFile getSelection() {
+    String fileName = getSelectionText();
+    if (fileName != null && !fileName.equals("")) {
+      IPath filePath = new Path(fileName);
+      IProject project = phpProjectSelector.getSelection();
+      if (project != null && project.exists(filePath))
+        return project.getFile(filePath);
+    }
+
+    return null;
+  }
+
+  protected void handleBrowseSelected() {
+//    ElementListSelectionDialog dialog = new ElementListSelectionDialog(getShell(), new WorkbenchLabelProvider());
+    ElementListSelectionDialog dialog = new ElementListSelectionDialog(getShell(), new FileLabelProvider());
+
+    dialog.setTitle(browseDialogTitle);
+    dialog.setMessage(browseDialogMessage);
+    dialog.setElements(getPHPFiles());
+
+    if (dialog.open() == ElementListSelectionDialog.OK) {
+      textField.setText(((IResource) dialog.getFirstResult()).getProjectRelativePath().toString());
+    }
+  }
+
+  protected String validateResourceSelection() {
+    IFile selection = getSelection();
+    return selection == null ? EMPTY_STRING : selection.getProjectRelativePath().toString();
+  }
+}
\ No newline at end of file