/******************************************************************************* * Copyright (c) 2004, 2010 QNX Software Systems and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * QNX Software Systems - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.internal.ui.dialogs.cpaths; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.ui.model.WorkbenchLabelProvider; import org.eclipse.cdt.core.model.CModelException; import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.core.model.IContainerEntry; import org.eclipse.cdt.core.model.IPathEntry; import org.eclipse.cdt.core.model.IProjectEntry; import org.eclipse.cdt.ui.wizards.IPathEntryContainerPage; import org.eclipse.cdt.internal.ui.CPluginImages; import org.eclipse.cdt.internal.ui.viewsupport.ListContentProvider; /** * @deprecated as of CDT 4.0. This class was used for Path Container Wizard * for 3.X style projects. */ @Deprecated public class ProjectContainerPage extends WizardPage implements IPathEntryContainerPage { private int[] fFilterType; private TableViewer viewer; ICProject fCProject; protected ProjectContainerPage(int[] filterType) { super("projectContainerPage"); //$NON-NLS-1$ setTitle(CPathEntryMessages.ProjectContainerPage_title); setDescription(CPathEntryMessages.ProjectContainerPage_description); setImageDescriptor(CPluginImages.DESC_WIZBAN_ADD_LIBRARY); fFilterType = filterType; validatePage(); } public void initialize(ICProject project, IPathEntry[] currentEntries) { fCProject = project; } public boolean finish() { return true; } public IContainerEntry[] getNewContainers() { return new IContainerEntry[0]; } IProjectEntry getProjectEntry() { if (viewer != null) { ISelection selection = viewer.getSelection(); if (selection instanceof IStructuredSelection) { IStructuredSelection ss = (IStructuredSelection) selection; if (ss.size() == 1) { ICProject project = (ICProject) ss.getFirstElement(); return CoreModel.newProjectEntry(project.getPath()); } } } return null; } void setProjectEntry(IProjectEntry entry) { if (entry != null) { viewer.setSelection(new StructuredSelection(entry)); } } public void setSelection(IContainerEntry containerEntry) { } public void createControl(Composite parent) { // create a composite with standard margins and spacing Composite container = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(); layout.numColumns = 2; container.setLayout(layout); Label label = new Label(container, SWT.NULL); label.setText(CPathEntryMessages.ProjectContainerPage_label); GridData gd = new GridData(); gd.horizontalSpan = 2; label.setLayoutData(gd); viewer = new TableViewer(container, SWT.SINGLE | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL); viewer.setContentProvider(new ListContentProvider()); viewer.setLabelProvider(new WorkbenchLabelProvider()); viewer.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { validatePage(); } }); gd = new GridData(GridData.FILL_BOTH); gd.widthHint = 400; gd.heightHint = 300; viewer.getTable().setLayoutData(gd); viewer.addFilter(new ViewerFilter() { @Override public boolean select(Viewer viewer, Object parentElement, Object element) { return !element.equals(fCProject); } }); setControl(container); initializeView(); validatePage(); } private void initializeView() { List<ICProject> list = new ArrayList<ICProject>(); List<IPathEntry> current; try { current = Arrays.asList(fCProject.getRawPathEntries()); ICProject[] cProjects = CoreModel.getDefault().getCModel().getCProjects(); for (int i = 0; i < cProjects.length; i++) { boolean added = false; if (!cProjects[i].equals(fCProject) && !current.contains(CoreModel.newProjectEntry(cProjects[i].getPath()))) { IPathEntry[] projEntries = cProjects[i].getRawPathEntries(); for (IPathEntry projEntrie : projEntries) { for (int element : fFilterType) { if (projEntrie.getEntryKind() == element && projEntrie.isExported()) { list.add(cProjects[i]); added = true; break; } } if (added) { break; } } } } } catch (CModelException e) { } viewer.setInput(list); } /** * Method validatePage. */ protected void validatePage() { setPageComplete(getSelected() != null); } private IPathEntry getSelected() { return getProjectEntry(); } }