PHP perspective and new Project Wizard
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpeclipse / resourcesview / PHPResourcesView.java
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/resourcesview/PHPResourcesView.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/resourcesview/PHPResourcesView.java
new file mode 100644 (file)
index 0000000..1e95b5a
--- /dev/null
@@ -0,0 +1,116 @@
+package net.sourceforge.phpeclipse.resourcesview;
+
+import net.sourceforge.phpeclipse.PHPeclipsePlugin;
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.viewers.IOpenListener;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.OpenEvent;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.ui.IWorkbenchPartSite;
+import org.eclipse.ui.actions.ActionContext;
+import org.eclipse.ui.model.WorkbenchContentProvider;
+import org.eclipse.ui.model.WorkbenchLabelProvider;
+import org.eclipse.ui.part.ISetSelectionTarget;
+import org.eclipse.ui.part.ViewPart;
+
+public class PHPResourcesView extends ViewPart implements ISetSelectionTarget, IMenuListener {
+  protected TreeViewer viewer;
+  protected MainActionGroup mainActionGroup;
+
+  public PHPResourcesView() {
+
+  }
+
+  public void createPartControl(Composite parent) {
+    this.setViewer(new TreeViewer(parent));
+
+    this.getViewer().addFilter(new PHPViewerFilter());
+    this.getViewer().setContentProvider(new WorkbenchContentProvider());
+    this.getViewer().setLabelProvider(new WorkbenchLabelProvider());
+    this.getViewer().setInput(getInitialInput());
+
+    this.getViewer().addOpenListener(new IOpenListener() {
+      public void open(OpenEvent event) {
+        getMainActionGroup().runDefaultAction((IStructuredSelection) event.getSelection());
+      }
+    });
+
+    MenuManager menuMgr = new MenuManager("net.sourceforge.phpeclipse.PHPPopupMenu"); //$NON-NLS-1$
+    menuMgr.setRemoveAllWhenShown(true);
+    menuMgr.addMenuListener(this);
+
+    Menu fContextMenu = menuMgr.createContextMenu(this.getViewer().getTree());
+    this.getViewer().getTree().setMenu(fContextMenu);
+
+    // Register viewer with site. This must be done before making the actions.
+    IWorkbenchPartSite site = getSite();
+    site.registerContextMenu(menuMgr, viewer);
+  }
+
+  public void selectReveal(ISelection selection) {
+    viewer.setSelection(selection, true);
+  }
+
+  protected IContainer getInitialInput() {
+    IAdaptable input = getSite().getPage().getInput();
+    IResource resource = null;
+    if (input instanceof IResource) {
+      resource = (IResource) input;
+    } else {
+      resource = (IResource) input.getAdapter(IResource.class);
+    }
+    if (resource != null) {
+      switch (resource.getType()) {
+        case IResource.FILE :
+          return resource.getParent();
+        case IResource.FOLDER :
+        case IResource.PROJECT :
+        case IResource.ROOT :
+          return (IContainer) resource;
+        default :
+          break;
+      }
+    }
+    return PHPeclipsePlugin.getWorkspace().getRoot();
+  }
+
+  public void setFocus() {
+    this.getViewer().getControl().setFocus();
+  }
+
+  public void menuAboutToShow(IMenuManager manager) {
+    IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
+    this.getMainActionGroup().setContext(new ActionContext(selection));
+    this.getMainActionGroup().fillContextMenu(manager);
+    this.getMainActionGroup().setContext(null);
+  }
+
+  public MainActionGroup getMainActionGroup() {
+    if (mainActionGroup == null) {
+      // lazy initialization, because this.getSite() delivers null in constructor
+      mainActionGroup = new MainActionGroup(this);
+    }
+    return mainActionGroup;
+  }
+
+  public void setMainActionGroup(MainActionGroup mainActionGroup) {
+    this.mainActionGroup = mainActionGroup;
+  }
+
+  public TreeViewer getViewer() {
+    return viewer;
+  }
+
+  protected void setViewer(TreeViewer viewer) {
+    this.viewer = viewer;
+  }
+
+}
\ No newline at end of file