1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-24 17:35:35 +02:00

[268850] - fixed project conversion wizard (patch applied)

This commit is contained in:
Alena Laskavaia 2009-03-16 19:49:04 +00:00
parent b0259c85b9
commit 1ea10c1975
6 changed files with 303 additions and 94 deletions

View file

@ -47,6 +47,10 @@ MakeCCWizardSettings.description=Define the project and 'make' builder settings
WizardMakeProjectConversion.title=Convert to C/C++ Make project
WizardMakeProjectConversion.description=Convert a project to a C/C++ project which uses 'make' to build it.
WizardMakeProjectConversion.monitor.convertingToMakeProject=Converting to Make Project...
WizardMakeProjectConversion.projectOptions.title=Project options
WizardMakeProjectConversion.projectOptions.projectType=Specify project type
WizardMakeProjectConversion.projectOptions.projectTypeTable=Project type:
WizardMakeProjectConversion.projectOptions.showSuppressed=Show project types and toolchains only if they are supported on the platform
MakeWizardUpdate.window_title=Make Project Migration
MakeWizardUpdatePage.title=Make Project Migration

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2007 Intel Corporation and others.
* Copyright (c) 2007, 2009 Intel Corporation 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
@ -25,7 +25,10 @@ public class ConvertToMakeWizard extends ConversionWizard {
}
public String getBuildSystemId() {
return ManagedBuildManager.CFG_DATA_PROVIDER_ID;
if (!((ConvertToMakeWizardPage)mainPage).isSetProjectType()) {
return ManagedBuildManager.CFG_DATA_PROVIDER_ID;
}
return null;
}
}

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2000, 2007 QNX Software Systems and others.
* Copyright (c) 2000, 2009 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
@ -12,16 +12,36 @@
package org.eclipse.cdt.managedbuilder.ui.wizards;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.cdt.make.internal.ui.MakeUIPlugin;
import org.eclipse.cdt.managedbuilder.core.ManagedBuilderCorePlugin;
import org.eclipse.cdt.ui.newui.AbstractPage;
import org.eclipse.cdt.ui.newui.CDTPrefUtil;
import org.eclipse.cdt.ui.newui.PageLayout;
import org.eclipse.cdt.ui.wizards.CDTMainWizardPage;
import org.eclipse.cdt.ui.wizards.CWizardHandler;
import org.eclipse.cdt.ui.wizards.EntryDescriptor;
import org.eclipse.cdt.ui.wizards.IWizardItemsListListener;
import org.eclipse.cdt.ui.wizards.conversion.ConvertProjectWizardPage;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.SubProgressMonitor;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.ui.wizards.newresource.BasicNewResourceWizard;
public class ConvertToMakeWizardPage extends ConvertProjectWizardPage {
@ -29,6 +49,15 @@ public class ConvertToMakeWizardPage extends ConvertProjectWizardPage {
private static final String WZ_TITLE = "WizardMakeProjectConversion.title"; //$NON-NLS-1$
private static final String WZ_DESC = "WizardMakeProjectConversion.description"; //$NON-NLS-1$
protected CWizardHandler h_selected = null;
// widgets
private Button specifyProjectTypeButton;
private Tree tree;
private Composite right;
private Button show_sup;
private Label right_label;
private Label left_label;
/**
* Constructor for ConvertToStdMakeProjectWizardPage.
* @param pageName
@ -36,8 +65,153 @@ public class ConvertToMakeWizardPage extends ConvertProjectWizardPage {
public ConvertToMakeWizardPage(String pageName) {
super(pageName);
}
/**
public void createControl(Composite parent) {
super.createControl(parent);
IStructuredSelection sel = ((BasicNewResourceWizard) getWizard())
.getSelection();
if (sel != null) {
tableViewer.setCheckedElements(sel.toArray());
setPageComplete(validatePage());
}
}
protected void addToMainPage(Composite container) {
super.addToMainPage(container);
Group optionsGroup = new Group(container, SWT.NONE);
optionsGroup.setLayoutData(new GridData(GridData.FILL_BOTH));
optionsGroup.setLayout(new GridLayout(1, true));
optionsGroup.setText(MakeUIPlugin.getResourceString("WizardMakeProjectConversion.projectOptions.title")); //$NON-NLS-1$
Composite c = new Composite(optionsGroup, SWT.NONE);
c.setLayoutData(new GridData(GridData.FILL_BOTH));
c.setLayout(new GridLayout(2, true));
specifyProjectTypeButton = new Button(c, SWT.CHECK);
specifyProjectTypeButton.setText(MakeUIPlugin.getResourceString("WizardMakeProjectConversion.projectOptions.projectType")); //$NON-NLS-1$
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 2;
specifyProjectTypeButton.setLayoutData(gd);
specifyProjectTypeButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
enableProjectTypeControls(specifyProjectTypeButton
.getSelection());
}
});
left_label = new Label(c, SWT.NONE);
left_label.setText(MakeUIPlugin.getResourceString("WizardMakeProjectConversion.projectOptions.projectTypeTable")); //$NON-NLS-1$
left_label.setFont(container.getFont());
left_label.setLayoutData(new GridData(GridData.BEGINNING));
right_label = new Label(c, SWT.NONE);
right_label.setFont(container.getFont());
right_label.setLayoutData(new GridData(GridData.BEGINNING));
tree = new Tree(c, SWT.SINGLE | SWT.BORDER);
tree.setLayoutData(new GridData(GridData.FILL_BOTH));
tree.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
TreeItem[] tis = tree.getSelection();
if (tis == null || tis.length == 0)
return;
switchTo((CWizardHandler) tis[0].getData(),
(EntryDescriptor) tis[0]
.getData(CDTMainWizardPage.DESC));
}
});
right = new Composite(c, SWT.NONE);
right.setLayoutData(new GridData(GridData.FILL_BOTH));
right.setLayout(new PageLayout());
show_sup = new Button(c, SWT.CHECK);
show_sup.setSelection(true);
show_sup.setText(MakeUIPlugin.getResourceString("WizardMakeProjectConversion.projectOptions.showSuppressed")); //$NON-NLS-1$
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 2;
show_sup.setLayoutData(gd);
final IWizardItemsListListener filter = new IWizardItemsListListener() {
// Show only category
public List<EntryDescriptor> filterItems(
List<? extends EntryDescriptor> items) {
List<EntryDescriptor> results = new ArrayList<EntryDescriptor>();
for (EntryDescriptor entry : items) {
if (entry.isCategory()) {
results.add(entry);
}
}
return results;
}
public boolean isCurrent() {
return true;
}
public void toolChainListChanged(int count) {
// Do nothing
}
};
show_sup.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
if (h_selected != null)
h_selected.setSupportedOnly(show_sup.getSelection());
switchTo(CDTMainWizardPage.updateData(tree, right, show_sup,
filter, null), CDTMainWizardPage.getDescriptor(tree));
}
});
CDTPrefUtil.readPreferredTCs();
switchTo(CDTMainWizardPage.updateData(tree, right, show_sup, filter,
null), CDTMainWizardPage.getDescriptor(tree));
specifyProjectTypeButton.setSelection(true);
enableProjectTypeControls(true);
}
private void enableProjectTypeControls(boolean enabled) {
left_label.setEnabled(enabled);
right_label.setEnabled(enabled);
tree.setEnabled(enabled);
right.setEnabled(enabled);
enabledCompositeChildren(right, enabled);
show_sup.setEnabled(enabled);
}
private void enabledCompositeChildren(Composite composite, boolean enabled) {
Control[] children = composite.getChildren();
for (int i = 0; i < children.length; i++) {
children[i].setEnabled(enabled);
if (children[i] instanceof Composite) {
enabledCompositeChildren((Composite) children[i], enabled);
}
}
}
private void switchTo(CWizardHandler h, EntryDescriptor ed) {
if (h == null)
h = ed.getHandler();
try {
if (h != null && ed != null)
h.initialize(ed);
} catch (CoreException e) {
h = null;
}
if (h_selected != null)
h_selected.handleUnSelection();
h_selected = h;
if (h == null)
return;
right_label.setText(h_selected.getHeader());
h_selected.handleSelection();
h_selected.setSupportedOnly(show_sup.getSelection());
}
/**
* Method getWzTitleResource returns the correct Title Label for this class
* overriding the default in the superclass.
*/
@ -74,6 +248,9 @@ public class ConvertToMakeWizardPage extends ConvertProjectWizardPage {
ManagedBuilderCorePlugin.getDefault().convertOldStdMakeToNewStyle(project, monitor);
} else {
super.convertProject(project, bsId, new SubProgressMonitor(monitor, 1));
if (isSetProjectType()) {
h_selected.convertProject(project, monitor);
}
}
} finally {
monitor.done();
@ -87,19 +264,16 @@ public class ConvertToMakeWizardPage extends ConvertProjectWizardPage {
ManagedBuilderCorePlugin.getDefault().convertOldStdMakeToNewStyle(project, monitor);
} else {
super.convertProject(project, new SubProgressMonitor(monitor, 1), projectID);
if (isSetProjectType()) {
h_selected.convertProject(project, monitor);
}
}
} finally {
monitor.done();
}
}
public void createControl(Composite parent) {
super.createControl(parent);
IStructuredSelection sel = ((BasicNewResourceWizard)getWizard()).getSelection();
if ( sel != null) {
tableViewer.setCheckedElements(sel.toArray());
setPageComplete(validatePage());
}
}
public boolean isSetProjectType() {
return specifyProjectTypeButton != null && specifyProjectTypeButton.getSelection();
}
}

