/*******************************************************************************
* 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.core.runtime.CoreException;
import org.eclipse.jface.layout.PixelConverter;
import org.eclipse.jface.wizard.IWizardPage;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.cdt.core.model.ICElement;
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.util.ExceptionHandler;
/**
* @deprecated as of CDT 4.0. This wizard was used in property pages
* for 3.X style projects.
*/
@Deprecated
public class CPathContainerWizard extends Wizard {
private IContainerDescriptor fPageDesc;
private IContainerEntry fEntryToEdit;
private IPathEntry[] fNewEntries;
private IContainerEntry[] fContainerEntries;
private IProjectEntry fProjectEntry;
private IPathEntryContainerPage fContainerPage;
private ICElement fCurrElement;
private IPathEntry[] fCurrCPath;
private CPathFilterPage fFilterPage;
private CPathContainerSelectionPage fSelectionWizardPage;
private int[] fFilterType;
/**
* Constructor for ClasspathContainerWizard.
*/
public CPathContainerWizard(IContainerEntry entryToEdit, ICElement currElement, IPathEntry[] currEntries) {
this(entryToEdit, null, currElement, currEntries, null);
}
/**
* Constructor for ClasspathContainerWizard.
*/
public CPathContainerWizard(IContainerDescriptor pageDesc, ICElement currElement, IPathEntry[] currEntries) {
this(null, pageDesc, currElement, currEntries, null);
}
public CPathContainerWizard(IContainerEntry entryToEdit, IContainerDescriptor pageDesc, ICElement currElement,
IPathEntry[] currEntries, int[] filterType) {
fEntryToEdit = entryToEdit;
fPageDesc = pageDesc;
fNewEntries = null;
fFilterType = filterType;
fCurrElement = currElement;
fCurrCPath = currEntries;
}
public IPathEntry getEntriesParent() {
if (fProjectEntry != null) {
return fProjectEntry;
}
return fContainerEntries[0];
}
public IPathEntry[] getEntries() {
return fNewEntries;
}
public IContainerEntry[] getContainers() {
return fContainerEntries;
}
/*
* (non-Javadoc)
*
* @see IWizard#performFinish()
*/
@Override
public boolean performFinish() {
if (fContainerPage != null) {
if (fContainerPage.finish()) {
if (fContainerPage instanceof ProjectContainerPage) {
fProjectEntry = ((ProjectContainerPage)fContainerPage).getProjectEntry();
} else {
fContainerEntries = fContainerPage.getNewContainers();
}
if (fFilterPage != null && fFilterPage.isPageComplete()) {
fNewEntries = fFilterPage.getSelectedEntries();
}
return true;
}
}
return false;
}
/*
* (non-Javadoc)
*
* @see IWizard#addPages()
*/
@Override
public void addPages() {
if (fPageDesc != null) {
fContainerPage = getContainerPage(fPageDesc);
addPage(fContainerPage);
} else if (fEntryToEdit == null) { // new entry: show selection page as
// first page
IContainerDescriptor[] containers = CPathContainerDescriptor.getDescriptors();
List<IContainerDescriptor> allContainers = new ArrayList<IContainerDescriptor>(Arrays.asList(containers));
if (fFilterType != null) {
allContainers.add(0, new ProjectContainerDescriptor(fFilterType));
}
fSelectionWizardPage = new CPathContainerSelectionPage(
allContainers.toArray(new IContainerDescriptor[0]));
addPage(fSelectionWizardPage);
// add as dummy, will not be shown
fContainerPage = new CPathContainerDefaultPage();
addPage(fContainerPage);
if (fFilterType != null) {
fFilterPage = new CPathFilterPage(fCurrElement, fFilterType);
addPage(fFilterPage);
}
} else { // fPageDesc == null && fEntryToEdit != null
IContainerDescriptor[] containers = CPathContainerDescriptor.getDescriptors();
IContainerDescriptor descriptor = findDescriptorPage(containers, fEntryToEdit);
fContainerPage = getContainerPage(descriptor);
addPage(fContainerPage);
}
super.addPages();
}
private IPathEntryContainerPage getContainerPage(IContainerDescriptor pageDesc) {
IPathEntryContainerPage containerPage = null;
if (pageDesc != null) {
try {
containerPage = pageDesc.createPage();
} catch (CoreException e) {
handlePageCreationFailed(e);
}
}
if (containerPage == null) {
containerPage = new CPathContainerDefaultPage();
}
containerPage.initialize(fCurrElement.getCProject(), fCurrCPath);
if (!(containerPage instanceof ProjectContainerPage)) {
containerPage.setSelection(fEntryToEdit);
}
containerPage.setWizard(this);
return containerPage;
}
/*
* (non-Javadoc)
*
* @see IWizard#getNextPage(IWizardPage)
*/
@Override
public IWizardPage getNextPage(IWizardPage page) {
if (page == fSelectionWizardPage) {
IContainerDescriptor selected = fSelectionWizardPage.getSelected();
fContainerPage = getContainerPage(selected);
return fContainerPage;
} else if (page == fContainerPage && fFilterPage != null) {
if (fContainerPage.finish() && fContainerPage.getNewContainers().length > 0
&& fContainerPage.getNewContainers()[0] != null) {
IPathEntry entry;
if (fContainerPage instanceof ProjectContainerPage) {
entry = ((ProjectContainerPage)fContainerPage).getProjectEntry();
} else {
entry = fContainerPage.getNewContainers()[0];
}
fFilterPage.setParentEntry(entry);
}
return fFilterPage;
}
return super.getNextPage(page);
}
private void handlePageCreationFailed(CoreException e) {
String title = CPathEntryMessages.CPathContainerWizard_pagecreationerror_title;
String message = CPathEntryMessages.CPathContainerWizard_pagecreationerror_message;
ExceptionHandler.handle(e, getShell(), title, message);
}
private IContainerDescriptor findDescriptorPage(IContainerDescriptor[] containers, IPathEntry entry) {
for (IContainerDescriptor container2 : containers) {
if (container2.canEdit(entry)) {
return container2;
}
}
return null;
}
/*
* (non-Javadoc)
*
* @see IWizard#canFinish()
*/
@Override
public boolean canFinish() {
if (fSelectionWizardPage != null) {
if (!fContainerPage.isPageComplete()) {
return false;
}
}
boolean canFinish = false;
if (fContainerPage != null) {
canFinish = fContainerPage.isPageComplete();
}
if (canFinish == true && fFilterPage != null) {
canFinish = fFilterPage.isPageComplete();
}
return canFinish;
}
public static int openWizard(Shell shell, CPathContainerWizard wizard) {
WizardDialog dialog = new WizardDialog(shell, wizard);
PixelConverter converter = new PixelConverter(shell);
dialog.setMinimumPageSize(converter.convertWidthInCharsToPixels(70), converter.convertHeightInCharsToPixels(20));
dialog.create();
return dialog.open();
}
}