PHP perspective and new Project Wizard
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpeclipse / preferences / PHPProjectLibraryPage.java
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/preferences/PHPProjectLibraryPage.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/preferences/PHPProjectLibraryPage.java
new file mode 100644 (file)
index 0000000..98d1cff
--- /dev/null
@@ -0,0 +1,147 @@
+package net.sourceforge.phpeclipse.preferences;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jface.viewers.CheckStateChangedEvent;
+import org.eclipse.jface.viewers.CheckboxTableViewer;
+import org.eclipse.jface.viewers.ICheckStateListener;
+import org.eclipse.jface.viewers.IContentProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.IWorkbench; 
+import net.sourceforge.phpeclipse.PHPeclipsePlugin;
+import net.sourceforge.phpeclipse.resourcesview.PHPProject; 
+
+public class PHPProjectLibraryPage {
+       protected PHPProject workingProject;
+
+       protected PHPProjectLibraryPage(PHPProject theWorkingProject) {
+               super();
+               workingProject = theWorkingProject;
+       }
+
+       protected Control getControl(Composite parent) {
+               Composite composite = new Composite(parent, SWT.NONE);
+               composite.setLayout(new FillLayout());
+
+               Table projectsTable = new Table(composite, SWT.CHECK | SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION);
+               projectsTable.setHeaderVisible(false);
+               projectsTable.setLinesVisible(false);
+               projectsTable.computeSize(SWT.DEFAULT, SWT.DEFAULT);
+
+               TableColumn tableColumn = new TableColumn(projectsTable, SWT.NONE);
+               tableColumn.setWidth(200);
+               tableColumn.setText(PHPPreferencesMessages.getString("PHPProjectLibraryPage.project")); //$NON-NLS-1$
+
+               CheckboxTableViewer projectsTableViewer = new CheckboxTableViewer(projectsTable);
+               projectsTableViewer.addCheckStateListener(new ICheckStateListener() {
+                       public void checkStateChanged(CheckStateChangedEvent event) {
+                               projectCheckedUnchecked(event);
+                       }
+               });
+
+               projectsTableViewer.setContentProvider(getContentProvider());
+               projectsTableViewer.setLabelProvider(getLabelProvider());
+
+               projectsTableViewer.setInput(getWorkspaceProjects());
+               projectsTableViewer.setCheckedElements(workingProject.getReferencedProjects().toArray());
+
+               return composite;
+       }
+
+       protected void projectCheckedUnchecked(CheckStateChangedEvent event) {
+               IProject checkEventProject = (IProject) event.getElement();
+               if (event.getChecked())
+                       getWorkingProject().addLoadPathEntry(checkEventProject);
+               else
+                       getWorkingProject().removeLoadPathEntry(checkEventProject);
+       }
+
+       protected PHPProject getWorkingProject() {
+               return workingProject;
+       }
+
+       protected List getWorkspaceProjects() {
+               IWorkspaceRoot root = PHPeclipsePlugin.getWorkspace().getRoot();
+               return Arrays.asList(root.getProjects());
+       }
+
+       protected ITableLabelProvider getLabelProvider() {
+               ITableLabelProvider labelProvider = new ITableLabelProvider() {
+                       public Image getColumnImage(Object element, int columnIndex) {
+                               IWorkbench workbench= PHPeclipsePlugin.getDefault().getWorkbench();
+                               return workbench.getSharedImages().getImage(ISharedImages.IMG_OBJ_PROJECT);
+                       }
+
+                       public String getColumnText(Object element, int columnIndex) {
+                               if (element instanceof IProject)
+                                       return ((IProject) element).getName();
+
+                               return PHPPreferencesMessages.getString("PHPProjectLibraryPage.elementNotIProject"); //$NON-NLS-1$
+                       }
+
+                       public void addListener(ILabelProviderListener listener) {}
+
+                       public void dispose() {}
+
+                       public boolean isLabelProperty(Object element, String property) {
+                               return false;
+                       }
+
+                       public void removeListener(ILabelProviderListener listener) {}
+               };
+
+               return labelProvider;
+       }
+
+       protected IContentProvider getContentProvider() {
+               IStructuredContentProvider contentProvider = new IStructuredContentProvider() {
+                       protected List phpProjects;
+
+                       public Object[] getElements(Object inputElement) {
+                               return phpProjects.toArray();
+                       }
+
+                       public void dispose() {}
+
+                       public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+                               phpProjects = new ArrayList();
+
+                               if (!(newInput instanceof List))
+                                       return;
+
+                               Iterator workspaceProjectsIterator = ((List) newInput).iterator();
+                               while (workspaceProjectsIterator.hasNext()) {
+                                       Object anObject = workspaceProjectsIterator.next();
+                                       if (anObject instanceof IProject) {
+                                               IProject project = (IProject) anObject;
+                                               if (project.getName() != workingProject.getProject().getName()) {
+                                                       try {
+                                                               if (project.hasNature(PHPeclipsePlugin.PHP_NATURE_ID))
+                                                                       phpProjects.add(project);
+                                                       } catch (CoreException e) {}
+                                               }
+                                       }
+                               }
+                       }
+               };
+
+               return contentProvider;
+       }
+}
\ No newline at end of file