View file

@ -524,54 +524,7 @@ public class MBSWizardHandler extends CWizardHandler {
public void createProject(IProject project, boolean defaults, boolean onFinish, IProgressMonitor monitor) throws CoreException {
try {
monitor.beginTask("", 100); //$NON-NLS-1$
ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager();
ICProjectDescription des = mngr.createProjectDescription(project, false, !onFinish);
ManagedBuildInfo info = ManagedBuildManager.createBuildInfo(project);
monitor.worked(10);
cfgs = fConfigPage.getCfgItems(false);
if (cfgs == null || cfgs.length == 0)
cfgs = CDTConfigWizardPage.getDefaultCfgs(this);
if (cfgs == null || cfgs.length == 0 || cfgs[0].getConfiguration() == null) {
throw new CoreException(new Status(IStatus.ERROR,
ManagedBuilderUIPlugin.getUniqueIdentifier(),
Messages.getString("CWizardHandler.6"))); //$NON-NLS-1$
}
Configuration cf = (Configuration)cfgs[0].getConfiguration();
ManagedProject mProj = new ManagedProject(project, cf.getProjectType());
info.setManagedProject(mProj);
monitor.worked(10);
cfgs = CfgHolder.unique(cfgs);
cfgs = CfgHolder.reorder(cfgs);
ICConfigurationDescription cfgDebug = null;
ICConfigurationDescription cfgFirst = null;
int work = 50/cfgs.length;
for(int i = 0; i < cfgs.length; i++){
cf = (Configuration)cfgs[i].getConfiguration();
String id = ManagedBuildManager.calculateChildId(cf.getId(), null);
Configuration config = new Configuration(mProj, cf, id, false, true);
CConfigurationData data = config.getConfigurationData();
ICConfigurationDescription cfgDes = des.createConfiguration(ManagedBuildManager.CFG_DATA_PROVIDER_ID, data);
config.setConfigurationDescription(cfgDes);
config.exportArtifactInfo();
IBuilder bld = config.getEditableBuilder();
if (bld != null) { bld.setManagedBuildOn(true); }
config.setName(cfgs[i].getName());
config.setArtifactName(removeSpaces(project.getName()));
IBuildProperty b = config.getBuildProperties().getProperty(PROPERTY);
if (cfgDebug == null && b != null && b.getValue() != null && PROP_VAL.equals(b.getValue().getId()))
cfgDebug = cfgDes;
if (cfgFirst == null) // select at least first configuration
cfgFirst = cfgDes;
monitor.worked(work);
}
mngr.setProjectDescription(project, des);
setProjectDescription(project, defaults, onFinish, monitor);
doTemplatesPostProcess(project);
doCustom(project);
monitor.worked(30);
@ -579,6 +532,61 @@ public class MBSWizardHandler extends CWizardHandler {
monitor.done();
}
}
public void convertProject(IProject proj, IProgressMonitor monitor) throws CoreException {
setProjectDescription(proj, true, true, monitor);
}
private void setProjectDescription(IProject project, boolean defaults, boolean onFinish, IProgressMonitor monitor) throws CoreException {
ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager();
ICProjectDescription des = mngr.createProjectDescription(project, false, !onFinish);
ManagedBuildInfo info = ManagedBuildManager.createBuildInfo(project);
monitor.worked(10);
cfgs = getCfgItems(false);
if (cfgs == null || cfgs.length == 0)
cfgs = CDTConfigWizardPage.getDefaultCfgs(this);
if (cfgs == null || cfgs.length == 0 || cfgs[0].getConfiguration() == null) {
throw new CoreException(new Status(IStatus.ERROR,
ManagedBuilderUIPlugin.getUniqueIdentifier(),
Messages.getString("CWizardHandler.6"))); //$NON-NLS-1$
}
Configuration cf = (Configuration)cfgs[0].getConfiguration();
ManagedProject mProj = new ManagedProject(project, cf.getProjectType());
info.setManagedProject(mProj);
monitor.worked(10);
cfgs = CfgHolder.unique(cfgs);
cfgs = CfgHolder.reorder(cfgs);
ICConfigurationDescription cfgDebug = null;
ICConfigurationDescription cfgFirst = null;
int work = 50/cfgs.length;
for(int i = 0; i < cfgs.length; i++){
cf = (Configuration)cfgs[i].getConfiguration();
String id = ManagedBuildManager.calculateChildId(cf.getId(), null);
Configuration config = new Configuration(mProj, cf, id, false, true);
CConfigurationData data = config.getConfigurationData();
ICConfigurationDescription cfgDes = des.createConfiguration(ManagedBuildManager.CFG_DATA_PROVIDER_ID, data);
config.setConfigurationDescription(cfgDes);
config.exportArtifactInfo();
IBuilder bld = config.getEditableBuilder();
if (bld != null) { bld.setManagedBuildOn(true); }
config.setName(cfgs[i].getName());
config.setArtifactName(removeSpaces(project.getName()));
IBuildProperty b = config.getBuildProperties().getProperty(PROPERTY);
if (cfgDebug == null && b != null && b.getValue() != null && PROP_VAL.equals(b.getValue().getId()))
cfgDebug = cfgDes;
if (cfgFirst == null) // select at least first configuration
cfgFirst = cfgDes;
monitor.worked(work);
}
mngr.setProjectDescription(project, des);
}
protected void doTemplatesPostProcess(IProject prj) {
if(entryInfo == null)

View file

@ -55,37 +55,7 @@ public class STDWizardHandler extends MBSWizardHandler {
try {
monitor.beginTask("", 100);//$NON-NLS-1$
ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager();
ICProjectDescription des = mngr.createProjectDescription(project, false, !onFinish);
ManagedBuildInfo info = ManagedBuildManager.createBuildInfo(project);
ManagedProject mProj = new ManagedProject(des);
info.setManagedProject(mProj);
monitor.worked(20);
cfgs = CfgHolder.unique(fConfigPage.getCfgItems(defaults));
cfgs = CfgHolder.reorder(cfgs);
int work = 50/cfgs.length;
for (int i=0; i<cfgs.length; i++) {
String s = (cfgs[i].getToolChain() == null) ? "0" : ((ToolChain)(cfgs[i].getToolChain())).getId(); //$NON-NLS-1$
Configuration cfg = new Configuration(mProj, (ToolChain)cfgs[i].getToolChain(), ManagedBuildManager.calculateChildId(s, null), cfgs[i].getName());
IBuilder bld = cfg.getEditableBuilder();
if (bld != null) {
if(bld.isInternalBuilder()){
IConfiguration prefCfg = ManagedBuildManager.getPreferenceConfiguration(false);
IBuilder prefBuilder = prefCfg.getBuilder();
cfg.changeBuilder(prefBuilder, ManagedBuildManager.calculateChildId(cfg.getId(), null), prefBuilder.getName());
bld = cfg.getEditableBuilder();
bld.setBuildPath(null);
}
bld.setManagedBuildOn(false);
} else {
System.out.println(UIMessages.getString("StdProjectTypeHandler.3")); //$NON-NLS-1$
}
cfg.setArtifactName(removeSpaces(project.getName()));
CConfigurationData data = cfg.getConfigurationData();
des.createConfiguration(ManagedBuildManager.CFG_DATA_PROVIDER_ID, data);
monitor.worked(work);
}
mngr.setProjectDescription(project, des);
setProjectDescription(project, defaults, onFinish, monitor);
doTemplatesPostProcess(project);
doCustom(project);
@ -94,8 +64,47 @@ public class STDWizardHandler extends MBSWizardHandler {
monitor.done();
}
}
private void setProjectDescription(IProject project, boolean defaults, boolean onFinish, IProgressMonitor monitor)
throws CoreException {
ICProjectDescriptionManager mngr = CoreModel.getDefault().getProjectDescriptionManager();
ICProjectDescription des = mngr.createProjectDescription(project, false, !onFinish);
ManagedBuildInfo info = ManagedBuildManager.createBuildInfo(project);
ManagedProject mProj = new ManagedProject(des);
info.setManagedProject(mProj);
monitor.worked(20);
cfgs = CfgHolder.unique(getCfgItems(false));
cfgs = CfgHolder.reorder(cfgs);
int work = 50/cfgs.length;
for (int i=0; i<cfgs.length; i++) {
String s = (cfgs[i].getToolChain() == null) ? "0" : ((ToolChain)(cfgs[i].getToolChain())).getId(); //$NON-NLS-1$
Configuration cfg = new Configuration(mProj, (ToolChain)cfgs[i].getToolChain(), ManagedBuildManager.calculateChildId(s, null), cfgs[i].getName());
IBuilder bld = cfg.getEditableBuilder();
if (bld != null) {
if(bld.isInternalBuilder()){
IConfiguration prefCfg = ManagedBuildManager.getPreferenceConfiguration(false);
IBuilder prefBuilder = prefCfg.getBuilder();
cfg.changeBuilder(prefBuilder, ManagedBuildManager.calculateChildId(cfg.getId(), null), prefBuilder.getName());
bld = cfg.getEditableBuilder();
bld.setBuildPath(null);
}
bld.setManagedBuildOn(false);
} else {
System.out.println(UIMessages.getString("StdProjectTypeHandler.3")); //$NON-NLS-1$
}
cfg.setArtifactName(removeSpaces(project.getName()));
CConfigurationData data = cfg.getConfigurationData();
des.createConfiguration(ManagedBuildManager.CFG_DATA_PROVIDER_ID, data);
monitor.worked(work);
}
mngr.setProjectDescription(project, des);
}
public boolean canCreateWithoutToolchain() { return true; }
public void convertProject(IProject proj, IProgressMonitor monitor) throws CoreException {
setProjectDescription(proj, true, true, monitor);
}
/**
* If no toolchains selected by user, use default toolchain
*/

View file

@ -188,6 +188,17 @@ public class CWizardHandler implements Cloneable {
throws CoreException {
createProject(proj, defaults, monitor);
}
/**
* Converts an already created project
*
* @param proj - the project to convert
*
* @throws CoreException
* @since 5.1
*/
public void convertProject(IProject proj, IProgressMonitor monitor) throws CoreException {}
/**
*
* @return true if settings were changed