/*******************************************************************************
* 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.List;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.model.IPathEntry;
import org.eclipse.cdt.internal.ui.dialogs.IStatusChangeListener;
import org.eclipse.cdt.internal.ui.wizards.dialogfields.DialogField;
import org.eclipse.cdt.internal.ui.wizards.dialogfields.IDialogFieldListener;
import org.eclipse.cdt.internal.ui.wizards.dialogfields.ListDialogField;
/**
* Block for C/C++ Project Paths page for 3.X projects.
*
* @deprecated as of CDT 4.0. This option block was for property pages
* for 3.X style projects.
*/
@Deprecated
public class CPathTabBlock extends AbstractPathOptionBlock {
private final int[] pathTypes = {IPathEntry.CDT_SOURCE, IPathEntry.CDT_PROJECT, IPathEntry.CDT_OUTPUT, IPathEntry.CDT_LIBRARY,IPathEntry.CDT_CONTAINER};
private ListDialogField<CPElement> fCPathList;
private CPathSourceEntryPage fSourcePage;
private CPathProjectsEntryPage fProjectsPage;
private CPathOutputEntryPage fOutputPage;
private CPathContainerEntryPage fContainerPage;
private CPathLibraryEntryPage fLibrariesPage;
private class BuildPathAdapter implements IDialogFieldListener {
// ---------- IDialogFieldListener --------
public void dialogFieldChanged(DialogField field) {
buildPathDialogFieldChanged(field);
}
}
void buildPathDialogFieldChanged(DialogField field) {
if (field == fCPathList) {
updateCPathStatus();
}
doStatusLineUpdate();
}
public CPathTabBlock(IStatusChangeListener context, int pageToShow) {
super(context, pageToShow);
String[] buttonLabels = new String[]{ CPathEntryMessages.CPathsBlock_path_up_button,
CPathEntryMessages.CPathsBlock_path_down_button,
/* 2 */null, CPathEntryMessages.CPathsBlock_path_checkall_button,
CPathEntryMessages.CPathsBlock_path_uncheckall_button
};
BuildPathAdapter adapter = new BuildPathAdapter();
fCPathList = new ListDialogField<CPElement>(null, buttonLabels, null);
fCPathList.setDialogFieldListener(adapter);
}
@Override
protected List<CPElement> getCPaths() {
return fCPathList.getElements();
}
@Override
protected void addTabs() {
fSourcePage = new CPathSourceEntryPage(fCPathList);
addPage(fSourcePage);
fOutputPage = new CPathOutputEntryPage(fCPathList);
addPage(fOutputPage);
fProjectsPage = new CPathProjectsEntryPage(fCPathList);
addPage(fProjectsPage);
fLibrariesPage = new CPathLibraryEntryPage(fCPathList);
addPage(fLibrariesPage);
fContainerPage = new CPathContainerEntryPage(fCPathList);
addPage(fContainerPage);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.cdt.ui.dialogs.TabFolderOptionBlock#createContents(org.eclipse.swt.widgets.Composite)
*/
@Override
public Control createContents(Composite parent) {
Control control = super.createContents(parent);
if (getCProject() != null) {
fSourcePage.init(getCProject());
fOutputPage.init(getCProject());
fProjectsPage.init(getCProject());
fContainerPage.init(getCProject());
fLibrariesPage.init(getCProject());
}
Dialog.applyDialogFont(control);
return control;
}
@Override
protected void initialize(ICElement element, List<CPElement> cPaths) {
fCPathList.setElements(cPaths);
if (fProjectsPage != null) {
fSourcePage.init(getCProject());
fOutputPage.init(getCProject());
fProjectsPage.init(getCProject());
fContainerPage.init(getCProject());
fLibrariesPage.init(getCProject());
}
doStatusLineUpdate();
initializeTimeStamps();
}
@Override
protected int[] getFilteredTypes() {
return pathTypes;
}
@Override
protected int[] getAppliedFilteredTypes() {
return pathTypes;
}
/**
* Validates the build path.
*/
public void updateCPathStatus() {
getPathStatus().setOK();
List<CPElement> elements = fCPathList.getElements();
CPElement entryError = null;
int nErrorEntries = 0;
IPathEntry[] entries = new IPathEntry[elements.size()];
for (int i = elements.size() - 1; i >= 0; i--) {
CPElement currElement = elements.get(i);
entries[i] = currElement.getPathEntry();
if (currElement.getStatus().getSeverity() != IStatus.OK) {
nErrorEntries++;
if (entryError == null) {
entryError = currElement;
}
}
}
if (nErrorEntries > 0) {
if (nErrorEntries == 1 && entryError != null) {
getPathStatus().setWarning(entryError.getStatus().getMessage());
} else {
getPathStatus().setWarning(NLS.bind(CPathEntryMessages.CPElement_status_multiplePathErrors,
String.valueOf(nErrorEntries)));
}
}
/*
* if (fCurrJProject.hasClasspathCycle(entries)) {
* fClassPathStatus.setWarning(NewWizardMessages.getString("BuildPathsBlock.warning.CycleInClassPath"));
* //$NON-NLS-1$ }
*/
updateBuildPathStatus();
}
}