diff --git a/build/org.eclipse.cdt.managedbuilder.ui.tests/src/org/eclipse/cdt/managedbuilder/ui/tests/TestCProjectPlatformPage.java b/build/org.eclipse.cdt.managedbuilder.ui.tests/src/org/eclipse/cdt/managedbuilder/ui/tests/TestCProjectPlatformPage.java index 7f031cedab6..6947b379c9e 100644 --- a/build/org.eclipse.cdt.managedbuilder.ui.tests/src/org/eclipse/cdt/managedbuilder/ui/tests/TestCProjectPlatformPage.java +++ b/build/org.eclipse.cdt.managedbuilder.ui.tests/src/org/eclipse/cdt/managedbuilder/ui/tests/TestCProjectPlatformPage.java @@ -12,6 +12,7 @@ package org.eclipse.cdt.managedbuilder.ui.tests; import junit.framework.TestCase; +import org.eclipse.cdt.core.parser.util.ArrayUtil; import org.eclipse.cdt.managedbuilder.core.IProjectType; import org.eclipse.cdt.managedbuilder.ui.wizards.MBSCustomPageManager; import org.eclipse.cdt.ui.wizards.CDTMainWizardPage; @@ -49,14 +50,14 @@ public class TestCProjectPlatformPage extends TestCase implements IWizardItemsLi page = null; wizard = null; } - + ArrayUtil x; // testing methods ////////////////// /* Test the new page, set selection, create page lifecycle. */ public void testHandler1() throws Exception { - CWizardHandler h = new CWizardHandler(getShell(), "Head", "Name", null); + CWizardHandler h = new CWizardHandler(getShell(), "Head", "Name"); assertNotNull(h); /* IProjectType pt = new TestProjectType(); diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/CNewWizard.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/CNewWizard.java index 104a9c6d113..9695b600648 100644 --- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/CNewWizard.java +++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/CNewWizard.java @@ -14,6 +14,7 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.SortedMap; +import org.eclipse.cdt.internal.ui.CPluginImages; import org.eclipse.cdt.managedbuilder.buildproperties.IBuildPropertyManager; import org.eclipse.cdt.managedbuilder.buildproperties.IBuildPropertyType; import org.eclipse.cdt.managedbuilder.buildproperties.IBuildPropertyValue; @@ -24,17 +25,20 @@ import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager; import org.eclipse.cdt.managedbuilder.ui.properties.Messages; import org.eclipse.cdt.ui.newui.CDTPrefUtil; import org.eclipse.cdt.ui.wizards.ICWizardHandler; -import org.eclipse.cdt.ui.wizards.WizardItemData; +import org.eclipse.cdt.ui.wizards.EntryDescriptor; import org.eclipse.jface.wizard.IWizard; +import org.eclipse.swt.graphics.Image; /** * */ public class CNewWizard extends AbstractCWizard { + private static final Image IMG = CPluginImages.get(CPluginImages.IMG_OBJS_CONTAINER); + private static final String OTHERS_LABEL = Messages.getString("CNewWizard.0"); //$NON-NLS-1$ /** * Creates and returns an array of items to be displayed */ - public WizardItemData[] createItems(boolean supportedOnly, IWizard wizard) { + public EntryDescriptor[] createItems(boolean supportedOnly, IWizard wizard) { IBuildPropertyManager bpm = ManagedBuildManager.getBuildPropertyManager(); IBuildPropertyType bpt = bpm.getPropertyType(ICWizardHandler.ARTIFACT); IBuildPropertyValue[] vs = bpt.getSupportedValues(); @@ -44,23 +48,17 @@ public class CNewWizard extends AbstractCWizard { for (int i=0; i 0) { - WizardItemData wd = new WizardItemData(); - wd.name = h.getName(); - wd.handler = h; - wd.image = h.getIcon(); - wd.id = h.getName(); - wd.parentId = null; - items.add(wd); + items.add(new EntryDescriptor(vs[i].getId(), null, vs[i].getName(), true, h, null)); } } // old style project types - WizardItemData oldsRoot = null; + EntryDescriptor oldsRoot = null; SortedMap sm = ManagedBuildManager.getExtensionProjectTypeMap(); Iterator it = sm.keySet().iterator(); while(it.hasNext()) { @@ -70,7 +68,7 @@ public class CNewWizard extends AbstractCWizard { if (supportedOnly && !pt.isSupported()) continue; // not supported String nattr = pt.getNameAttribute(); if (nattr == null || nattr.length() == 0) continue; // new proj style - MBSWizardHandler h = new MBSWizardHandler(pt.getName(), pt, IMG2, parent, wizard); + MBSWizardHandler h = new MBSWizardHandler(pt, parent, wizard); IConfiguration[] cfgs = pt.getConfigurations(); if (cfgs == null || cfgs.length == 0) continue; IToolChain tc = null; @@ -85,27 +83,18 @@ public class CNewWizard extends AbstractCWizard { if (tc == null) continue; h.addTc(tc); - WizardItemData wd = new WizardItemData(); + String pId = null; if (CDTPrefUtil.getBool(CDTPrefUtil.KEY_OTHERS)) { if (oldsRoot == null) { - oldsRoot = new WizardItemData(); - oldsRoot.name = Messages.getString("CNewWizard.0"); //$NON-NLS-1$ - oldsRoot.handler = null; - oldsRoot.image =IMG0; - oldsRoot.id = oldsRoot.name; - oldsRoot.parentId = null; + oldsRoot = new EntryDescriptor(OTHERS_LABEL, null, OTHERS_LABEL, true, null, null); items.add(oldsRoot); } - wd.parentId = oldsRoot.id; + pId = oldsRoot.getId(); } else { // do not group to - wd.parentId = null; + pId = null; } - wd.name = h.getName(); - wd.handler = h; - wd.image = h.getIcon(); - wd.id = h.getName(); - items.add(wd); + items.add(new EntryDescriptor(pt.getId(), pId, pt.getName(), true, h, IMG)); } - return (WizardItemData[])items.toArray(new WizardItemData[items.size()]); + return (EntryDescriptor[])items.toArray(new EntryDescriptor[items.size()]); } } diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/MBSWizardHandler.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/MBSWizardHandler.java index c05c50530ff..c49620bea0b 100644 --- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/MBSWizardHandler.java +++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/MBSWizardHandler.java @@ -12,7 +12,9 @@ package org.eclipse.cdt.managedbuilder.ui.wizards; import java.lang.reflect.InvocationTargetException; import java.util.Iterator; +import java.util.LinkedHashSet; import java.util.List; +import java.util.Set; import java.util.SortedMap; import java.util.TreeMap; @@ -34,6 +36,7 @@ import org.eclipse.cdt.managedbuilder.ui.properties.ManagedBuilderUIPlugin; import org.eclipse.cdt.managedbuilder.ui.properties.Messages; import org.eclipse.cdt.ui.newui.CDTPrefUtil; import org.eclipse.cdt.ui.wizards.CWizardHandler; +import org.eclipse.cdt.ui.wizards.EntryDescriptor; import org.eclipse.cdt.ui.wizards.IWizardItemsListListener; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; @@ -45,7 +48,6 @@ import org.eclipse.jface.wizard.IWizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableItem; @@ -68,25 +70,32 @@ public class MBSWizardHandler extends CWizardHandler implements ICBuildWizardHan Messages.getString("CWizardHandler.4") + //$NON-NLS-1$ Messages.getString("CWizardHandler.5"); //$NON-NLS-1$ - protected SortedMap tcs = new TreeMap(); + protected SortedMap full_tcs = new TreeMap(); private String propertyId = null; private IProjectType pt = null; protected IWizardItemsListListener listener; protected CDTConfigWizardPage fConfigPage; private IToolChain[] savedToolChains = null; private IWizard wizard; + private EntryDescriptor entryDescriptor = null; - public MBSWizardHandler(String _name, IProjectType _pt, Image _image, Composite p, IWizard w) { - super(p, Messages.getString("CWizardHandler.0"), _name, _image); //$NON-NLS-1$ + public MBSWizardHandler(IProjectType _pt, Composite p, IWizard w) { + super(p, Messages.getString("CWizardHandler.0"), _pt.getName()); //$NON-NLS-1$ pt = _pt; - if (w.getStartingPage() instanceof IWizardItemsListListener) - listener = (IWizardItemsListListener)w.getStartingPage(); - wizard = w; + setWizard(w); } - public MBSWizardHandler(IBuildPropertyValue val, Image _image, Composite p, IWizard w) { - super(p, Messages.getString("CWizardHandler.0"), val.getName(), _image); //$NON-NLS-1$ + public MBSWizardHandler(String name, Composite p, IWizard w) { + super(p, Messages.getString("CWizardHandler.0"), name); //$NON-NLS-1$ + setWizard(w); + } + + public MBSWizardHandler(IBuildPropertyValue val, Composite p, IWizard w) { + super(p, Messages.getString("CWizardHandler.0"), val.getName()); //$NON-NLS-1$ propertyId = val.getId(); + setWizard(w); + } + private void setWizard(IWizard w) { if (w.getStartingPage() instanceof IWizardItemsListListener) listener = (IWizardItemsListListener)w.getStartingPage(); wizard = w; @@ -98,13 +107,13 @@ public class MBSWizardHandler extends CWizardHandler implements ICBuildWizardHan if (table == null) { table = new Table(parent, SWT.MULTI | SWT.V_SCROLL | SWT.BORDER); table.setToolTipText(tooltip); - Iterator it = tcs.keySet().iterator(); + Iterator it = tc_filter(full_tcs.keySet()).iterator(); int counter = 0; int position = 0; while (it.hasNext()) { TableItem ti = new TableItem(table, SWT.NONE); String s = (String)it.next(); - Object obj = tcs.get(s); + Object obj = full_tcs.get(s); String id = CDTPrefUtil.NULL; if (obj instanceof IToolChain) { IToolChain tc = (IToolChain)obj; @@ -119,7 +128,7 @@ public class MBSWizardHandler extends CWizardHandler implements ICBuildWizardHan if (position == 0 && preferred.contains(id)) position = counter; counter++; } - if (tcs.size() > 0) table.select(position); + if (counter > 0) table.select(position); table.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { @@ -151,7 +160,7 @@ public class MBSWizardHandler extends CWizardHandler implements ICBuildWizardHan cfgs = ManagedBuildManager.getExtensionConfigurations(tc, pt); } if (cfgs == null || cfgs.length == 0) return; - tcs.put(tc.getUniqueRealName(), tc); + full_tcs.put(tc.getUniqueRealName(), tc); } public void createProject(IProject project, boolean defaults) throws CoreException { @@ -226,8 +235,8 @@ public class MBSWizardHandler extends CWizardHandler implements ICBuildWizardHan } } public String getHeader() { return head; } - public String getName() { return name; } - public Image getIcon() { return image; } +// public String getName() { return name; } +// public Image getIcon() { return null; /*image;*/ } public boolean isDummy() { return false; } public boolean supportsPreferred() { return true; } @@ -266,7 +275,7 @@ public class MBSWizardHandler extends CWizardHandler implements ICBuildWizardHan return ts; } public int getToolChainsCount() { - return tcs.size(); + return tc_filter(full_tcs.keySet()).size(); } public String getPropertyId() { return propertyId; @@ -333,5 +342,50 @@ public class MBSWizardHandler extends CWizardHandler implements ICBuildWizardHan CoreModel.getDefault().setProjectDescription(newProject, prjd); } catch (CoreException e) {} } + + public boolean isApplicable(EntryDescriptor data) { + return true; + } + + public void initialize(EntryDescriptor data) throws CoreException { + entryDescriptor = data; + } + /** + * Filters toolchains according to entryDescriptor data + * + * @param full - full set of toolchain IDs + * @return - set of compatible toolchain's IDs + * + * Note that full_tcs map should remain unchanged + */ + protected Set tc_filter(Set full) { + if (entryDescriptor == null) + return full; + Set out = new LinkedHashSet(full.size()); + Iterator it = full.iterator(); + while (it.hasNext()) { + String s = (String)it.next(); + // checks for TC compatibility are to be here + out.add(s); + } + return out; + } + + /** + * Clones itself. + */ + public Object clone() { + MBSWizardHandler clone = (MBSWizardHandler)super.clone(); + if (clone != null) { + clone.propertyId = propertyId; + clone.pt = pt; + clone.listener = listener; + clone.wizard = wizard; + clone.entryDescriptor = entryDescriptor; // the same ! + clone.fConfigPage = fConfigPage; // the same ! + clone.full_tcs = full_tcs; // the same ! + } + return clone; + } } diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/STDWizardHandler.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/STDWizardHandler.java index 1f1e81bdb80..a0e5654ab24 100644 --- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/STDWizardHandler.java +++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/STDWizardHandler.java @@ -21,26 +21,26 @@ import org.eclipse.cdt.managedbuilder.internal.core.Configuration; import org.eclipse.cdt.managedbuilder.internal.core.ManagedBuildInfo; import org.eclipse.cdt.managedbuilder.internal.core.ManagedProject; import org.eclipse.cdt.managedbuilder.internal.core.ToolChain; +import org.eclipse.cdt.managedbuilder.ui.properties.Messages; import org.eclipse.cdt.ui.newui.UIMessages; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.jface.wizard.IWizard; -import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Composite; public class STDWizardHandler extends MBSWizardHandler { - public STDWizardHandler(String _name, Image _image, Composite p, IWizard w) { - super(_name, null, _image, p, w); + public STDWizardHandler(Composite p, IWizard w) { + super(Messages.getString("StdBuildWizard.0"), p, w); //$NON-NLS-1$ } public void addTc(IToolChain tc) { if (tc == null) { - tcs.put(UIMessages.getString("StdProjectTypeHandler.0"), null); //$NON-NLS-1$ + full_tcs.put(UIMessages.getString("StdProjectTypeHandler.0"), null); //$NON-NLS-1$ } else { if (tc.isAbstract() || tc.isSystemObject()) return; // unlike CWizardHandler, we don't check for configs - tcs.put(tc.getUniqueRealName(), tc); + full_tcs.put(tc.getUniqueRealName(), tc); } } @@ -84,7 +84,7 @@ public class STDWizardHandler extends MBSWizardHandler { * If no toolchains selected by user, use default toolchain */ public IToolChain[] getSelectedToolChains() { - if (tcs.size() == 0 || table.getSelection().length == 0) + if (full_tcs.size() == 0 || table.getSelection().length == 0) return new IToolChain[] { null }; else return super.getSelectedToolChains(); diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/StdBuildWizard.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/StdBuildWizard.java index 6b6c49df769..64a9ecf19a4 100644 --- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/StdBuildWizard.java +++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/StdBuildWizard.java @@ -13,23 +13,31 @@ package org.eclipse.cdt.managedbuilder.ui.wizards; import org.eclipse.cdt.managedbuilder.core.IToolChain; import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager; import org.eclipse.cdt.managedbuilder.ui.properties.Messages; -import org.eclipse.cdt.ui.wizards.WizardItemData; +import org.eclipse.cdt.ui.wizards.EntryDescriptor; import org.eclipse.jface.wizard.IWizard; public class StdBuildWizard extends AbstractCWizard { + private static final String NAME = Messages.getString("StdBuildWizard.0"); //$NON-NLS-1$ - public WizardItemData[] createItems(boolean supportedOnly, IWizard wizard) { - STDWizardHandler h = new STDWizardHandler(Messages.getString("StdBuildWizard.0"), IMG0, parent, wizard); //$NON-NLS-1$ + public EntryDescriptor[] createItems(boolean supportedOnly, IWizard wizard) { + STDWizardHandler h = new STDWizardHandler(parent, wizard); h.addTc(null); // add default toolchain IToolChain[] tcs = ManagedBuildManager.getRealToolChains(); for (int i=0; i