/******************************************************************************* * 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.cdt.core.model.CModelException; import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.core.model.ICElement; import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.core.model.IPathEntry; import org.eclipse.cdt.core.model.IPathEntryContainer; import org.eclipse.cdt.internal.ui.CPluginImages; import org.eclipse.cdt.internal.ui.viewsupport.ListContentProvider; import org.eclipse.cdt.ui.CUIPlugin; import org.eclipse.core.resources.IProject; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.viewers.CheckStateChangedEvent; import org.eclipse.jface.viewers.CheckboxTableViewer; import org.eclipse.jface.viewers.ICheckStateListener; 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; /** * @deprecated as of CDT 4.0. This page was used in Path Container Wizard * for 3.X style projects. */ @Deprecated public class CPathFilterPage extends WizardPage { private final int[] fFilterType; private CheckboxTableViewer viewer; private IPathEntry fParentEntry; private List<IPathEntry> fPaths; private List<?> fExclusions; private ViewerFilter filter; protected ICElement fCElement; protected CPathFilterPage(ICElement cElement, int[] filterType) { super("CPathFilterPage"); //$NON-NLS-1$ setTitle(CPathEntryMessages.CPathFilterPage_title); setDescription(CPathEntryMessages.CPathFilterPage_description); setImageDescriptor(CPluginImages.DESC_WIZBAN_ADD_LIBRARY); fFilterType = filterType; fCElement = cElement; validatePage(); } public void createControl(Composite parent) { Composite container = new Composite(parent, SWT.NULL); GridLayout layout = new GridLayout(); layout.numColumns = 2; container.setLayout(layout); Label label = new Label(container, SWT.NULL); label.setText(CPathEntryMessages.CPathFilterPage_label); GridData gd = new GridData(); gd.horizontalSpan = 2; label.setLayoutData(gd); viewer = CheckboxTableViewer.newCheckList(container, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL); viewer.setContentProvider(new ListContentProvider()); viewer.setLabelProvider(new CPElementLabelProvider(false, false)); viewer.addCheckStateListener(new ICheckStateListener() { public void checkStateChanged(CheckStateChangedEvent event) { validatePage(); } }); gd = new GridData(GridData.FILL_BOTH); gd.widthHint = 400; gd.heightHint = 300; viewer.getTable().setLayoutData(gd); setControl(container); Dialog.applyDialogFont(container); } @Override public void setVisible(boolean visible) { if (fPaths != null) { viewer.setInput(fPaths); } super.setVisible(visible); } public void setParentEntry(IPathEntry entry) { fParentEntry = entry; if (fParentEntry.getEntryKind() == IPathEntry.CDT_PROJECT) { IProject project = CUIPlugin.getWorkspace().getRoot().getProject(fParentEntry.getPath().segment(0)); if (project.isAccessible()) { ICProject cProject = CoreModel.getDefault().create(project); try { fPaths = Arrays.asList(cProject.getRawPathEntries()); } catch (CModelException e) { } } } else if (fParentEntry.getEntryKind() == IPathEntry.CDT_CONTAINER) { try { IPathEntryContainer container = CoreModel.getPathEntryContainer(fParentEntry.getPath(), fCElement.getCProject()); if (container != null) { fPaths = Arrays.asList(container.getPathEntries()); } } catch (CModelException e) { } } createExlusions(fParentEntry.getEntryKind() == IPathEntry.CDT_PROJECT); } private void createExlusions(boolean showExported) { fExclusions = new ArrayList<Object>(); if (filter != null) { viewer.removeFilter(filter); } filter = new CPElementFilter(fExclusions.toArray(), fFilterType, showExported, false); viewer.addFilter(filter); } /** * Method validatePage. */ void validatePage() { setPageComplete(getSelectedEntries().length > 0); } public IPathEntry[] getSelectedEntries() { if (viewer != null) { Object[] paths = viewer.getCheckedElements(); IPathEntry[] entries = new IPathEntry[paths.length]; System.arraycopy(paths, 0, entries, 0, entries.length); return entries; } return new IPathEntry[0]; } }